函数基础知识

  • 三元表达式
  • 各种生成式
  • 匿名函数
  • 匿名集合内置函数使用
  • 重要内置函数
  • 课后练习(多层装饰器执行流程和有参装饰器执行流程)

三元表达式

'''为了减少代码行数'''
'''雏形'''
1、获取用户输入的用户名 如果是curry就打印欢迎 否则打印抱歉
username = input('username>>>:').strip()
if username == 'curry':print('欢迎')
else:print('抱歉')
'''三元表达式:仅限于二选一的情况并不建议嵌套使用'''
2、编写一个函数 比较两个数的大小 返回较大的那个
def my_max(a,b):
    if a > b:
        return a
    else:
        return b
    return a if a > b else b 
"""
三元表达式语法结构
	值1 if 条件 else 值2 
如果if后面的条件成立 则使用if前面的值
如果if后面的条件不成立 则使用else后面的值
"""
print('哈哈' if 0 else '嘿嘿')  # 嘿嘿
print('霍霍' if 1 else '哼哼')  # 霍霍

username = input('username>>>:').strip()
if username == 'curry':print('欢迎')
else:print('抱歉')

print('欢迎') if username == 'curry' else print('抱歉')

res = 123 if 10 > 5 else (222 if 0 else (666 if 1 == 2 else 666))
ps:在python中代码不是越精简越好 在精简的过程中还需要保证代码的可读性

各种生成式

1、列表生成式
name_list = ['curry', 'kevin', 'oscar', 'jerry', 'tony']
# 给上述列表中所有的数据值增加上_NB的后缀
# 1、定义一个新的列表
new_list = []
# 2、循环列表中所有的数据值
for name in name_list:
# 3、拼接_NB后缀
    new_name = name + '_NB'
# 4、追加到新列表中
new_list.append(new_name)
print(new_list)
"""一行代码解决: 列表生成式"""
new_list = [name + '_NB' for name in name_list] 
# 先执行for循环 然后将一个个的数据值交给for循环前面处理
print(new_list)
支持if判断 先执行for循环 然后将一个个数据值交给if判断 结果是True
则最后交给for循环前面处理
new_list = [name + '_NB' for name in name_list if name != 'curry']   # ['kevin_NB', 'oscar_NB', 'jerry_NB', 'tony_NB']
print(new_list)
列表生成式中只能出现forif 不能出现While、else

2、字典生成式
    new_dirct = {i:'curry' for i in range(10) if i == 6}
    print(new_dirct)  # {6: 'curry'}

3、集合生成式
new_set = {i for i in range(10) if i == 6}
print(new_set)  # {6}

"""
new_tuple = (i for i in range(10))
print(new_tuple)  <generator object <genexpr> at 0x000001E62B8ED740>

元组没有所谓的生成式 它是迭代器(生成器)
"""

匿名函数

匿名函数就是没有函数名的函数

语法结构
	lambda 形参:返回值
案列:
(lambda x: x + 1) 直接调用
 res = lambda x:x + 1 命名调用
 	print(red(123))
应用场景
	匿名函数通常都需要配合其他函数一起使用 用于减少代码

匿名集合内置函数使用

max() # 求最大值
l1 = [123, 2321, 556, 3332, 23, 644, 335, 356, 3, 67, 345, 67, 333, 55, 12, 34, 566, 343243]
res = max(l1)
print(res)  # 343243

dic = {
    'curry': 12,
    'jason': 23,
    'oscar': 2132,
    'zjp': 23213213
}

def index(k):
    return dic.get(k)

# res = max(dic,key=lambda k: dic.get(K))
res = max(dic, key=index)
print(res)  # zjp

print('A' > 'a')
"""
A-Z  65-90
a-z  97-122
"""

重要内置函数

min()  最小值
map()  映射

1map()
    l1 = [10,20,30,40,50,60]
    # 需求:将列表中所有的数据值自增20
    # 方式1:for循环
    # 方式2:列表生成式
    # 方式3:map函数
    res = map(lambda x: x + 20, l1)
    print(res)  # <map object at 0x000002324415F0D0>
    print(list(res))
    def index(a):
        return a + 20
    res = map(index,l1)
    print(list(res))
2filter()
    l1 = ['curry','kevin','oscar','tony']
    # 需求:移除数据值里面的curry
    # 方式1、for循环
    # 方式2、列表生成式
    # 方式3、filter()
    res = filter(lambda a: a != 'curry',l1)
    print(res)  # <filter object at 0x0000025A885B5B50>
    print(list(res))  # ['kevin', 'oscar', 'tony']
    def index(a):
        return a !='curry'
    res = filter(index,l1)
    print(list(res))	
