Python语法速查: 1. 数据类型与内置函数
本篇索引
(1)常用内置数据类型
(2)类型检查常用方法
(3)常用内置函数
(4)程序结构的数据类型
(1)常用内置数据类型
| 分类 | 类型名称 | 描述 |
|---|---|---|
| 数字 | int | 整数 |
| float | 浮点数 | |
| complex | 复数 | |
| bool | 布尔值 | |
| 序列 | str | 字符串(不可变序列) |
| list | 列表 | |
| tuple | 元组(不可变序列) | |
| range | 整数范围(不可变序列) | |
| bytes | 字节数组(不可变序列) | |
| bytearray | 可变字节数组 | |
| 映射 | dict | 字典 |
| 集合 | set | 可变集合 |
| frozenset | 不可变集合 | |
| None | NoneType | 空对象,它没有任何属性 |
(2)类型检查常用方法
| 用法 | 类型 | 描述 | 举例 |
|---|---|---|---|
| id(实例) | 内置函数 | 返回一个对象的身份(整数) |
id(a) |
| type(实例) | 内置函数 | 返回一个对象实例的类型 | type(a) |
| is | 运算符 | 比较2个对象是否同一身份 |
a is b type(a) is str type(a) is type(b) # a与b是否同一类型 |
| isinstance(实例, 类名) | 内置函数 | 入参对象是否是入参类的实例 |
isinstance(s, list) # s是否为列表 isinstance(f, Foo) # f是否为Foo类的实例 |
(3)常用内置函数
| 名称 | 简述 | 用法 | 举例或说明 |
|---|---|---|---|
| 数学运算 | |||
| abs() | 返回一个数的绝对值 | abs(x) | abs(a) |
| pow() | x的y次方运算,将结果对z取模 | pow(x, y[,z]) |
pow(2,3,3) # 结果为2 |
| round() | 将x按10的负n次取四舍五入 | round(x[, n=0]) | 舍入规则见下详述 |
| divmod() | 将a除以b的商和余数作为元组返回 | divmod(a, b) |
divmod(10,3) # 结果为(3,1) |
| 内置数据类型实例生成 | |||
| int() | 根据入参数字或字符串,生成整数实例 | int(x[, base=10]) | base默认为10, 详见下例 |
| float() | 根据入参数字或字符串,生成浮点数实例 | float(x) |
float(3) # 结果为3.0 |
| complex() | 生成复数实例 | complex(r[, i]) | 较少用到 |
| bool() | 生成布尔值实例 | bool([x]) | 不带入参时默认返回False |
| list() | 生成列表实例 | list([iter]) | iter须是可迭代对象 |
| dict() | 生成字典实例 | dict([m]) | 详见下述 |
| tuple() | 生成元组实例 | tuple([iter]) | iter须是可迭代对象 |
| str() | 生成字符串实例 | str([object]) | 入参object的__str__方法 |
| range() | 创建range实例 |
range(stop) range(start, stop [,step]) |
range对象可以用迭代、也可用切片访问 |
| set() | 生成集合实例 | set([iter]) | iter须是可迭代对象 |
| frozenset() | 生成不可变集合实例 | frozenset([iter]) | iter须是可迭代对象 |
| slice() | 生成切片对象 |
slice(stop) slice(start, stop [,step]) |
较少直接使用 |
| bytes() | 生成不可变字节数组实例 | bytes([source [,encoding [,errors]]]) | 详见下述 |
| bytearray() | 生成可变字节数组实例 | bytearray([source [,encoding [,errors]]]) | 用法同上,内容可变 |
| memoryview() | 生成memoryview实例 | memoryview(obj) | 较少用到 |
| object() | 生成一个基类实例 | object() | 较少用到 |
| 编码与解码 | |||
| hex() | 将数值x用16进制字符串表示 | hex(x) |
hex(16) # 结果为'0x10' |
| oct() | 将数值x用8进制字符串表示 | oct(x) |
oct(16) # 结果为'0o20' |
| bin() | 将数值x用2进制字符串表示 | bin(x) |
bin(8) # 结果为'0b1000' |
| ord() | 将单字符转换成utf-8数值 | ord(c) |
ord('a') # 结果为97 ord('数') # 结果为25968 |
| chr() | 将数值x转换成单字符字符串 | chr(x) |
chr(97) # 结果为'a' chr(25968) # 结果为'数' |
| ascii() | 像repr()那样显示对象,非ASCII字符显示为转义序列 | ascii(object) | 较少用到 |
| 序列操作 | |||
| len() | 返回s中包含的项数 | len(s) | s可以是:列表、元组、字符串、集合、字典 |
| min() | 如果只有1个参数s,返回s中各项的最小值。如果有多个参数,返回各个参数中的最小值。 | min(s[, args, ...]) |
s可以是可迭代对象 min([1,3,5]) # 结果为1 min(1,3,5,7) # 结果为1 |
| max() | 如果只有1个参数s,返回s中各项的最大值。如果有多个参数,返回各个参数中的最大值。 | max(s[, args, ...]) |
s可以是可迭代对象 min([1,3,5]) # 结果为5 min(1,3,5,7) # 结果为7 |
| sum() | 计算可迭代对象iter中所有项的和,initial为累加初始值,默认为0。只能用于数值计算。 | sum(iter[ ,initial]) |
sum([1,2,3]) # 结果为6 sum([1,2,3], 10) # 结果为16 |
| 迭代操作 | |||
| all() | 若可迭代对象iterable中的所有值都为True,则返回True。 | all(iter) |
all([0,1,2,3]) # 结果为False |
| any() | 若可迭代对象iterable中的任意值为True,则返回True。 | any(iter) |
any([0,1,2,3]) # 结果为True |
| enumerate() | 根据入参迭代器,产生一个新迭代器,其中每个元素为一个元组:内含一个计数值和原迭代出的值。 | enumerate(iter[ ,start=0]) |
for i,x in enumerate(['a','b']) pass # 结果迭代出(0,'a'), (1,'b') |
| zip() | 产生一个新迭代器,第n个元素为一个(s1[n], s2[n], ...)的元组,其长度为最短的一个迭代器长度。 | zip([s1 [, s2 [, ...]]]) |
a = [1,2,3] b = ['x','y'] for t in zip(a, b) pass # 迭代结果为(1,'x'), (2,'y') |
| sorted() | 根据入参迭代器的内容排序,创建有序列表 | sorted(iter, *, key=None, reverse=False) | 详见下述 |
| reversed() | 产生一个迭代器,将入参序列的所有元素位置颠倒(注意:跟sorted()完全不同) | reversed(seq) |
for x in reversed([1,2,'a']): pass # 迭代结果为 'a', 2, 1 |
| filter() | 产生一个迭代器,其内容是对入参iter中的每个元素使用func函数进行过滤,只有func返回True的才被加入新迭代器。 | filter(func, iter) |
a = [1,2,3,4,5,6,7,8] filter(lambda x:x%2==1, a) # 迭代器中内容为 1,3,5,7 |
| map() | 产生一个迭代器,其每一项是将函数func应用到iter中的每一项返回的结果。若入参有多个iter迭代器,则相应的函数func应有多个入参。 | map(func, iter, ...) |
map(lambda x:x*2, [1,3,5,7]) # 迭代器中内容为 2,6,10,14 |
| iter() | 返回一个可生成object中各项的迭代器。 | iter(object[ ,sentinel]) |
较少直接使用 |
| next() | 返回迭代器iter中的下一项。 | next(iter[ ,default]) |
较少直接使用 |
| 对象实例操作 | |||
| id() | 返回object的唯一整数标识符(这是一个内存位置)。 | id(object) |
结果为一个整数,较少直接使用 |
| type() | 当单参数调用时,返回入参object的类型。当三参数调用时,创建一个新type对象(一般用于元类)。 |
type(object) type(name, bases, dict) |
type(1) # 结果为<class 'int'> type('a') # 结果为<class 'str'> |
| isinstance() | 如果object是clsinfo类的一个实例,则返回True。clsinfo可以是一个含多个类的元组。 | isinstance(object, clsinfo) |
# 设有一个名为Foo的自定义类 f = Foo() isinstance(f, Foo) # True isinstance(f, (Foo,list)) # True isinstance([1,2], (Foo,list)) # True isinstance(f, (list,tuple) # False |
| repr() | 返回object的字符串表示形式。 | repr(object) | 一般在类内部的__repr__()方法会定义本对象的字符串表示形式。 |
| dir() | 返回object对象的属性名(含方法名)列表,若object是一个模块,则返回其内部定义的符号列表。 | dir(object) | 如果类内部定义了__dir__属性,则返回此值。 |
| hasattr() | 若name是object的属性名,则返回True | hasattr(object, name) |
入参name是一个字符串 |
| getattr() | 返回对象的name属性的值,若无此属性,则default是可选的返回值,否则引起AttributeError。 | getattr(object, name [,default]) |
a = getattr(obj, 'p1') # 效果同 a = obj.p1 |
| setattr() | 设置对象的属性 | setattr(object, name, value) |
setattr(obj, 'p1', a) # 效果同 obj.p1 = a |
| delattr() | 删除对象的属性 | delattr(object, name) |
delattr(obj, 'p1') # 效果同 del obj.p1 |
| hash() | 返回对象的整数散列值。一般可变对象不会定义散列值,除非类内部定义了__hash__()方法。 | hash() |
hash('abc') # 结果为526986374 hash(3.14) # 结果为1846836513 |
| callable() | 检查一个对象是否是可调用的。但有时即便返回 True,object 仍然可能调用失败。 | callable(object) | 对于函数、方法、lamdba表达式、类、实现了__call__()方法的类实例,它都返回True。 |
| 类操作 | |||
| staticmethod() | 创建在类中使用的静态方法。 | staticmethod(func) | 一般通过@staticmethod装饰器隐式调用该函数 |
| classmethod() | 创建在类方法。 | classmethod(func) | 一般通过@classmethod装饰器隐式调用该函数 |
| issubclass() | 如果class是clsinfo的子类,或class是基于抽象基类clsinfo注册的,则返回True。clsinfo可以是一个含多个类的元组。 | issubclass(class, clsinfo) |
issubclass(Foo, BaseFoo) # 结果为 True issubclass(Foo, (BaseFoo,list) # 结果为 True |
| super() |
返回一个代理对象,提供可以调用基类中的方法的手段。type是当前子类名,object一般是self。 在Python3中,在子类方法中可以省略type和object参数,直接简写成:super() |
super(type [,object]) |
class B(A): def foo(self): # 调用基类A的foo方法 super(B,self).foo() # 在Python3中可简写成: # super().foo() |
| property() | 创建一个虚拟属性。fget, fset, fdel分别为自定义的属性读取、设置、删除方法,doc为文档字符串。 | property(fget=None, fset=None, fdel=None, doc=None) |
class C: def __init__(self): self._x = 'c' def gx(self): return self._x x=property(fget=gx, doc='a') # 定义了一个只读的属性x |
| 域操作 | |||
| globals() | 返回代表当前全局作用域的所有符号的字典。 | globals() |
globals() |
| locals() | 返回代表当前局部作用域的所有符号的字典。 | locals() |
locals() |
| vars() | 返回object的所有属性和属性值的字典对象,如果没有入参,则相当于调用locals() | vars([object]) |
vars(obj) |
| 输入输出与文件操作 | |||
| input() | 显示prompt提示信息,并读取一行输入,将读入内容不作任何修改作为字符串返回。(Python3中取消了原raw_input()函数) | input([prompt]) |
>>> input('pls ipt:') pls ipt:123 # 返回结果为:'123' |
| print() | 打印一系列值到屏幕上。入参中可设置:多个显示对象之间的分隔符、换行符、输出设备、强制刷新等,一般不用修改。 | print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) |
一般用于调试用 |
| open() | 打开文件并返回一个新文件对象。 | open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) |
在文件操作章节详细描述 |
| 杂项 | |||
| eval() | 计算入参表达式的值并返回结果。expr是一个字符串或代码对象。globals和locals参数可指定操作时的全局和局部命名空间映射对象。 | eval(expr, globals=None, locals=None) |
x = 1 y = eval('x+1') # 结果为2 |
| exec() | 执行Python语句,入参code可以是字符串、文件或代码对象。globals和locals参数可指定操作时的全局和局部命名空间映射对象。 | exec(code[, globals[, locals]]) |
x = 1 code = """s = x + 1 print(s)""" exec(code) # 结果为2 exec(code, {'x':10}) # 结果为11 |
| format() | 按照format_spec中的格式将value转换为有格式的字符串,该操作调用value.__format__()方法。 | format(value[, format_spec]) |
一般在格式化字符串时被隐式调用 |
| help() | 调用内置的帮助系统。object可以是字符串(表示模块名、类名、函数名、方法名、关键字、文档主题名称),如果是其他类型的对象,则会出现与该对象有关的帮助界面。 | help([object]) |
help('math') |
| compile() | 将source对象编译为代码对象,结果可被用于eval()和exec()函数。 | compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) |
若不是开发框架的话,一般用不到 |
| breakpoint() | Python3.7中新增的内置函数,用来设置程序运行时的断点,程序运行到该函数时自动进入调试器。这是个方便函数,可以让你很方便地进入Pdb调试器(不用再显式导入调试模块等)。 | breakpoint(*args, **kwargs) | 在需要设置断点的地方直接调用breakpoint()即可 |
● round(x[, n])
说明:
在Python3中,当被舍入数字为5且为第1位小数时,舍入规则如下:若被舍入数字的前一个数为偶数,则朝0方向进行四舍五入;否则远离0,正负数都遵循这个规则。其它位的四舍五入不适用此规则,依旧按照普通数学规则进行。
举例:
>>> round(2.5) # 结果为2
>>> round(-2.5) # 结果为2
>>> round(3.5) # 结果为4
>>> round(-3.5) # 结果为4
● int(x[, base])
说明:
x可以是数字或字符串,base是入参的转换进制基数,可以是2、8、16、16等,转换结果总是10进制整数。
举例:
>>> int('100') # 结果为100
>>> int('100', 10) # 结果为100
>>> int('100', 16) # 结果为256
>>> int('100', 2) # 结果为4
● dict([m])
说明:
入参m若是字典,则dict(m)就创建一个m浅复制。若m不是字典,则必须能够产生(key, value)形式的迭代值。也可用关键字创建字典,见下例。
举例:
>>> dict('a'=1, 'b'=2) # 结果为{'a':1, 'b':2}
>>> dict() # 结果为空字典{}
● bytes([source [,encoding [,errors]]])
说明:
生成不变字节数组,入参source为原始输入字符串,入参encoding指定要使用的字符编码方式。
举例:
>>> x = bytes() # 结果为空字节数组 b''
>>> x = b'' # 结果同上
>>> x = bytes('abc') # 结果为 b'abc'
>>> x = bytes('ab数字', 'utf-8') # 结果为 b'ab\xe6\x95\xb0\xe5\xad\x97'
● sorted(iter, *, key=None, reverse=False)
说明:
根据iter迭代器中的各项值的内容进行排序(从小到大),创建有序列表,一般只能对数字或字符串进行排序。key是个单参数函数,可以对元素在被排序前进行预处理,将一些常规来说不能排序的元素预处理成可排序的数字或字符串。reverse是个标志位,用以指出是否逆序(从大到小)排序。(注意:Python3最新版本中已废除了cmp参数)
举例:
>>> sorted([1,7,3,5]) # 结果为[1,3,5,7]
>>> sorted([1,7,3,5], reverse=True) # 结果为[7,5,3,1]
>>> sorted(['c','b','a']) # 结果为['a','b','c']
>>> sorted([('b',2),('a',1)], key=lambda x:x[1]) # 结果为[('a',1),('b',2)]
>>> # 上例说明:入参列表中的元素为元组,一般不能排序。但这里用lambda生成了一个匿名函数,对元素进行预处理,取出每个元素元组中的数字,然后用这个数字作为排序依据,给sorted()函数进行排序
● 旧版raw_input()用法
说明:
在Python3中的input()函数相当于Python2中的raw_input()函数。而在Python2中的input()函数中,用户在输入字符串内容时必须带上引号,否则会报错(非字符串类型则不需要引号)。所以在Python2中,一般尽量使用raw_input()函数。
举例:
x = input('x:') # 用户必须输入带引号的字符串:'abc',否则会报错
x = raw_input('x:') # 用户可以直接输入:abc,系统会自动将其转换为字符串
● eval(expr, globals=None, locals=None)
说明:
eval()计算字符串形式的表达式或代码对象expr,并返回计算结果。其中globals和locals参数可指定操作时的全局和局部命名空间,如果省略,就使用当前实际的全局和局部命名空间中的值。
举例:
# 例1:
x = eval(input('Enter an expression:')) # 用户若输入:1+2*3,返回值为7 # 例2:
scope = {'x':2, 'y':3}
eval('x+y', scope) # 相当于在scope命名空间中运行eval(),结果为5
● exec(code[, globals[, locals]])
说明:
exec在Python2中是一个语句,exec()在Python3中是内置函数,exec()最有用的地方在于可以动态地创建代码字符串。其中globals和locals参数可指定操作时的全局和局部命名空间,如果省略,就使用当前实际的全局和局部命名空间中的值。
由于每次执行exec()或eval()时,Python都要编译一次入参字符串,这个比较耗资源。如果某个代码字符串要反复执行多次,最好是先编译代码,然后在后续的调用中使用编译过的code对象。详见后面的例子。
举例:
# 例1:
x = 1
scope = {}
exec('x=2', scope) # 在命名空间scope中运行赋值语句,所以x仅在scope范围为2,在实际的全局空间中仍为1 # 例2:
s = 'for i in range(100): print(i)'
code = compile(s, '', 'exec') # 将要执行的字符串代码先进行编译
exec(code) # 执行刚才已编译过的代码
● future_builtins
在Python2中,如果使用 future_builtins 模块,可以使用以下内置函数:
| 函数 | 说明 |
|---|---|
| ascii(object) | 产生的输出与 repr() 相同。 |
| hex(object) | 创建十六进制字符串,但使用__index__()特殊方法来得到整数值, 而不是调用__hex__() |
| otc(object) | 创建八进制字符串,但使用__index__()特殊方法来得到整数值, 而不是调用__oct__() |
| filter(function, iterable) | 创建迭代器而不是列表,等同于 itertools.ifilter()。 |
| map(function, iterable, ...) | 创建迭代器而不是列表,等同于itertools.imap()。 |
| zip(iter1, iter2, ...) | 创建迭代器而不是列表,等同于itertools.izip()。 |
(4)程序结构的数据类型
在Python中,函数、类、方法、模块等等都可以当作数据操作的对象,下表为表示程序本身各种元素的类型。
| 分类 | 类型名称 | 描述 |
|---|---|---|
| 可调用 | types.BuiltinFunctionType | 内置函数或方法 |
| types.FunctionType | 用于定义的函数(包括lambda匿名函数) | |
| types.MethodType | 类中定义的方法 | |
| type | 因为类本身也是可以被调用的,所以这里也列一下。 | |
| object | 因为类本身也是可以被调用的,所以这里也列一下。 | |
| 模块 | types.ModuleType | 模块 |
| 类型 | type | 内置数据类型和类的类型 |
| 根类 | object | 所有类型和类的祖先 |
Python语法速查: 1. 数据类型与内置函数的更多相关文章
- Python语法速查:目录
1. 数据类型与内置函数 2. 列表.元组.字典.集合操作 3. 字符串格式化 4. 字符串常用操作 5. 运算符.math模块.表达式 6. 循环与迭代 7. 函数基础 8. 类与对象 9. 函数进 ...
- Python---基础---数据类型的内置函数
2019-05-23 ---------------------------- 一. #数据类型的内置函数Python有哪些数据类型?Number 数值型string 字符型list ...
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- Python语法速查: 12. 文件与输入输出
返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...
- Python语法速查: 7. 函数基础
返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
- Python语法速查: 5. 运算符、math模块、表达式
返回目录 (1)一些较容易搞错的运算符 一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符.运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是 ...
- Python语法速查: 15. 常用数据结构
返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...
- Python语法速查: 6. 循环与迭代
返回目录 (1)while循环与for循环 while仅能用于普通循环,而for除了可以做循环外,还可以遍历序列.集合.字典.迭代器等. 需要注意的是,在类似:for i in somelist: 的 ...
- Python语法速查: 2. 列表、元组、字典、集合操作
返回目录 (1)通用序列操作 “序列”表示索引为非负整数的有序对象集合,列表.元组.字符串都属于序列.区别在于:列表是可变的,而元组和字符串是不可变的.序列的通用操作他们都可以用. 操作或方法 简述 ...
随机推荐
- ReactNative: 使用网页组件WebView组件
一.简介 在移动端开发中,很多时候需要嵌入一个网页来帮助实现某一个活动,这方式大大提高了活动快速迭代的灵活性,在RN中,同样也这么处理这种情况的.其实,这种混合式开发称为Hybird APP,它们就是 ...
- utf8和utf8mb4的区别
一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为ut ...
- html和css的基本功
1.块级元素和行内元素和行内块元素的区别 块级元素:独占一行的,可以设置宽高和内外边距的(<div>/<h1>~<h6>/<p>/<ul>/ ...
- Python活力练习Day3
Day3:请输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个字母. #这是一道典型的题,一次输入一个字母,首字母匹配一个list里的内容.如果匹配到多个,再输入并匹配第二个字 ...
- 8年开发老司机告诉你啥是java开发?如何学?学习什么内容?
什么是Java? 我从Java的官网上抄下来下面这段话:97% 的企业桌面运行 Java美国有 89% 的桌面(或计算机)运行 Java全球有 900 万 Java 开发人员开发人员的头号选择排名第一 ...
- 解决video.js不兼容ie8问题
使用视频播放器的时候,常常会让兼容一些浏览器问题,比如兼容ie8浏览器.在工作中使用的是video.js. 如果需要兼容,引入两个js库,就可以做到兼容ie8浏览器 <script src=&q ...
- WPF炫酷UI及动画
偶然看见了一张图,感觉挺好看的,花了点时间将他转化成了我代码仓库的一部分.虽然不难但也费时间.其中除了背景是百度的一张底图,其他所有内容均通过WPF的Path.Line.TextBlock.Borde ...
- C# -- RSA加密与解密
1. RSA加密与解密 -- 使用公钥加密.私钥解密 public class RSATool { public string Encrypt(string strText, string st ...
- JavaScript高阶函数(Heigher-order function)
概念 <javascript设计模式和开发实践>中定义 函数既可作为参数被传递,也可以作为返回值输出 满足以下条件: 接受一个或多个函数作为输入 输出一个函数 高阶函数一般是那些函数型包含 ...
- node、npm、chrome、v8、sandbox是什么?
这些东西有些比较常用,有些仅知道个名称,但无论是熟悉还是陌生的,要比较精确地解释这些东西,是有一定的难度,可这些东西对前端开发非常重要,还是需要有明确的概念. PS:内容点到即止,不然一个东西一篇文章 ...