常见内置函数
1.map() 映射
l = [1,2,3,4] map(lambda x:x+1,l) # 循环获取列表中每个元素并传递给匿名函数保存返回值
2.zip() 拉链
l = [11, 22, 33, 44, 55, 66, 77] name_list = ['jason', 'kevin', 'tony', 'jerry'] l1 = [1, 2, 3, 4, 5, 6, 7] l2 = [8, 7, 6, 4, 3, 2, 1] new_list = [] for i in range(len(l)): new_list.append((l[i],name_list[i])) print(new_list) res = zip(l, name_list, l1, l2) print(list(res))
3.max()与min() 求最大值 ,求最小值
l = [11, 22, 33, 44, 55, 66, 77] print(max(l)) print(min(l)) d = { 'jason':3000, 'Bevin':1000000, 'Ascar':10000000000, 'aerry':88888 } def index(key): return d[key] print(max(d,key=lambda key:d[key])) # for循环先取值 之后再比较大小 """ A-Z 65-90 a-z 97-122 """ print(min(d,key=lambda key:d[key])) # jason
4.filter() 过滤
l = [11, 22, 33, 44, 55] res = filter(lambda x: x > 30, l) print(list(res)) # [33, 44, 55]
5.reduce() 归总
from functools import reduce d = [11, 22, 33, 44, 55, 66, 77, 88, 99] res = reduce(lambda x, y: x + y, d) res1 = reduce(lambda x, y: x + y, d, 100) # 还可以额外添加元素值 print(res)
6.abs() 绝对值
print(abs(123)) # 123 print(abs(-123)) # 123
7.all() any()
l = [11,22,33,0] print(all(l)) # 所有的元素都为True结果才是True print(any(l)) # 所有的元素只要有一个为True结果就为True
8.bin() oct() hex() 进制数
print(bin(123)) print(oct(123)) print(hex(123))
9.bytes() str() 转化二进制,字符串
res = '金牌班 最牛逼' res1 = bytes(res,'utf8') print(res1) res2 = str(res1,'utf8') print(res2) res1 = res.encode('utf8') print(res1) res2 = res1.decode('utf8') print(res2)
10.callable() 是否可调用(能不能加括号运行)
s1 = 'jason' def index(): pass print(callable(s1),callable(index)) # False True
11.chr() ord() 根据ASCII码转数字找字符
print(chr(65)) # 根据ASCII码转数字找字符 print(ord('A')) # 65
12.complex() 复数
print(complex(123)) # (123+0j)
13.dir() 查看当前对象可以调用的名字
def index(): pass print(dir(index)) print(index.__name__)
14.divmod() 取余
print(divmod(101,10)) """总数据100 每页10条 10页""" """总数据99 每页10条 10页""" """总数据101 每页10条 11页""" num,more = divmod(233,10) if more: num += 1 print('总共需要%s页'%num)
15.eval()只能识别简单的语法 exec()可以识别复杂语法 都是将字符串中的数据内容加载并执行
res = """ 你好啊 for i in range(10): print(i) """ res = """ print('hello world') """ eval(res) exec(res)
16.isinstance() 判断是否属于某个数据类型
print(isinstance(123,float)) # False print(isinstance(123,int)) # True
17.pow() 幂
print(pow(4,3))
18.round() 四舍五入
print(round(4.8)) # 5 print(round(4.6)) # 5 print(round(8.5)) # 8 # 五舍六入
19.sum() 求和
l = [11,22,333,44,55,66] print(sum(l))
闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字
# 只有符合上述两个特征的函数才可以称之为"闭包函数"
def outer(): x = 222 def index(): print('from index', x) return index # 闭包函数其实是给函数传参的第二种方式 # 方式1:函数体代码需要用到数据 直接在括号内定义形参即可 def index(username): print(username) def my_max(a, b): if a > b: return a return b # 方式2:利用闭包函数 def outer(x,y): # x = 2 # y = 40 def my_max(): if x > y: return x return y return my_max res = outer(2,40) print(res()) print(res()) import requests url = 'https://www.baidu.com' def outer(url): def get_content(): # 爬取百度首页数据 res = requests.get(url) if res.status_code == 200: with open(r'xxx.html','wb') as f: print('*'.center(30)) f.write(res.content) return get_content res = outer('https://www.baidu.com') res() res() res() res1 = outer('https://www.jd.com') res1() res1() res1() res1()
递归:函数在运行过程中 直接或者间接的调用了自身
官网表示:python默认的最大递归深度为1000次
import sys
print(sys.getrecursionlimit())
print(sys.setrecursionlimit(2000))
count = 1 def index(): global count count += 1 print(count) print('from index') index() index() def func(): print('from func') index() def index(): print('from index') func() index()
递归
1.递推
一层层往下推导答案(每次递归之后复制度相较于上一次一定要有所下降)
2.回溯
依据最后的结论往后推导出最初需要的答案
递归一定要有结束条件!!!
# 伪代码:可能无法运行 但是可以表述逻辑 # age(5) = age(4) + 2 # age(4) = age(3) + 2 # age(3) = age(2) + 2 # age(2) = age(1) + 2 # age(1) = 18 def get_age(n): if n == 1: return 18 return get_age(n - 1) + 2 print(get_age(5))
小练习
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
# 打印出列表中每一个元素(列表除外)
1.循环该列表 获取列表内每一个元素
2.判断该元素是否是数字 如果是数字 则直接打印
3.如果是列表 则循环该列表 获取列表内每一个元素
4.判断该元素是否是数字 如果是数字 则直接打印
5.如果是列表 则循环该列表 获取列表内每一个元素
6.判断该元素是否是数字 如果是数字 则直接打印
7.如果是列表 则循环该列表 获取列表内每一个元素
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] # 方式一 def get_num(l): for i in l: if type(i) is int: print(i) else: # 也是for循环 然后判断 get_num(i) get_num(l) # 方式二 def num(l): print(l[0]) # print(l) if len(l) < 2: return else: l2 = l[1] num(l2) num(l) for i in []: print(i,'懵逼了!')
没有名字的函数
语法格式
lambda 形参:返回值
print(lambda x:x**2) def index(): pass print(index) print((lambda x: x ** 2)(2)) res = lambda x: x ** 2 print(res(2)) '''匿名函数一般不会单独使用 都是配合其他函数一起使用''' # map() 映射 l = [1, 2, 3, 4, 5, 6, 7, 8, 9] def index(n): return n ** 2 print(list(map(lambda x:x**2, l)))