ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:匿名函数、三元运算、生成器、内置函数、推导式

2021-10-18 23:03:41  阅读:139  来源: 互联网

标签:10 解释器 函数 Python 生成器 mp4 print id lambda


# 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]

标签:10,解释器,函数,Python,生成器,mp4,print,id,lambda
来源: https://www.cnblogs.com/yin-py/p/15422788.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有