Python内置函数
内置函数表
截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。
注意:有些函数与 Python2.x 变化不大,会直接跳转到 Python2.x 教程下的内置函数说明:
作用域相关
基于字典的形式获取局部变量和全局变量
globals()
globals() 函数会以字典类型返回当前位置的全部全局变量
locals()
locals() 函数会以字典类型返回当前位置的全部局部变量
迭代器/生成器相关
next()
next() 返回迭代器的下一个项目。
next() 函数要和生成迭代器的iter() 函数一起使用。
iter()
iter() 函数用来生成迭代器
range()
根据需要生成一个指定范围的数字,可以提供你需要的控制来迭代指定的次数。
字符串类型代码的执行
eval()
将字符串类型的代码执行并返回结果(有返回值 —— 有结果的简单计算)
print(eval('1 +2+3')) # 6
exec()
执行字符串类型的代码,exec函数和eval函数类似,也是执行动态语句,只不过eval函数只用于执行表达式求值,而exec函数主要用于执行语句块。
s1 = ''' for i in range(10): print(i) ''' exec(s1)
compile()
将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
参数说明:
1. 将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。
2. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。
3. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。
4. 参数mode:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,mode应指定为‘exec’;当source中只包含一个简单的求值表达式,mode应指定为‘eval’;当source中包含了交互式命令语句,mode应指定为'single'。
#流程语句使用exec code1 = 'for i in range(10):print(i)' aa = compile(code1,'','exec') #source,filename,mode exec(aa) 结果: 0 1 2 3 4 5 6 7 8 9 #简单求值表达式用eval code2 = "1+2+3+4" bb = compile(code2,'','eval') print(eval(bb)) 结果: 10 #交互语句用single code3 = "name = input('please input your name:')" cc = compile(code3,'','single') exec(cc) #执行时提示输入name
输入输出相关
input()
s = input("请输入内容 : ") #输入的内容赋值给s变量 print(s) #输入什么打印什么。数据类型是str
print()
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符 flush: 立即把内容输出到流文件,不作缓存 """
# 打印进度条 import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少个'*' per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num) print(per_str,end='', flush=True) #小越越 : \r 可以把光标移动到行首但不换行
内存相关
id()
id(o):o是参数,返回一个变量的内存地址。
hash()
hash(o) :o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
t = (1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #会报错 ''' 错误信息: TypeError: unhashable type: 'list' '''
hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。
*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。
数据类型相关
type()
type(o):返回变量o的数据类型。
s1 = 'qeqwe123' l1 = [1, 2, 3] print(type(s1)) # <class 'str'> print(type(l1)) # <class 'list'>
文件操作相关
open()
open() 打开一个文件,返回一个文件操作符(文件句柄)
操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)
可以用encoding指定编码。
模块操作相关
__import__
__import__导入一个模块
# 方式1 import time # 方式2 os = __import__('os') print(os.path.abspath('.'))
帮助方法
help()
用于查看函数或模块用途的详细说明
在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出
或者直接执行help(o),o是参数,查看和变量o有关的操作
和调用相关
callable()
函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
name = 'weqew' def func():pass print(callable(name)) # False print(callable(func)) # True
查看内置属性
dir()
默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量
print(dir(list)) #查看列表的内置方法 print(dir(int)) #查看整数的内置方法
和数字相关
数据类型
int()
函数用于将一个字符串或数字转换为整型。
print(int()) # 0 print(int('12')) # 12 print(int(3.6)) # 3 print(int('0100',base=2)) # 将2进制的 0100 转化成十进制。结果为 4
float()
函数用于将整数和字符串转换成浮点数。
print(float(10)) # 10.0 print(float('10')) # 10.0
complex()
函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
print(float(3)) # 3.0 print(complex(1,2)) # (1+2j)
bool()
布尔函数,返回bool值,False或True
print(bool(3)) # True print(bool(0)) # False print(bool(None)) # False
进制转换
bin()
将十进制转换成二进制并返回。
print(bin(3)) # 0b11
oct()
将十进制转化成八进制字符串并返回。
print(oct(3)) # 0o3
hex()
将十进制转化成十六进制字符串并返回。
print(hex(3)) # 0x3
数学运算
abs()
# 获取绝对值 print(abs(-10)) # 10
divmod()
计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
print(divmod(100, 33)) # (3, 1)
round()
保留浮点数的小数位数,默认保留整数。
# 默认保留整数 print(round(3.141592654)) # 3 # 保留3位小数,四舍五入值,准确的说保留值将保留到离上一位更近的一端(四舍六入)。 print(round(3.141592654, 3)) # 3.142
pow()
求x**y次幂。(三个参数为x**y的结果对z取余)
# 两个参数为2**3次幂 print(pow(2, 3)) # 8 # 三个参数为2**3次幂,对3取余。 print(pow(2, 3, 3)) # 2
sum()
# 求和 print(sum([1,2,3])) # 6 print(sum([1,2,3], 100)) # 106,相当(1+2+3)+100
min()
# =================求最小值================= print(min([1, 2, 3])) # 返回此序列最小值 ret = min([1, 2, -5, ], key=abs) # 按照绝对值的大小,返回此序列最小值 print(ret) # 加key是可以加函数名,min自动会获取传入函数中的参数的每个元素,然后通过你设定的返回值比较大小,返回最小的传入的那个参数。 print(min(1, 2, -5, 6, -3, key=lambda x: abs(x))) # 可以设置很多参数比较大小 dic = {'a': 3, 'b': 2, 'c': 1} print(min(dic, key=lambda x: dic[x])) # x为dic的key,lambda的返回值(即dic的值进行比较)返回最小的值对应的键
max() 最大值与最小值用法相同。
和数据结构相关
序列
列表和元组相关的:list和tuple
字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
bytearray()
ret = bytearray('alex',encoding='utf-8') print(id(ret)) print(ret[0]) ret[0] = 65 print(ret) print(id(ret))
memoryview()
ret = memoryview(bytes('你好',encoding='utf-8')) print(len(ret)) print(bytes(ret[:3]).decode('utf-8')) print(bytes(ret[3:]).decode('utf-8'))
reversed() 将一个序列翻转, 返回翻转序列的迭代器 reversed 示例:
l = reversed('你好') # l 获取到的是一个生成器 print(list(l)) ret = reversed([1, 4, 3, 7, 9]) print(list(ret)) # [9, 7, 3, 4, 1]
slice() 切片
l = (1, 2, 23, 213, 5612, 342, 43) print(l[1:5:2]) # (2, 213) sli = slice(1, 5, 2) print(l[sli]) # (2, 213)
数据集合
字典和集合
dict() 通过相应的方式创建字典。
repr()将任意值转换为字符串,供计时器读取的形式
返回一个对象的字符串表示。有时可以使用这个函数来访问操作。
对于许多类型来说,repr()尝试返回一个字符串,eval()方法可以使用该字符串产生对象;
否则用尖括号括起来的,包含类名称和其他二外信息的字符串被返回。
set() 集合
frozenset() 不可变集合
len()
返回对象长度,参数可以是序列类型(字符串,元组或列表)或映射类型(如字典)
print(len('aaasd')) # 3
sorted()
排序函数
语法:sorted(iterable,key=None,reverse=False) iterable : 可迭代对象 key: 排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数.根据函数运算的结果进行排序 reverse :是否是倒叙,True 倒叙 False 正序 lst = [1,3,2,5,4] lst2 = sorted(lst) print(lst) #原列表不会改变 print(lst2) #返回的新列表是经过排序的 lst3 = sorted(lst,reverse=True) print(lst3) #倒叙 结果: [1, 3, 2, 5, 4] [1, 2, 3, 4, 5] [5, 4, 3, 2, 1] 字典使用sorted排序 dic = {1:'a',3:'c',2:'b'} print(sorted(dic)) # 字典排序返回的就是排序后的key 结果: [1,2,3] 和函数组合使用 # 定义一个列表,然后根据一元素的长度排序 lst = ['天龙八部','西游记','红楼梦','三国演义'] # 计算字符串的长度 def func(s): return len(s) print(sorted(lst,key=func)) # 结果: # ['西游记', '红楼梦', '天龙八部', '三国演义'] 和lambda组合使用 lst = ['天龙八部','西游记','红楼梦','三国演义'] print(sorted(lst,key=lambda s:len(s))) 结果: ['西游记', '红楼梦', '天龙八部', '三国演义'] lst = [{'id':1,'name':'alex','age':18}, {'id':2,'name':'wusir','age':17}, {'id':3,'name':'taibai','age':16},] # 按照年龄对学生信息进行排序 print(sorted(lst,key=lambda e:e['age'])) 结果: [{'id': 3, 'name': 'taibai', 'age': 16}, {'id': 2, 'name': 'wusir', 'age': 17}, {'id': 1, 'name': 'alex', 'age': 18}]
enumerate()
返回一个可以枚举的对象,该对象的next()方法将返回一个元组。
for i in enumerate(['a','b','c','d']): print(i) ''' (0, 'a') (1, 'b') (2, 'c') (3, 'd') '''
all()
参数为可迭代对象,迭代对象为空时,返回True.如果迭代对象的所有元素都为真,那么返回True,否则返回False
print(all([1,2,True,0])) # False
any()
参数为可迭代对象,参数有一个True 就是True
print(any([1,'',0])) # True
zip()
拉链方法。函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,
然后返回由这些元祖组成的内容,如果各个迭代器的元素个数不一致,则按照长度最短的返回,
lst1 = [1,2,3] lst2 = ['a','b','c','d'] lst3 = (11,12,13,14,15) for i in zip(lst1,lst2,lst3): print(i) ''' 结果: (1, 'a', 11) (2, 'b', 12) (3, 'c', 13) '''
filter()
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x): return x % 2 == 1
然后,利用filter()过滤掉偶数:
print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))) # [1, 7, 9, 17]
filter配合匿名函数使用
例如,删除 None 或者空字符串:
print(list(filter(lambda s:s and len(s.strip()) > 0,['test', None, '', 'str', ' ', 'END']))) # ['test', 'str', 'END']
map()
映射函数,map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
# 计算列表中每个元素的平方,返回新列表 lst = [1, 2, 3, 4, 5] def func(s): return s * s print(map(func, lst)) # <map object at 0x000001C53FA4EB70> print(list(map(func, lst))) # [1, 4, 9, 16, 25] # 改写成lambda print(list(map(lambda s: s * s, lst)))
reduce()
from functools import reduce def func(x,y): return x + y # reduce 的使用方式: # reduce(函数名,可迭代对象) # 这两个参数必须都要有,缺一个不行 ret = reduce(func,[3,4,5,6,7]) print(ret) # 结果 25
reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着, 接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始 临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推。
注意:我们放进去的可迭代对象没有更改 以上这个例子我们使用sum就可以完全的实现了.我现在有[1,2,3,4]想让列表中的数变成1234,就要用到reduce了.
# 普通函数版 from functools import reduce def func(x,y): return x * 10 + y # 第一次的时候 x是1 y是2 x乘以10就是10,然后加上y也就是2最终结果是12然后临时存储起来了 # 第二次的时候x是临时存储的值12 x乘以10就是 120 然后加上y也就是3最终结果是123临时存储起来了 # 第三次的时候x是临时存储的值123 x乘以10就是 1230 然后加上y也就是4最终结果是1234然后返回了 l = reduce(func,[1,2,3,4]) print(l) # 匿名函数版 l = reduce(lambda x,y:x*10+y,[1,2,3,4]) print(l)
在Python2.x版本中recude是直接 import就可以的, Python3.x版本中需要从functools这个包中导入
龟叔本打算将 lambda 和 reduce 都从全局名字空间都移除, 舆论说龟叔不喜欢lambda 和 reduce
最后lambda没删除是因为和一个人写信写了好多封,进行交流然后把lambda保住了.