3reduce()
    l1 = [1,2,3]
    # 需求:求列表中所有数据值得和
    # 方式1:for循环
    # 方式2:sum()
    res = sum(l1)
    print(res)  # 6
    # 方式3:reduce()  将很多单体 变成一个整体
    from functools import reduce
    res = reduce(lambda x,y: x + y, l1, 100)
    res = reduce(lambda x,y: x + y, l1, 100)
    print(res)
4、zjp()
    n1 = [1,2,3]
    n2 = ['curry','kevin','oscar']
    res = zip(n1,n2)
    print(res)  # <zip object at 0x0000018A3237F480>
    print(list(res))

    n1 = [1,2,3,4]
    n2 = [5,6,7,8]
    n3 = 'curr'
    res = zip(n1,n2,n3)
    print(list(res))  # [(1, 'curry'), (2, 'kevin'), (3, 'oscar')]

    n1 = [1,2,3,4,5,6,7,8]
    n2 = [5,6,7,8]
    n3 = 'curr'
    res = zip(n1,n2,n3)
    print(list(res))  # [(1, 5, 'c'), (2, 6, 'u'), (3, 7, 'r'), (4, 8, 'r')]

课后练习

多层装饰器执行流程

def outter1(func1):                     #第1     第17 outer1(wrapper2)
    print('加载了outter1')                        # 第18 第三个打印
    def wrapper1(*args, **kwargs):              #  第19    第22 执行wrapper1
        print('执行了wrapper1')                        # 第23 第四个打印
        res1 = func1(*args, **kwargs)                  # 第24 先执行右边的func1(),此时的func1是第17步的wrapper2,直接运行wrapper2()
        return res1
    return wrapper1                         # 第20 将wrapper1作为outer1(wrapper2)的结果返回

def outter2(func2):                      #第2   第11 outer2(wrapper3)
    print('加载了outter2')                #第12 第二个打印
    def wrapper2(*args, **kwargs):      #第13   第24 执行wrapper2
        print('执行了wrapper2')                    #第25 第五个打印
        res2 = func2(*args, **kwargs)             #第26 先执行右边的func2(),此时的func2是第11的wrapper3,直接执行wrapper3
        return res2
    return wrapper2                     #第14 将wrapper2作为outter2(wrapper3)的参数返回

def outter3(func3):                     #第3   第6 outter3 (index)
    print('加载了outter3')                    # 第6 第一个打印
    def wrapper3(*args, **kwargs):           # 第7
        print('执行了wrapper3')                #第27  第六个打印
        res3 = func3(*args, **kwargs)         #第28  先执行右边的func3(),此时的func3是第3的index,跳转到index
        return res3
    return wrapper3                     #第8 将wrapper3作为outter3(index)的结果返回
@outter1  # index = outter1(wrapper2)            第16 先执行outter1(wrapper2)   第21 index(wrapper1) = outter1(wrapper2)
@outter2  # wrapper2 = outter2(wrapper3)         第10 先执行outter2(wrapper3) 第15 wrapper2 = outter2(wrapper3)
@outter3  # wrapper3 = outter3(真正的index函数名)   第5 先执行outter3(index)  第9 wrapper3 = outter3(index)
def index():                           #第4 调用被装饰函数
    print('from index')                #第29 第七个打印
index()

image

有参装饰器执行流程
def outer(condition,type_user):                         # 第1 执行outer('文件','Jason') 此时condition就是‘文件‘
    def login_auth(func_name):  # 这里不能再填写其他形参
        def inner(*args, **kwargs):  # 这里不能再填写非被装饰对象所需的参数
            username = input('username>>>:').strip()
            password = input('password>>>:').strip()
            # 应该根据用户的需求执行不同的代码
            if type_user =='jason':print('VIP')
            if condition == '列表':
                print('使用列表作为数据来源 比对用户数据')
            elif condition == '字典':
                print('使用字典作为数据来源 比对用户数据')
            elif condition == '文件':
                print('使用文件作为数据来源 比对用户数据')
            else:
                print('去你妹的 我目前只有上面几种方式')
        return inner
    return login_auth      # 第2 将login_auth作为函数outer(’文件‘,’Jason‘)的结果返回,此时login_auth = outer(’文件‘,’jason‘)
@outer('文件','jason')       # 语法糖后面括号内有参数会被直接当成函数执行     第3 @login_auth最外层函数结束  开始由上而下装饰器流程
def index():
    print('from index')
index() 

image

posted @   初学者-11  阅读(250)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示