Python Day 14 函数(内置函数,匿名函数(lambda表达式))
内置函数
截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。
内置函数 | ||||
abs() | dict() | help() | min() | setattr() |
all() | dir() | hex() | next() | slice() |
any() | divmod() | id() | object() | sorted() |
ascii() | enumerate() | input() | oct() | staticmethod() |
bin() | eval() | int() | open() | str() |
bool() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() | |
delattr() | hash() | memoryview() | set() |
1.1 作用域相关
** locals():函数会以字典的类型返回当前位置的全部局部变量。
** globals():函数以字典的类型返回全部全局变量。
1.2 其他相关
1.2.1 执行相关
*** eval() 去除字符串的引号,返回对应内部的值。
s = '{"a":1,"b":3}' dic = eval(s) print(dic,type(dic)) print(eval('2 + 2')) print(eval('print(666)')) ============== {'a': 1, 'b': 3} <class 'dict'> 4 666 None
*** exec() 执行字符串内部的代码。
print(exec('1 + 1')) ============== None #exec 没有返回值,主要用于直接打印结果,或交互型。 ret = ''' name = input('请输入名字:').strip() if name == 'alex': print(666) ''' exec(ret)
compile() 将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
''' 参数说明: 1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。 2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。 3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。 ''' >>> #流程语句使用exec >>> code1 = 'for i in range(0,10): print (i)' >>> compile1 = compile(code1,'','exec') >>> exec (compile1) >>> #简单求值表达式用eval >>> code2 = '1 + 2 + 3 + 4' >>> compile2 = compile(code2,'','eval') >>> eval(compile2) >>> #交互语句用single >>> code3 = 'name = input("please input your name:")' >>> compile3 = compile(code3,'','single') >>> name #执行前name变量不存在 Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> name NameError: name 'name' is not defined >>> exec(compile3) #执行时显示交互命令,提示输入 please input your name:'pythoner' >>> name #执行后name变量有值 "'pythoner'"
1.2.2 输入输出相关
input() 交互输入信息,数据类型为字符串。
print() 打印信息。
1.2.3 内存相关
* hash() 将不可变的数据通过hash算法转化成hash值,数字类型hash值是数字本身,其他类型hash值不固定。
print(hash('name')) print(hash('age')) print(hash((1, 2, 3,)))
id()
1.2.4 文件操作相关
***(open() 函数用于打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
1.2.5 模块相关
__import__: 函数用于动态加载类和函数
1.2.6 帮助
* help() 函数用于查看函数或模块用途的详细说明。
1.2.7 调用相关
*** callable() 函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
def func1(): print(666) age = 16 print(callable('name')) #字符串不是可调用的对象 print(callable(age)) #变量名不是可调用的对象 print(callable(func1)) #True
1.2.8 查看内置属性
** dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
print(dir(str))
1.3 迭代器生成器相关
*** range()
print(len(range(100)))
*** iter()
l = [1, 2, 3, 4, 5] l_obj = l.__iter__() l_obj = iter(l) 效果一致 iter()调用__iter__()
*** next()
print(l_obj.__next__()) print(next(l_obj))
1.4 数字相关
1.4.1 数据类型
bool() 用于将给定参数转换为布尔类型,如果没有参数,返回 False。
int() 函数用于将一个字符串或数字转换为整型,不能将内部为浮点数的字符串转换为整数。
float():函数用于将整数和字符串转换成浮点数。
complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数,如果第一个参数为字符串,则不需要指定第二个参数。
1.4.2 进制转换
bin:将十进制转换成二进制并返回。
print(bin(100)) 0b1100100
oct:将十进制转化成八进制字符串并返回。
print(oct(10)) 0o12
hex:将十进制转化成十六进制字符串并返回。
print(hex(13)) 0xd
1.4.3 数学运算
*** abs() 函数返回数字的绝对值。
print(abs(-5)) 5
*** divmod() 计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
print(divmod(7, 3)) (2, 1)
** round() 保留浮点数的小数位数,默认保留整数。
print(round(1.234,2)) 1.23
*pow():求x**y次幂。(三个参数为x**y的结果对z取余)
print(pow(2, 3)) # 2的三次幂 8 print(pow(2, 3, 3)) # 2的三次幂对3取余数 2
***sum():对可迭代对象进行求和计算(可设置初始值)。
print(sum([1, 2, 3, 4])) #10 print(sum([1, 2, 3, 4], 100)) #110
*** min():返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。
print(min([1, 3, 5, 7, -4])) # -4 print(min([1, 3, 5, 7, -4], key=abs)) # 1
*** max(): 返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。
print(max([1, 3, 5, 7, -4])) #7 print(max([1, 3, 5, 7, -9], key=abs)) #-9
1.5 数据结构相关
1.5.1 列表和元组
list():将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。
l1 = list({'name':'alex','age':1000}) #只取键 print(l1) ['name', 'age']
tuple():将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)。
1.5.2 相关内置函数
*** reversed():将一个序列翻转,并返回此翻转序列的迭代器。
l1 = [11, 22, 33, 44, 77, 66] l_obj = reversed(l1) for i in l_obj: print(i) 66 77 44 33 22 11
slice():构造一个切片对象,用于列表的切片。
l1 = [11, 22, 33, 44, 77, 66] l2 = [111, 222, 333, 444, 777, 666] print(l1[1::2]) rule = slice(1, len(l2), 2) #重复切片动作,使用同一规则时使用slice print(l2[rule])
1.6 字符串相关
str():将数据转化成字符串。
format:与具体数据相关,用于计算各种小数,精算等。
print(format('test', '<20')) # 左对齐 print(format('test', '>20')) # 右对齐 print(format('test', '^20')) # 居中 test test test
*** bytes:str---> bytes 与 str.encode 相同
s1 = 'alex' b1 = s1.encode('utf-8') b2 = bytes(s1,encoding='utf-8') print(b1) print(b2) b'alex' b'alex'
bytearray()
ret = bytearray('alex', encoding='utf-8') # 类比:[97,103,....] print(id(ret)) print(ret) # bytearray(b'alex') print(ret[0]) ret[0] = 65 print(ret) print(id(ret))
memoryview() 分字节去转换成str
b1 = bytes('你好',encoding='utf-8') print(b1) #b'xe4xbdxa0xe5xa5xbd' ret = memoryview(b1) print(len(ret)) #6 print(ret) # <memory at 0x000002AE9240F048> print(bytes(ret[:3]).decode('utf-8')) #你 print(bytes(ret[3:]).decode('utf-8')) #好
ord():输入字符找该字符编码的位置
print(ord('a')) #97 print(ord('中')) # unicode 20013
chr():输入位置数字找出期对应的字符 常用范围(大写字母:65-90 A-Z) (小写字母:96-122) (数字:48-57)
33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~
print(chr(65)) #A print(chr(20013)) # unicode 中
ascii:是ascii码中的返回该值,不是就返回/u...+16进制
print(ascii('a')) #'a' print(ascii(1)) # 1 print(ascii('中')) # 'u4e2d'
*** repr:返回一个对象的string形式(原形毕露)。
msg = '小数%f' %(1.234) print(msg) msg = '姓名:%r' % ( 'alex') print(msg) print(repr('{"name":"alex"}')) print('{"name":"alex"}') 小数1.234000 姓名:'alex' '{"name":"alex"}' {"name":"alex"}
1.7 数据集合(3)
dict() 创建一个字典
dic = dict({'name': 'alex'}) print(dic) {'name': 'alex'}
set() 创建一个集合
set1 = set(('alex','wusir')) print(set1)
frozenset():返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
1.8 相关内置函数
*** len() 返回一个对象中元素的个数
sorted():对所有可迭代的对象进行排序操作。
print(sorted([1, 2, 3, 4, 5, -6])) print(sorted([1, 2, 3, 4, 5, -6], key=abs)) [-6, 1, 2, 3, 4, 5] [1, 2, 3, 4, 5, -6] L = [('a', 1), ('c', 2), ('d', 4), ('b', 3), ] print(sorted(L)) def func1(x): return x[1] L = [('a', 1), ('c', 2), ('d', 4),('b', 3), ] print(sorted(L, key=func1))
*all:可迭代对象中,全都是True才是True
print(all([1, 'alex', True, (1,2,3)])) # True print(all([0, 'alex', True, (1,2,3)])) #False
*any:可迭代对象中,有一个True 就是True
print(any([0, '', False, (1,2,3)])) # True print(any([0, '', False, ()])) #False
***zip 拉链方法 返回的是一个迭代器
l1 = [1, 2, 3, 4] tu1 = ('老男孩', 'alex', 'wusir') l2 = ['*', '**', '***', "****"] obj = zip(l1,tu1,l2) for i in obj: print(i) (1, '老男孩', '*') (2, 'alex', '**') (3, 'wusir', '***')
***map: 循环模式
def func2(x): return x**2 obj = map(func2, [1, 2, 3, 4]) for i in obj: print(i) print((i**2 for i in [1, 2, 3, 4])) def func2(x, y): return x + y obj1 = map(func2, [1, 2, 3, 4, 6], (2, 3, 4, 5)) for i in obj1: print(i)
***filter 筛选模式
def func(x): return x % 2 == 0 ret = filter(func,[1, 2, 3, 4, 5, 6, 7]) print(ret) #<filter object at 0x0000021C5FB53E80> for i in ret: print(i) 2 4 6 print((i for i in [1, 2, 3, 4, 5, 6, 7] if i % 2 == 0)) #<generator object <genexpr> at 0x0000021C5FA90F68>
***lambda 匿名函数 一句话函数
ret = lambda x, y: x+y 函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任意数据类型