Day 12 内置函数,匿名函数与递归
内置函数
python中内置函数一共有68中,以下是对其中一些功能的简介。
1.基础数据型函数
bool :用于将给定参数转换为布尔类型,如果没有参数,返回 False。
int:函数用于将一个字符串或数字转换为整型。
float:函数用于将整数和字符串转换成浮点数。
complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
print(int(7/3))--->会自动取整 print(int('01011',base=2)) --->可以指定进制 print(complex(1,2)) --->(1+2j)
bin:将十进制转换成二进制并返回。
oct:将十进制转化成八进制字符串并返回。
hex:将十进制转化成十六进制字符串并返回。
print(bin(17),type(bin(17))) print(oct(17),type(oct(17))) print(hex(17),type(hex(17))) 转出来的都是str
abs:函数返回数字的绝对值。
divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
round:保留浮点数的小数位数,默认保留整数。
pow:求x**y次幂(三个参数为x**y的结果对z取余)。
sum:对可迭代对象进行求和计算(可设置初始值)。
print(round(3.229567,3))#默认四舍五入,0不返回 print(pow(4,3,3))
min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。
max:返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。
l1 = [('alex',1000),('太白',18),('wusir',500)] def ake(x): return x[-1] print(min(l1)) print(min(l1,key=ake))#按每个元组的第二个值来比较
dic = {'a':3,'b':2,'c':1}
print(min(dic))
print(min(dic.items(),key=ake))#按字典的value来比较
过程:
1, 将iterable的每一个元素当做函数的参数传进去
2,会按返回值去比较
3,返回的是遍历的元素x
list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。
tuple:将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)。
str:将数据转化成字符串。
dic = {'a':3,'b':2,'c':1} print(list(dic.values()))#将字典的value转成列表 print(list(dic.items()))#将字典的键值对转成元组,再放到列表
format:与具体数据相关,用于各种计算,详情如下。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐 print(format('test', '<20')) print(format('test', '>20')) print(format('test', '^20')) #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None >>> format(3,'b') #转换成二进制 '11' >>> format(97,'c') #转换unicode成字符 'a' >>> format(11,'d') #转换成10进制 '11' >>> format(11,'o') #转换成8进制 '13' >>> format(11,'x') #转换成16进制 小写字母表示 'b' >>> format(11,'X') #转换成16进制 大写字母表示 'B' >>> format(11,'n') #和d一样 '11' >>> format(11) #默认和d一样 '11' #浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None >>> format(314159267,'e') #科学计数法,默认保留6位小数 '3.141593e+08' >>> format(314159267,'0.2e') #科学计数法,指定保留2位小数 '3.14e+08' >>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示 '3.14E+08' >>> format(314159267,'f') #小数点计数法,默认保留6位小数 '314159267.000000' >>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数 '3.141593' >>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数 '3.14159267' >>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数 '3.1415926700' >>> format(3.14e+1000000,'F') #小数点计数法,无穷大转换成大小字母 'INF' #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数 >>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点 '3e-05' >>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点 '3.1e-05' >>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点 '3.14e-05' >>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写 '3.14E-05' >>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点 '3' >>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点 '3.1' >>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点 '3.14' >>> format(0.00003141566,'.1n') #和g相同 '3e-05' >>> format(0.00003141566,'.3n') #和g相同 '3.14e-05' >>> format(0.00003141566) #和g相同 '3.141566e-05'
bytes:用于不同编码之间的转化。
bytearry:返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。
memoryview:略
ord:输入字符找该字符编码的位置,Unicode的位置
chr:输入位置数字找出其对应的字符,Unicode
ascii:是ascii码中的返回该值,不是就返回\u+该元素的unicode编码。
# ord 输入字符找该字符编码的位置 print(ord('a')) print(ord('中')) # chr 输入位置数字找出其对应的字符 print(chr(97)) print(chr(20013)) # 是ascii码中的返回该值,不是就返回\u4e2d print(ascii('a')) print(ascii('中'))
dict:创建一个字典。
set:创建一个集合。
frozenset:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
len:返回一个对象中元素的个数。
reversed:将一个序列翻转,并返回此翻转序列的迭代器。
ite = reversed(['a',2,3,'c',4,2]) for i in ite: print(i)
slice:构造一个切片对象,用于列表的切片。
制定一个却切片的变量,之后的都可以直接引用这个变量来切片 li = ['a','b','c','d','e','f','g'] sli_obj = slice(3) print(li[sli_obj]) sli_obj = slice(0,7,2) print(li[sli_obj])
sorted:对所有可迭代的对象进行排序操作。
与min和max一样,可接受key,按key来排序 l1 = [('a', 4), ('c', 2), ('d', 1),('b', 3), ] print(sorted(l1, key=lambda x:x[1]))
enumerate:枚举,返回一个枚举对象。
all:可迭代对象中,全都是True才是True。
any:可迭代对象中,有一个True 就是True。
zip:(如同拉链)函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
l1 = [1,2,3,5,6,7] tu1 = ('alex','太白', 'wusir', '女神') dic = {'name': '日天', 'age':28, 'hobby': 'tea', 'weight':100} # print(zip(l1,tu1,dic)) for i in zip(l1,tu1,dic): print(i)
filter:过滤·。
map:会根据提供的函数对指定序列做映射。
# filter返回的是迭代器 l1 = [i for i in range(10)] def func1(x): return x % 2 == 0 print(list(filter(func1,l1)))
l1 = [1,2,3,4]
# print([i**2 for i in l1])
def func(x):
return x**2
print(list(map(func,l1)))
2.迭代器、生成器
range:函数可创建一个整数对象,一般用在 for 循环中。
next:内部实际使用了__next__方法,返回迭代器的下一个项目。
iter:函数用来生成迭代器(讲一个可迭代对象,生成迭代器)。
用while循环模拟for循环 s1 = iter([1, 2, 3, 4, 5]) while True: try: print(next(s1)) except StopIteration: break
3.作用域
globals:函数以字典的类型返回全部全局变量。
locals :函数会以字典的类型返回当前位置的全部局部变量。
a=2 def func1(): b=1 print(locals()) print(globals()) func1()
4.其他
eval:执行字符串类型的代码,并返回最终结果。
exec:执行字符串类型的代码。
compile:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
s = '1+3-9' print(eval(s))#返回结果 s1 = '''for i in range(3): print(i)''' print(exec(s1)) exec(s1)#不返回结果
input:函数接受一个标准输入数据,返回为 string 类型。
print:打印输出。
id:获取对象的内存地址。
hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
print(hash('name')) print(hash('name1')) print(hash('fdsmkfghsdlksld')) print(hash(1)) print(hash(100))#数字哈希仍旧是数字 print(hash([1,2,3]))#不可哈希
open:函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
__import__:函数用于动态加载类和函数 。
help:函数用于查看函数或模块用途的详细说明。
callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
dir:函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
匿名函数
lambda :为了解决那些功能很简单的需求而设计的一句话函数。
三元运算可用于lambda func = lambda x:x if x > 2 else x * 2
# 利用内置函数匿名函数 计算列表的每个数的2倍。
print(list(map(lambda x:x*2,[1,5,7,4,8])))
# 利用内置函数匿名函数将dic按照值进行排序。
print(sorted(dic.items(),key=lambda x:x[1]))
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
例:
一个数的阶乘可以表示为:fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n
def fact(n): if n==1: return 1 return n * fact(n - 1)