Python 对象 之 数据类型
对于python,一切事物都是对象,程序中存储的所有数据都是对象,对象基于类创建
计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。
class 指自定义类型,type 指内置类型。两者都表示数据类型,称呼不同而已
每个对象都有一个身份、一个类型和一个值,身份指对象在内存中所处位置的指针(内存中的地址),内置函数id()可返回一个对象的身份。变量名就是引用这个具体位置的名称
实例化:创建特定类型的对象
实例被创建后,其身份和类型不可改变
若对象值可修改,称为可变对象
若对象值不可修改,称为不可变对象
容器:某个对象包含对其它对象的引用,如 列表。
python是强类型语言,对象所属的类型决定了这个对象所能参与的操作或它支持的方法,即方法存在类中,对象里具有的功能都是去类里找的。
大多数对象都有大量特有的数据属性和方法
属性:与对象相关的值,如 变量名
方法:被调用时将在对象上执行某些操作的函数
python会把类型中经常使用的操作做成
1.内置方法
2.语法糖,自动触动方法
>>> name='test'
>>> name.upper() --方法
TEST
>>> num = 1
>>> print(num.real) --属性
1
help(type) -- 查看某个类型有哪些方法或属性
>>> help(int)
help(type.func) -- 查找某个方法的用法
>>> help(str.find)
使用点(.)运算符可以访问属性和方法
print(type(obj)) -- 查看对象由哪个类创建的
>>> from twisted.internet import reactor
>>> print(type(reactor))
核心数据类型
数字:int,long,float,complex,bool (0:False, 1:True)
字符:str,unicode
列表:list
元组:tuple
字典:dict
文件:file
其它:set(集合),frozeset, 类类型,None
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
Python对象的运算
1. 算术运算
+ - * / % // ** = != ==
+= -= *= /= %= //= **=
//: 地板除,只取整数部分
**: 求幂
%: 取模,即取余数
注意:条件判断是否相等用==,一个=是赋值
if a == b:
pass
>>> (1+0.01) ** 365 # 每天进步一点点
37.78343433288728
>>> (1-0.01) ** 365 # 每天退步一点点
0.025517964452291125
python 有一个和数值相关的库 math , math模块可以实现算术的高级运算
>>> import math
>>> math.pi
3.141592653589793
2. 位运算:按位运算时把数字当做二进制来进行运算
& 按位与,两个都为真结果才为真
| 按位或,只要有一真结果为真
^ 按位异或,只有一真和一假时结果才为真
~ 按位取反,>>> ~9 => -10
<< 左移动,将位向左移一位
>> 右移动,将位向右移一位
128 64 32 16 8 4 2 0
0 0 0 0 0 0 0 0
10 1 0 1 0
50 1 1 0 0 1 0
& 0 0 0 0 1 0
| 1 1 1 0 1 0
3. 逻辑运算符
and
or
not
在Python中,可以直接用True、False表示布尔值(注意大小写),也可以通过布尔运算计算出来。布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为True,and运算结果才是True;
or运算是或运算,只要其中有一个为True,or运算结果就是True;
not运算是非运算,它是一个单目运算符,把True变成False,False变成True
布尔值经常用在条件判断中,如:
if age >= 18:
print('adult')
else:
print('teenager')
4. 成员运算符
in
not in
5. 身份运算符
is
is not
if a is b:
对象引用(变量)
python将所有数据存为内存对象,变量实际上是指内存对象的引用
变量和对象是分开存放的,变量名自身也是对象。对象不被引用时有垃圾回收器回收。
变量在程序中就是用一个变量名表示,变量可以是任意数据类型,注意变量名没有类型,对象才有。
= 用于将变量名与内存中的某对象绑定,如果对象事先存在,就直接进行绑定;否则,由=创建引用的对象
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。因此和静态语言相比,动态语言更灵活。例如Java是静态语言,赋值语句如下(// 表示注释):
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
注意:不要把赋值语句的等号等同于数学的等号,x = x + 2。在程序中,赋值语句先计算右侧的表达式x + 2,得到结果再赋给变量x
>>> id(name)
139992327745232
>>> test = 'bobo'
>>> id(test)
139992327745232
变量命名规则
变量名必须是大小写英文(区分字母大小写)、数字和_的组合,且不能用数字开头
禁止使用保留字 (2和3版本的保留字有所不同)
命名惯例:
以单一下划线开头的变量名(_X)不会被 from module import *语句导入
前后有下划线的变量名(_X_)是系统定义的变量名,对解释器有特殊意义
以双下划线开头,但结尾没有双下划线的变量名(__X)是类的本地(“压缩”)变量
通过交互模式运行时,只有单个下划线的变量名(_)会保存最后表达式的结果 。
>>> 1+1 在交互模式中,表达式是可以直接运行的,在程序中需要print
2
>>> print(_)
2