首页 > 其他 > 详细

函数与lambda表达式

时间:2019-12-02 17:16:36      阅读:88      评论:0      收藏:0      [点我收藏+]

函数

技术分享图片

调用

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(请输入您的姓名:\n)
    if name == stop:#做判断,如果stop就跳出,不是就继续
        break
    language = input(请选择语言:\n c => 中文版\n e => 英文版\n j => 日文版\n)#请输入打招呼的版本,输入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(请输入姓名:\n)
    if name == stop:
        break
    language = input(请选择语言:\n c => 中文版\n e => 英文版\n j => 日文版\n r => 俄文版\n)

    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(请输入您的姓名:\n)
    if name == stop:#做判断,如果stop就跳出,不是就继续
        break
    language = input(请选择语言:\n c => 中文版\n e => 英文版\n j => 日文版\n)
    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(请输入姓名:\n)
    if name == stop:
        break
    language = input(请选择语言:\n c => 中文版\n e => 英文版\n j => 日文版\n r => 俄文版\n)

    #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(请输入姓名:\n)
    if name == stop:
        break
    language = input(请选择语言:\n c => 中文版\n e => 英文版\n j => 日文版\n r => 俄文版\n)

    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= ) #可迭代对象

 

 

 

函数与lambda表达式

原文:https://www.cnblogs.com/shirleysu90/p/11968664.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!