• 函数与lambda表达式


    函数

    调用

    def hello(name): #参数,形参没有实际的值
        print('hello',name)
    
    hello('taom') #调用,参数匹配

    计算

    def hello(name): #参数,形参没有实际的值
        print('hello',name)
    
    
    def add(x, y):
        return x + y
    
    hello('taom') #调用,参数匹配
    
    result = add(5,3)#声明新变量
    print(result)

    字符串也支持相加

    result = add('abc','xyz')#声明新变量
    结果:
    hello taom
    abcxyz

    1参数匹配:默认位置匹配,也可按名称匹配。2、关键字匹配。3、默认值

    def func(a,b,c): #定义函数func,接收abc
        print(a,b,c)
    
    func(1,2,3)
    func('a','b','c')
    func([1,2,3],(5,6),{'a':1,'b':2}) #传递不受限制
    def func(a,b,c): #定义函数func,接收abc
        print(a,b,c)
    
    func(c=1,a=2,b=3) #使用可换

     默认值(调用时省略传值)

    def func(a,b=2,c=3):
        print(a,b,c)
    
    func(1)
    def func(a,b=2,c=3):
        print(a,b,c)
    
    func(1,c=5)
    
    结果:1,2,5

    算平均分

    def avg(score1,score2):
        return (score1 + score2) / 2
    
    result = avg(98.2,88.4)
    
    print(result)

    定义参数可以使用元组传递参数

    def avg(*scores):#加*代表后面可能有很多,定义参数里真是类型是tuple
        return sum(scores) / len(scores) #把集合的值汇总起来,len全局函数
    
    result = avg(98.2,88.1,70,65)
    
    print(result)

    *args传值,任意数量参数

    def avg(*scores):#加*代表后面可能有很多,定义参数里真是类型是tuple
        return sum(scores) / len(scores) #把集合的值汇总起来,len全局函数
    
    scores = (88,89,90) #类型兼容的多个变量
    
    result = avg(*scores) #把tuple变量类型传入,*是解开,必须解开
    
    print(result)

    **kwargs关键字参数,声明函数时传递字典表信息:**

    emp = {
        'name':'Tom',
        'age':22,
        'job':'dev'
    }
    
    def display(**employee):#**传递字典
        print(employee)
    display(name='tom',age=22,job='dev')
    emp = {
        'name':'Tom',
        'age':22,
        'job':'dev'
    }
    
    
    
    def display(**employee):#**传递字典
        print(employee)
    
    d = {'name':'Jerry','age':22}#声明一个字典表
    d2 = dict(name='Mike',age=23,job='dev')
    
    display(**emp)

    Lambda 表达式:定义匿名函数 动态语言

    lambda 基本格式:参数1,...:函数

    定义

    def hello(name): #:定义函数名称,参数,方法体
        print(name)
    
    f = lambda name:print(name) #接收一个对象引用名称,表明定义函数,lambda表达式
    
    f('tom')
    def add(a,b):
        return a + b
    
    def hello(name): #:定义函数名称,参数,方法体
        print(name)
    
    f = lambda name:print(name) #接收一个对象引用名称,表明定义函数,lambda表达式
    f2 = lambda x,y:x+y#定义函数需要return,lambda表达式不需要,返回x+y直接写
    
    f('tom')
    print(f2(5,3))

     做一个软件,根据不同语言实现打招呼的版本

    def hello_chinese(name):#定义一个hellochinese函数,跟谁打招呼写上名称
        print("您好",name)
    
    def hello_english(name):
        print('Hello',name)
    
    while True:
        name = input('请输入您的姓名:
    ')
        if name == 'stop':#做判断,如果stop就跳出,不是就继续
            break
        language = input('请选择语言:
     c => 中文版
     e => 英文版
     j => 日文版
    ')#请输入打招呼的版本,输入c表明执行中文
        if language == 'c':
            hello_chinese(name)
        elif language == 'e':
            hello_english(name)
        elif language == 'j':
            (lambda name:print('こんにちは',name))(name)#传递给变量才好使用,大括号当整体,再把name传进去
    def hello_chinese(name):
        print('您好',name)
    
    def hello_english(name):
        print('hello:',name)
    
    def hello_japanese(name):
        print('こんにちは',name)
    
    while True:#调用
        name = input('请输入姓名:
    ')
        if name == 'stop':
            break
        language = input('请选择语言:
     c => 中文版
     e => 英文版
     j => 日文版
     r => 俄文版
    ')
    
        f = lambda name:print('привет',name) #适用于临时用一次
    
        if language == 'c':
            hello_chinese(name)
        elif language =='e':
            hello_english(name)
        elif language == 'j':
            hello_japanese(name)
        elif language == 'r':
            f(name) #用f把name传入

    action 委托

    def hello_chinese(name):#定义一个hellochinese函数,跟谁打招呼写上名称
        print("您好",name)
    
    def hello_english(name):
        print('Hello',name)
    
    while True:
        name = input('请输入您的姓名:
    ')
        if name == 'stop':#做判断,如果stop就跳出,不是就继续
            break
        language = input('请选择语言:
     c => 中文版
     e => 英文版
     j => 日文版
    ')
        if language == 'c':
            action = hello_chinese #执行工作嫁给action,委托
        elif language == 'e':
            action = hello_english
        elif language == 'j':
            action = lambda name:print('こんにちは',name)
    
        action(name)

    简化

    def hello_chinese(name):#定义一个hellochinese函数,跟谁打招呼写上名称
        print("您好",name)
    
    def hello_english(name):
        print('Hello',name)
    
    hello = hello_chinese #hello委托hello_chinese来执行一个方法,来执行hellotom的逻辑
    hello('tom')
    hello = lambda name:print('こんにちは',name)
    def hello(name):
        print('hello',name)
    
    f = lambda name,age:print('hello {},age:{}'.format(name,age))
    
    f('tom',20)

    啰嗦版:

    def hello_chinese(name):
        print('您好',name)
    
    def hello_english(name):
        print('hello:',name)
    
    def hello_japanese(name):
        print('こんにちは',name)
    
    while True:#调用
        name = input('请输入姓名:
    ')
        if name == 'stop':
            break
        language = input('请选择语言:
     c => 中文版
     e => 英文版
     j => 日文版
     r => 俄文版
    ')
    
        #f = lambda name:print('привет',name) #适用于临时用一次
    
        if language == 'c':
            hello_chinese(name)
        elif language =='e':
            hello_english(name)
        elif language == 'j':
            hello_japanese(name)
        elif language == 'r':
            (lambda name:print('привет',name))(name)#前括号是定义,后括号是调用

    把要执行的操作放入字典表里

    In[2]: emp = {'name':'Jerry','age':22,'job':'dev'}
    In[3]: emp['name']
    Out[3]: 'Jerry'
    In[4]: emp.get('age')
    Out[4]: 22
    In[6]: emp.get('Name','无此键值')
    Out[6]: '无此键值'

    get的应用比[ ]广,大小写都支持,且可以指定默认值

     通过字典表方式模拟了其他的case

    def hello_chinese(name):
        print('您好',name)
    
    def hello_english(name):
        print('hello:',name)
    
    def hello_japanese(name):
        print('こんにちは',name)
    
    operation = {
        'e':hello_english,#不写括号只是引用,写了代表马上就要传值
        'c':hello_chinese,
        'j':hello_japanese,
        'r':lambda name:print('привет',name) #定义没有调用,只是赋了个键
    }#放入字典表
    
    while True:#调用
        name = input('请输入姓名:
    ')
        if name == 'stop':
            break
        language = input('请选择语言:
     c => 中文版
     e => 英文版
     j => 日文版
     r => 俄文版
    ')
    
        operation.get(language,hello_chinese)(name)#调用键值,可以将行为放入字典表做键值,想执行写上参数name

    打印一个不同版本的内容

    def hello_chinese(name):
        print('您好',name)
    
    def hello_english(name):
        print('hello:',name)
    
    def hello_japanese(name):
        print('こんにちは',name)
    
    def hello(action,name):#委托,name封装不同语言调用函数功能
        action(name)
    
    hello(hello_chinese,'tom')#hello_是形参,tom对应name是实参,是委托

    想改个不存在的把最后一行换成

    hello(lambda name:print('привет',name),'tom')#hello_是形参,tom对应name是实参

    lambda表达式好处

    目标输出偶数

    l = list(range(1,21)) #range全局函数,list将结果转换成列表
    
    result = []
    
    #找偶数放入[]
    #1.使用循环
    for n in l:
        if n % 2 == 0:
            result.append(n)
    
    
    print(result)

    法2:推导

    l = list(range(1,21)) #range全局函数,list将结果转换成列表
    
    result = []
    
    #找偶数放入[]
    #1.使用循环
    for n in l:
        if n % 2 == 0:
            result.append(n)
    
    #2.使用推导
    result = [x for x in l if x % 2 == 0] #l里找出所有变量叫x,过滤条件if
    
    print(result)
    l = list(range(1,21))
    
    res = []
    
    def add_number(x):#法3里添加的
        return x + 5
    
    #1.循环
    for x in l:
        res.append(x + 5)
    
    #2.推导
    res = [x+5 for x in l]
    
    #3.map()列表把某一函数用到列表每一个元素上
    res = list(map(add_number,l))#map映射把每一个元素取出来传递给参数add_number,放入列表里
    
    print(res)
    #3.map()列表把某一函数用到列表每一个元素上
    res = list(map((lambda n:n**2),l))#接收一个n,求平方值,第一个lambda是它要执行的第二个对象集合
    l = list(range(1,11))
    
    def even_number(x): #判断是不是偶数
        return x % 2 == 0
    
    res = list(filter(even_number, l)) #filter函数en是判断,从l找出符合条件的放入新结果,把它转成列表
    
    print(res)
    l = list(range(1,11))
    
    def even_number(x): #判断是不是偶数
        return x % 2 == 0
    
    res = filter(even_number, l) #filter函数en是判断,从l找出符合条件的放入新结果,把它转成列表
    
    for n in res:
        print(n,end='') #可迭代对象

    lambda

    l = list(range(1,11))
    
    res = filter(lambda n:n %2 == 0, l) #filter函数en是判断,从l找出符合条件的放入新结果,把它转成列表
    
    res = [x for x in l if x %2 ==0]
    for n in res:
        print(n,end=' ') #可迭代对象
  • 相关阅读:
    MYSQL profiling分析语句
    进程状态与僵尸进程、孤儿进程
    Nginx跨域设置
    Redis的应用场景
    Nginx的作用
    cgi、fast-cgi和php-fpm的介绍(作用)
    CoreDump开启和Swoole Tracker 3.0配置
    好题总结
    Atcoder总结 Part III
    Atcoder总结 Part II
  • 原文地址:https://www.cnblogs.com/shirleysu90/p/11968664.html
Copyright © 2020-2023  润新知