数据类型
Python 中的对象引用不包含附属类型.
- a = 5
- type(a)
- # int
- a = 'foo'
- type(a)
- # str
Python 是强类型语言, 每个对象都有明确的类型(或类). 类型转换只会发生在特定的情况下.
- '5'+ 5
- # 会出现错误, 字符类型不能和数值类型相加.
- a = 4
- b = 2.5
- print('a is {0}, b is {1}'.format(type(a), type(b)))
- # a is <class 'int'>, b is <class 'float'>
isinstance()函数检查对象是否是某个类型的实例.
- a = 1; b = 1.2
- isinstance(a, int)
- #True
- isinstance(b, float)
- #True
- isinstance(a, bool)
- #False
属性和方法
Python 的对象通常都有属性 (其他存储在对象内部的 Python 对象) 和方法(对象的附属函数可以访问对象的内部数据).
obj.attribute_name 访问属性和方法
- a = 'str'
- dir(a)
- # 查看 a 对象的属性和方法
getattr()通过名字访问属性和方法.
- getattr(a, 'format')
- # <function str.format>
访问对象的名字通常称作反射.
鸭子类型
不关心对象的类型, 只关心对象是否有过某些方法或用途. 通常被称为鸭子类型.
走起路来像鸭子, 叫起来像鸭子, 那么它就是鸭子.
检验对象是否是列表(或是 numpy 数组), 如果不是的话, 将其转变成列表
- def isiterable(obj):
- try:
- iter(obj)
- return True
- except TypeError:
- return False
- if not isinstance(x, list) and isiterable(x):
- x = list(x)
运算符
判断两个引用是否指向同一个对象, 可以使用 is 方法, is not 可以判断两个对象是不同的.
is 和 is not 可以判断一个变量是否为 None
- a = [1,2,3]
- b = a
- c = list(a) # 新创建一个 list
- a is b
- # True
- a is not c
- # True
- a == c
- # True
- d = None
- d is None
- # True
可变与不可变对象
Python 中列表, 字典, numpy 数组和用户定义的类型(类), 都是可变的. 这些对象或包含的值是可以被修改的.
Python 中的字符串和元组是不可以变的.
来源: http://www.bubuko.com/infodetail-3415331.html