Python:匿名函数、三元运算、生成器、内置函数、推导式
2021/10/19 1:09:40
本文主要是介绍Python:匿名函数、三元运算、生成器、内置函数、推导式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 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]
这篇关于Python:匿名函数、三元运算、生成器、内置函数、推导式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享