12-函数与Lambda表达式
1 在定义参数的时候可以在参数前加上一个星号,表明这里面可以接受任意数量的序列(相当于一个元祖)
def avg(*scores):
return sum(scores) / len(scores)
result = avg(98, 88, 76, 66, 5)
print(result)
>>>66.6
如果是双星号,则可以接受一个字典
def display(**employee):
print(employee)
display(name = 'petter', age = 20, job = 'dev')
>>>{'name': 'petter', 'age': 20, 'job': 'dev'}
如果直接传入一个创建好的字典,则会报错.可以在变量名前加上两个星号.
emp = {'name' : 'peter', 'age' : 20, 'job' : 'dev'}
def display(**employee):
print(employee)
display(**emp)
>>>{'name': 'peter', 'age': 20, 'job': 'dev'}
2 lambda函数
lambda函数也叫匿名函数,即,函数没有具体的名称。先看一个例子:
g = lambda x : x + 1
print(g(4))
>>>5
相当于
def g(x):
return x + 1
print(g(4))
>>>5
语法–lambda 参数1,…:函数体
13-函数应用与工具
1 给定一个列表,找出其中的偶数。
# 1.使用循环
l = list(range(1, 21))
res = []
for n in l:
if n % 2 == 0:
res.append(n)
print(res)
>>>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 2.使用推导
l = list(range(1, 21))
res = [x for x in l if x % 2 == 0]
print(res)
>>>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
l = list(range(1, 21))
def even_number(x):
return x % 2 == 0
res = list(filter(even_number, l))
print(res)
>>>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
如果不将filter之后的对象转化为list列表的话,无法直接打印。此时可以:
l = list(range(1, 21))
def even_number(x):
return x % 2 == 0
res = filter(even_number, l)
for i in res:
print(i, end = ' ')
>>>2 4 6 8 10 12 14 16 18 20
l = list(range(1, 21))
res = list(filter(lambda n : n % 2 == 0, l))
print(res)
>>>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
2 用字典模拟switch功能
def hello_chinese(name):
print('你好,', name)
def hello_english(name):
print('hello,', name)
def hello_japanese(name):
print('こんにちは', name)
operation = {
'c':hello_chinese,
'e':hello_english,
'j':hello_japanese,
'r':lambda name : print('Здравствыйте,', name)
}
while True:
name = input('请输入名字:')
if name == 'stop':
break
language = input('请输入语言:\n c ==> 中文\n e ==> 英文\n j ==> 日文\n r ==> 俄文\n')
operation.get(language, hello_chinese)(name)
将函数名当成参数传递:
def hello_chinese(name):
print('你好,', name)
def hello_english(name):
print('hello,', name)
def hello_japanese(name):
print('こんにちは', name)
def hello(action, name):
action(name)
hello(hello_chinese, 'tom')
>>>你好, tom