常用内置函数,匿名函数,递归函数
一, 匿名函数:没有名字的函数,lambda
-
只能构建简单的函数,一句话函数
def func(x, y): return x + y print(func(1, 2)) func2 = lambda x, y: x + y # lambda 定义一个匿名函数 print(func2(1, 2)) func4 = lambda a, b: a if a > b else b # 匿名函数最常用的就是与内置函数结合使用
二, 内置函数:python中内置的函数,有68种
-
eval():剥去字符串的外衣,返回最终结果,要慎用
s = '5 + 9' print(eval(s)) # 14
-
exec():执行字符串中的代码流,没有返回值
s = ''' for i in [1,2,3]: print(i) ''' exec(s)
-
hash():获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
-
help():查看函数或模块的详细说明
-
callable():用于检查一个对象是否是可以调用的,如果返回True,仍然有可能调用失败,但是返回False,则一定不会成功
name = '马倩' def func(): pass print(callable(name)) # False print(callable(func)) # True
-
int():用于将一个字符串或数字转换为整型
print(int()) # 0 print(int('12')) # 12 print(int(3.6)) # 3
-
float():用于将整数和字符串转换成浮点数
-
complex():用于创建复数,或者将字符串或数转换成复数
-
bin():将十进制转换成二进制
-
oct():将十进制转换成八进制字符串并返回
-
hex():将十进制转换成十六进制字符串并返回
-
divmod():计算除数与被除数的结果,返回一个包含商和余数的元组(a//b,a%b)
print(divmod(10, 3)) # (3, 1) 分页用到
-
round():保留浮点数的小数位数,默认保留整数
print(round(3.1415926, 2)) # 3.14 四舍五入
-
pow():求x**y次幂
# 第三个参数为x**y的结果对z取余 print(pow(2, 3)) # 2**3 8 print(pow(2, 3, 3)) # 8对3取余 2
-
ord():输入字符找该字符编码的位置,unicode
-
chr():输入位置数字找出其对应的字符,unicode,有用
-
repr():返回一个对象的string形式(原形毕露)
print(repr('123')) # '123
-
all():可迭代对象中全是True才是True
-
any():可迭代对象中,有一个True就是True
-
接下来的都很重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
print():屏幕输出
print(1, 2, 3, sep='_') # 1_2_3 sep设定分隔符,默认空格 print(1, 2, end=' ') # end默认是\n
-
list():定义或转换列表
lst = list('asdfg') # 括号内放可迭代对象 # ['a', 's', 'd', 'f', 'g']
-
dic():字典
字典的创建方式
dic = {1: '2'} dic = [i: 1 for i in range(3)] dic = dict(one=1, two=2, three=3) # key不是能是int dic = dict.fromkeys(keys, value) # value都相同
-
abs():获取绝对值
print(abs(-10)) # 10
-
sum():求和
# sum(iterable, 初始值默认为0) print(sum([1, 2, 3, 4])) # 10 print(sum([1, 2, 3, 4], 10)) # 20
-
max():求最大值 用法与min()完全相同
-
min():求最小值
print(min([22, 11, 45, 2])) # 2 # lst = [('maqian', 20), ('xihong', 18), ('xiaomi', 22)] # 找年龄最小的元组 print(min(lst)) # ('maqian', 20),按照可迭代对象的第一个元素的第一个字符排序 # 通过设置key去使用min(),key=函数名,返回值是什么就按照什么进行比较 # min()会自动的将可迭代对象的每一个元素作为实参传给函数,最后将遍历的那个元素返回 print(min(lst, key=lambda x: lst[1])) # 使用匿名函数
-
reversed():将一个可迭代对象翻转,返回翻转的迭代器
s = 'maqian' for i in reversed(s): print(i) # n a i q a m
-
bytes():编码
s = '马倩' print(s.encode('utf-8')) # 第一种方法 print(bytes(s, encoding='utf-8') # 第二种方法
# 编码 b = b'\xe5\xb0\x8f\xe6\x98\x8e' print(b.decode('utf-8')) # 第一种方法 print(str(b, encoding='utf-8')) # 第二种方法
-
zip():拉链方法,用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的内容(迭代器),如果个个可迭代对象的元素个数不一致,则按照长度最短的返回
lst1 = [1,2,3] lst2 = ['a','b','c','d'] lst3 = (11,12,13,14,15 fol el in zip(lst1, lst2, lst3): print(el) # (1, 'a', '11') # (2, 'b', '12') # (3, 'c', '13')
-
sorted():排序
l1 = [7, 4, 1, 6,] print(sorted(l1)) # 形成了新的列表 # 加key lst = [ {'name': 'xiaohong', 'age': 73}, {'name': 'xiaoming', 'age': 35}, {'name': 'xiaoli', 'age': 25}, ] print(sorted(lst, key=lambda x: x['age'])) # 按照年龄排序 print(sorted(lst, key=lambda x: x['age'], reverse=True)) # 第三个参数,逆序
-
filter(): 过滤,相当于生成器表达式的筛选模式,返回一个迭代器
l1 = [56, 67, 12, 34, 78, 90] print([i for i in l1 if i > 60]) # [67, 78, 90] print(list(filter(lambda x: x > 60, l1))) # [67, 78, 90]
-
map():相当于生成器表达式的循环模式
l1 = [56, 67, 12, 34, 78, 90] print([i**2 for i in l1]) print(list(map(lambda x: x**2, l1))
-
reduce():python 3从内置函数剔除了,放到了模块中
from functools import reduce print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])) # 15 ''' 第一次: x,y 1,2 求和 3 记录到内存 第二次: x,y 3,3 求和 6 记录到内齿 第三次: x,y 6,4 求和 10 记录到内齿 第四次: x,y 10,5 求和 15 返回 '''
三, 递归函数
-
函数或其他的代码都可以解决递归解决的问题,但是递归在某些时候能有出奇制胜的效果
-
自己调用自己
def func(n): print('in func') n += 1 print(n) func(n) func(0) # 官网规定:默认递归的最大深度是1000次 # 如果递归超过100次还没有解决这个问题,那么执意使用递归,效率很低. # import sys # sys.setrecursionlimit(10000000) # 设定递归最大次数
# 例一 def age(n): if n == 1: return 18 else: return age(n - 1) + 2 print(age(4)) ''' n = 4 age(3) + 2 n = 3 age(2) + 2 n = 2 age(1) + 2 n = 1 18 ''' # 例二 l1 = [1, 3, 5, ['小马', '小刘', 18, [33, 44, [55, 77]]], [99, 22, 11, 9], 21] def func(lst): for el in lst: if type(el) != list: print(el) else: func(el) func(l1)