# 1、匿名函数:基于lambda表达式实现定义没有名字的函数,冒号后面为返回值
data_list = [lambda x: x + 100, lambda x: x + 110, lambda x: x + 120]
print(data_list[0])
print(data_list[0](20))
# 2、匿名函数可以支持任意参数,但只能支持单行代码
# lambda x: x+100
# lambda x1,x2:x1+x2
# lambda *args,**kwargs:args,kwargs
fuc = lambda *args, **kwargs: [args, kwargs]
f = fuc(*[1, 2, 3], **{'n2': 5, 'm2': 6})
print(f)
# 3、三元运算:可以用一行实现简单的条件语句
content = input('请输入:')
i = 'yes' if 'good' in content else 'no'
print(i)
# 4、匿名函数和三元运算结合
f = lambda x: 'yes' if x > 0 else 'no'
print(f(3))
# 5、生成器:函数+yield关键字创建的,可以节省内存
# 注意:执行生成器函数时,函数内部代码不会执行,返回生成器对象
def fuc():
print(1)
yield 2 # 返回值,并终止函数运行
print(3)
yield 4 # 函数再次执行时,会从上次运行完的开始执行,并返回值
print(5)
yield 6 # 函数再次执行从print(4)开始执行,并返回yield值
for i in fuc():
print(i) # 输出1 2 3 4 5 6
j0 = fuc()
print(j0) # 输出<generator object fuc at 0x0000026075E99C10>
f1 = next(j0) # 使用next,进入生成器函数并执行其中代码,输出1
print(f1) # 输出2
f2 = next(j0) # 输出3
print(f2) # 输出4
f3 = next(j0) # 输出5
print(f3) # 输出6
# 6、生成器应用场景
# 要求:生成300万个随机4位数
传统做法:由于每次调用会一次性取300万个数据,会消耗大量内存
import random
digital_list = []
for i in range(3000):
dig = random.randint(1000, 9999)
digital_list.append(dig)
print(digital_list)
# 生成器做法:每次调用获取一个数字,可获取300万次随机数字
import random
def num(max_num):
number = 0
while number < max_num:
yield random.randint(1000, 9999)
number += 1
num_list = num(3000)
# 6、生成器扩展知识send
def fuc():
print(1)
v1 = yield 2 # 返回值,并终止函数运行
print(v1)
print(3)
v2 = yield 4 # 函数再次执行时,会从上次运行完的开始执行,并返回值
print(v2)
print(5)
v3 = yield 6 # 函数再次执行从print(4)开始执行,并返回yield值
print(v3)
data = fuc() # 打印1
n1 = data.send(None) # 第一次必须是None
print(n1) # 返回2
n2 = data.send(777) # 把777赋值给v1,print(v1)得到777
print(n2) # 继续往下运行,打印3,返回4
n3 = data.send(888) # 把888赋值给v2,print(v2)得到888
print(n3) # 继续往下运行,打印5,返回6
# 7、内置函数
# abs 绝对值
v1 = abs(-10)
print(v1) # 10
# pow 指数
print(pow(2, 5)) # 2的5次方,32
# sum 求和
v2 = sum([1, 2, 3, 4, 5, 6])
print(v2) # 1+2+3+4+5+6,21
# divmod 求商和余数
v3, v4 = divmod(11, 3)
print(v3, v4) # 3 2
# round 小数点后n位
v5 = round(3.1415926, 3)
print(v5) # 3.1415926的3位数字,3.142
# max 最大值
v6 = max(1, 3, 4, 6, 4)
print(v6) # 6
v7 = max([9, 433, 2222, 43, 5])
print(v7) # 2222
v8 = max([-11, 3, 4, 9], key=lambda x: abs(x))
print(v8) # -11
# min 最小值
v9 = min(1, 3, 4, 6, 4)
print(v9) # 1
v10 = min([9, 433, 2222, 43, 5])
print(v10) # 5
v11 = min([-11, 3, 4, 9], key=lambda x: x * 10)
print(v11) # -11
# all 是否全部为True
v12 = all([1, 3, ''])
print(v12) # False
# any 是否存在True
v13 = any([1, '', False])
print(v13) # True
# ord 获得字符对应得Unicode码点(十进制)
v14 = ord('尹')
print(v14) # 23609
# chr 根据码点(十进制)获取对应字符
v15 = chr(32102)
print(v15) # 给
# int转换成整形、float转换成浮点数、str转换成字符串、bytes、bool布尔值、list转换成列表、dict转换成字典、tuple转换成元组、
# set、len、print、open、type、range、enumerate、id、hash、help、zip
v16 = (1, 2, 3, 4)
print(list(v16)) # 列表转换[1, 2, 3, 4]
v17 = '尹'
v18 = bytes(v17, encoding='utf-8')
print(v18) # b'\xe5\xb0\xb9'
v19 = [1, 2, 3, 4]
v20 = [9, 2, 4, 5, 6]
v21 = [2, 44, 2]
v22 = zip(v19, v20, v21)
print(v22) # <zip object at 0x0000025E6916F900>
for item in v22:
print(item) # (1, 9, 2) (2, 2, 44) (3, 4, 2) 把每个列表的同一个位置数据抽取出来
# callable 判断是否可被执行
v23 = 'xueyou'
v24 = lambda x: x + 1
print(callable(v23)) # False
print(callable(v24)) # True
# sorted 排序
v25 = [1, 3, 4, 5, 2, 3, 1]
print(sorted(v25)) # 正序[1, 1, 2, 3, 3, 4, 5]
v26 = sorted(v25, reverse=True)
print(v26) # 倒叙[5, 4, 3, 3, 2, 1, 1]
v27 = {
'张': {'id': 12, 'age': 34},
'刘': {'id': 11, 'age': 44},
'郭': {'id': 9, 'age': 12},
'黎': {'id': 23, 'age': 6},
}
v28 = sorted(v27.items(), key=lambda x: x[1]['id'], reverse=True) # 字典按照id值排序
print(
v28) # [('黎', {'id': 23, 'age': 6}), ('张', {'id': 12, 'age': 34}), ('刘', {'id': 11, 'age': 44}), ('郭', {'id': 9, 'age': 12})]
data_list = [
'1-5 编译器和解释器.mp4',
'1-17 今日作业.mp4',
'1-9 Python解释器种类.mp4',
'1-16 今日总结.mp4',
'1-2 课堂笔记的创建.mp4',
'1-15 Pycharm使用和破解(win系统).mp4',
'1-12 python解释器的安装(mac系统).mp4',
'1-13 python解释器的安装(win系统).mp4',
'1-8 Python介绍.mp4', '1-7 编程语言的分类.mp4',
'1-3 常见计算机基本概念.mp4',
'1-14 Pycharm使用和破解(mac系统).mp4',
'1-10 CPython解释器版本.mp4',
'1-1 今日概要.mp4',
'1-6 学习编程本质上的三件事.mp4',
'1-18 作业答案和讲解.mp4',
'1-4 编程语言.mp4',
'1-11 环境搭建说明.mp4'
]
v29 = sorted(data_list, key=lambda x: int(x.split(' ')[0].split('-')[1]))
print(v29) # 按照编号排序
# 输出['1-1 今日概要.mp4',
# '1-2 课堂笔记的创建.mp4',
# '1-3 常见计算机基本概念.mp4',
# '1-4 编程语言.mp4',
# '1-5 编译器和解释器.mp4',
# '1-6 学习编程本质上的三件事.mp4',
# '1-7 编程语言的分类.mp4',
# '1-8 Python介绍.mp4',
# '1-9 Python解释器种类.mp4',
# '1-10 CPython解释器版本.mp4',
# '1-11 环境搭建说明.mp4',
# '1-12 python解释器的安装(mac系统).mp4',
# '1-13 python解释器的安装(win系统).mp4',
# '1-14 Pycharm使用和破解(mac系统).mp4',
# '1-15 Pycharm使用和破解(win系统).mp4',
# '1-16 今日总结.mp4',
# '1-17 今日作业.mp4',
# '1-18 作业答案和讲解.mp4']
# 8、推导式
v30 = [i for i in range(10)]
print(v30) # 列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
v31 = [[i, i] for i in range(10)]
print(v31) # [[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9]]
v32 = [[i, i + 2] for i in range(20) if i > 10]
print(v32) # [[11, 13], [12, 14], [13, 15], [14, 16], [15, 17], [16, 18], [17, 19], [18, 20], [19, 21]]
v33 = {i for i in range(10)}
print(v33) # 集合{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
v34 = {i: i % 3 for i in range(10)}
print(v34) # 字典{0: 0, 1: 1, 2: 2, 3: 0, 4: 1, 5: 2, 6: 0, 7: 1, 8: 2, 9: 0}
v35 = (i for i in range(5))
print(v35) # 元组:不会立即执行内部循环,而是得到一个生成器:<generator object <genexpr> at 0x0000025766F39F20>
for item in v35:
print(item) # 0 1 2 3 4
data_list = [
'1-5 编译器和解释器.mp4',
'1-17 今日作业.mp4',
'1-9 Python解释器种类.mp4',
'1-16 今日总结.mp4',
'1-2 课堂笔记的创建.mp4',
'1-15 Pycharm使用和破解(win系统).mp4',
'1-12 python解释器的安装(mac系统).mp4',
'1-13 python解释器的安装(win系统).mp4',
'1-8 Python介绍.mp4', '1-7 编程语言的分类.mp4',
'1-3 常见计算机基本概念.mp4',
'1-14 Pycharm使用和破解(mac系统).mp4',
'1-10 CPython解释器版本.mp4',
'1-1 今日概要.mp4',
'1-6 学习编程本质上的三件事.mp4',
'1-18 作业答案和讲解.mp4',
'1-4 编程语言.mp4',
'1-11 环境搭建说明.mp4'
]
v36 = [i.split('.')[0] for i in data_list]
print(v36) # 去掉.mp4
v37 = {'name': 'Roman', 'age': '33', 'job': 'realestate'}
v38 = '///'.join([f'{k}-{v}' for k, v in v37.items()])
print(v38) # name-Roman///age-33///job-realestate
info = {
'sign_type': "MD5",
'out_refund_no': "12323",
'appid': 'wx55cca0b94f723dc7',
'mch_id': '1526049051',
'out_trade_no': "ffff",
'nonce_str': "sdfdffd",
'total_fee': 9901,
'refund_fee': 10000
} # 将字典按照键从小到大排序,然后在按照如下格式拼接起来。(微信支付API内部处理需求)
v39 = sorted(info.items(), key=lambda x: x[0])
print(v39) # [('appid', 'wx55cca0b94f723dc7'), ('mch_id', '1526049051'), ('nonce_str', 'sdfdffd'),
# ('out_refund_no', '12323'), ('out_trade_no', 'ffff'),
# ('refund_fee', 10000), ('sign_type', 'MD5'), ('total_fee', 9901)]
v40 = '——'.join([f'{i[0]}_{i[1]}' for i in v39])
print(v40) # appid_wx55cca0b94f723dc7——mch_id_1526049051——nonce_str_sdfdffd——out_refund_no_12323——out_trade_no_ffff——refund_fee_10000——sign_type_MD5——total_fee_9901
v41 = [lambda x: x + i for i in range(9)] # v41已经运行完,i=8,列表里全都是函数
v42 = v41[0](10) # 第0个函数传递参数10,得出10+8=18
v43 = v41[5](10) # 第5个函数传递参数10,得出10+8=18
print(v42, v43) # 18 18
v44 = [[i, j] for i in range(3) for j in range(2)] # 支持嵌套
print(v44) # [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
def num1():
return [lambda x: x + i for i in range(3)] # 生成函数,并且函数已经执行,循环已经结束,i=2
print(
num1()) # [<function num1.<locals>.<listcomp>.<lambda> at 0x000001A6AA9729D0>, <function num1.<locals>.<listcomp>.<lambda> at 0x000001A6AA972A60>, <function num1.<locals>.<listcomp>.<lambda> at 0x000001A6AA972AF0>]
result1 = [m(3) for m in num1()]
print(result1) # [5,5,5]
def num2():
return (lambda x: x + i for i in range(3)) # 生成生成器,函数未执行,未开始循环
print(num2()) # <generator object num2.<locals>.<genexpr> at 0x000001A6AA939C80>
result2 = [m(3) for m in num2()]
print(result2) # [3, 4, 5]