python的内置类型是什么意思_Python——内置类型
Python定义了丰富的数据类型,包括:
数值型:int, float, complex
序列:(iterable) str, unicode, tuple, list, bytearray, buffer, xrange
集合:t, fronzet
映射:dict
⽂件:file
布尔值:True、Fal 和 bool() 函数,其中 bool() 函数将⼀个值转变成布尔对象 True 或 Fal 。
可调⽤对象:凡是可以使⽤ x() 调⽤ x 的对象 x ,称为可调⽤的,x 可以是类型、函数、类型中定义了 __call__() ⽅法的实例等。
苏玛素None:
memoryview:memoryview对象是Python2.7的新增对象,允许Python代码访问⼀个⽀持缓冲协议(buffer protocol)的对象它的内部数据,然后可以将其转变为字节字符串或字符对应ASCII值的列表等。
上下⽂管理器:上下⽂管理器⽤在 with 语句中,上下⽂管理协议(context management protocol)包括
了 contextmanager.__enter__() 和 contextmanager.__exit__(exc_type, exc_val, exc_tb) 两个⽅法。
装饰器:装饰器实际上就是⾼阶函数,属于函数式编程的范畴,得益于Python中“⼀切皆对象”的思想,装饰器接受函数对象作为参数,返回的则是⼀个修改后的函数对象。
其他:
python中,模块、类型、函数、实例、都是对象,可谓⼀切皆对象,此外,还有 code 对象, Type 对象即⼀个对象所属的类型,通过type() 函数来获取;
类型
名称
构造⽅法
介绍
bastring
抽象的(不能实例化)的类型,是str和unicode类型的基类型,可以通过isinstance(x, bastring)来判断x是不是str或者unicode类型。
bool
bool(x)
⽤来计算表达式x并返回x是True还是Fal。bool是int的⼦类,只有两个实例:True和Fal,True和Fal的值分别为1和0,但
str(True)和str(Fal)的值分别是'True'和'Fal'。
buffer
buffer(obj, offt=0, size=-1)
obj必须是string或者是array,该函数返回⼀个从offt开始,⼤⼩为size的obj的部分只读的buffer对象,
如果size<0,或者obj的⼤⼩⼩于size,则会从offt开始直达obj结尾。
classmethod
类⽅法
情人节卡片情话
classmethod(function)
返回⼀个类⽅法,只能在类的定义中使⽤,可以⽤@classmethod替代。
code
代码对象
compile(source, filename, mode[, flags[, dont_inherit]])
code 对象⼀般通过内置函数 compile() ⽅法创建,也可以通过⼀个函数的func_code属性查看,关于code对象的细节,在下⽂介绍。
complex
长篠之战复数
complex(real, imag=0)
dict
字典
dict(x={})
如果参数x是⼀个字典,那么返回它的⼀个拷贝,参数x也可以是⼀个可迭代对象,其中每⼀个元素是⼀个⼆元组,如:x = [('a', 1), ('b', 2)]
enumerate
枚举
enumerate(iterable, start=0)
从⼀个可迭代对象⽣成⼀个新的迭代器,这个迭代器的每⼀个item都是⼀个⼆元组,⼆元组的⾸元是从start开始连续递增的下标,⽽⼆元组的次元是参数可迭代对象从⼀个开始的内部元素。
open
⽂件
open(filename, mode='r', bufferzies=-1)
以参数mode形式打开指定的filename,返回⼀个file对象。
float
浮点型
float(x)
会计考试时间把数字或合适的字符串转换成浮点数。
frozent
frozent(q=[])
返回⼀个冻结集合对象,关于t和frozent的讨论请见 这篇博⽂。
int
整型
int(x[, radix])
将数字或合适的字符串转换成整数,当x是⼀个字符串时,radix需要指定,表⽰转换时的基数,默认是10,实际上转换基数可以介于2和36之间
list
列表
如果参数q是⼀个列表,则返回它的拷贝;参数q必须是⼀个可迭代对象,list()返回和这个可迭代对象具有相同顺序相同元素的列表。
long
长整型
long(x [, radix])
将数字或合适的字符串转换成长整数
object
object()
返回⼀个最基本的类型的新实例。
property
属性
property(fget=None, ft=None, fdel=None, doc=None)
只能在类定义中使⽤,通常使⽤装饰器@property
reverd
reverd(q)
返回⼀个迭代器,这个迭代器和序列q有着相反的元素对象,这个⽅法不会改变参数q
t
宫缩症状集合
t(q=[])
返回⼀个t对象,t对象是可变的,如果q是⼀个t对象,那么t(q)返回它的拷贝,关于内置类型t和frozent的详细讨论参考这篇博⽂
slice
切⽚
颐和园
slice([start, ] stop[, step])
返回⼀个slice对象,
staticmethod
静态⽅法
staticmethod(function)
只在类定义中调⽤,返回⼀个静态⽅法对象,或使⽤装饰器@staticmethod
str
plain string
str(obj)
如果obj本⾝就是str类型的,则返回obj对象;否则,返回obj对象的⾯向读者的形式,主要区别于repr⾯向python解释器的形式
super
返回参数obj的⽗类的对象,obj必须是cls或cls⼦类的实例,这个⽅法主要⽤于调⽤⽗类的⽅法,这个函数只在⽅法代码中调⽤
tuple
元组
怎样更容易怀孕
tuple(q)
如果q就是tuple对象,则返回它的拷贝;否则,返回⼀个和q具有相同顺序相同元素的tuple对象,
q必须是⼀个可迭代对象
type
type(obj)
type(x)等价于x.__class__,即x所属的类型对象。
type 本⾝是⼀个内置的类型,也可以作为⼀个⼯⼚对象,返回的是类型对象。Python中的类型对象只要⽀持相等与否的⽐较(equality comparison)和字符串表现形式即可。
按照⾯向对象的特点,类型对象⼜常常是可调⽤的,⽐如内置的 int, float, list 等等,调⽤这些对象可以创建他们的实例,同时类型对象可以被继承(subclass),这都是类型的基本特征。
unicode
unicode string
unicode(string [,codec, [, errors]])
返回⼀个unicode字符串对象
xrange
xrange([start, ] stop [,step=1])
range()返回⼀个列表对象,xrange()则返回⼀个可迭代的xrange对象,这个对象不像range()返回的list那样将所有的元素都事先⽣成好放在内存中,⽽是在迭代的过程中每次⽣成⼀个,从⽽对于遍历⼤数据量的数字序列时,xrange在内存上具有显著优势。Python 3以后,不再使⽤xrange这个概念,⽽是将range基于Python 2中的xrange改良,使得Python 3 中range的功能更强⼤。
Python中的 code 对象
我们⾸先看⼀下内置函数 compile() 的介绍:
compile(source, filename, mode[, flags[, dont_inherit]]) ->code object
Compile the source string (a Python module, statementorexpression) into a code object that can be executed by theexec statement oreval().
The filename will be udfor run-time error messages.
The mode must be'exec' to compile a module, 'single'to compile a single (interactive) statement,or 'eval'to compile an expression.
The flags argument,ifprent, controls which future statements influence the compilation of the code.
The dont_inherit argument,if non-zero, stops the compilation inheriting the effects of any future statements in effect in the code calling compile; if abnt or zero the statements do influence the compilation, in addition to any features explicitly specified.
总结起来就是:
compile()函数⽤于构造⼀个 code 对象,code对象可以作为 exec() 和 eval() 的参数;
对于任意⼀个Python函数⽽⾔,其 func_code 属性就是⼀个 code 对象,该对象是不可调⽤的,但是可以将它绑定给另⼀个具有相同参数个数的函数对象,从⽽创建⼀个新的函数对象:
>>> f = lambda x, y: x + y
>>> f.func_code
at 0000000001D74530, file "", line 1>四个月宝宝吃什么
>>> code_obj = f.func_code
>>> def g(x, y): pass
...
>>> g.func_code = code_obj
>>> g(1, 9)
10
原本我们是没有定义函数 g 的函数体的,但是通过替换它的 func_code 属性,可以将不可调⽤的 code 对象替换成⼀个可调⽤的函数,是不是有⼀种⾦蝉脱壳的感觉呢。
Python的 types 模块
types模块的属性是 Python的内置类型,包括:
>>> dir(types)
['BooleanType', 'BufferType', 'BuiltinFunctionType', 'BuiltinMethodType', 'ClassType', 'CodeType', 'ComplexType',
'DictProxyType', 'DictType', 'DictionaryType', 'EllipsisType', 'FileType', 'FloatType', 'FrameType', 'FunctionType', 'GeneratorType', 'GetSetDescriptorType', 'InstanceType', 'IntType', 'LambdaType', 'ListType', 'LongType', 'MemberDescriptorType',
'MethodType', 'ModuleType', 'NoneType', 'NotImplementedType', 'ObjectType', 'SliceType', 'StringType', 'StringTypes',
'TracebackType', 'TupleType', 'TypeType', 'UnboundMethodType', 'UnicodeType', 'XRangeType', '__builtins__', '__doc__',
'__file__', '__name__', '__package__']
如何知道这些属性其实是 Python 的内置类型呢?
例如:
>>> types.DictionaryType
>>> types.DictType
>>> type({})
可见,types.DictType 和 types.DictionaryType 其实就是内置类型 dict,也就是 type({}) 。
Python 类型的⽅法查找路径(Method Resolution Order)
Python⽀持多重继承,当引⽤⼀个继承了多个类型的实例的属性时,如何确定属性、⽅法的查找顺序,称为⽅法查找路径。
Python中⼀个继承⾃多个类型的类使⽤⼀种称为 C3 的⽅法查找路径(The Python 2.3 Method Resolution Order),通过⼀个⾃定义类型的 __mro__ 属性可以查看该类型的⽅法查找路径:
>>> class D(object):
... d = 100
...
>>> class B(D):
... pass