文章目录
Python基础知识(五)
一、函数
参数的匹配
形参有几个就要传递几个实参
形式一:位置匹配
def func(a,b,c):
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):
print(a,b,c)
func(c = 1,a = 2,b = 3)
运行结果:
形式三:默认值(调用时省略传值)
def func(a,b=2,c=3):
print(a,b,c)
func(1)
运行结果:
形式四、args任意数量参数,(python可以用元组进行参数传递:形参前面加,表示可以传递任意个数的序列。)
def avg(*scores):
return sum(scores)/len(scores)
result = avg(98.2,88.1,70,65)
print(result)
运行结果:
注:传递一个tuple时
def avg(*scores):
return sum(scores)/len(scores)
scores = (88,89,90)
result = avg(*scores)
print(result)
运行结果:
形式五:**kwargs可以传递以键值对的形式传递多个值
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(name = 'tom',age = 22,job = 'dev',department = 'development')
display(**emp)
运行结果:
二、Lambda表达式(定义匿名函数)
基本格式:lambda 参数1,..:函数
原始代码:
def hello_chinese(name):
print('你好:',name)
def hello_english(name):
print('Hello:',name)
while True:
name = input('请输入您的姓名:\n')
if name == 'stop':
break
language = input('请选择语言:\n c => 中文版\n e => 英文版\n ')
if language == 'c':
hello_chinese(name)
elif language == 'e':
hello_english(name)
运行结果:
def hello_chinese(name):
print('你好:',name)
def hello_english(name):
print('Hello:',name)
while True:
name = input('请输入您的姓名:\n')
if name == 'stop':
break
language = input('请选择语言:\n c => 中文版\n e => 英文版\n j=> 日文版\n ')
if language == 'c':
hello_chinese(name)
elif language == 'e':
hello_english(name)
elif language == 'j':
(lambda name:print('にほんご',name))(name)
运行结果:
建立委托机制:
print('你好:',name)
def hello_english(name):
print('Hello:',name)
while True:
name = input('请输入您的姓名:\n')
if name == 'stop':
break
language = input('请选择语言:\n c => 中文版\n e => 英文版\n j=> 日文版\n ')
if language == 'c':
action = hello_chinese
elif language == 'e':
action = hello_english
elif language == 'j':
action = (lambda name:print('にほんご',name))
action(name)
运行结果:
原始代码:
def hello_chinese(name):
print('你好:',name)
def hello_english(name):
print('hello:',name)
hello = hello_english
hello('tom')
运行结果:
改进:
def hello_chinese(name):
print('你好:',name)
def hello_english(name):
print('hello:',name)
hello = lambda name:print('にほんご',name)
hello('tom')
运行结果:
def hello_chinese(name):
print('您好:',name)
def hello_english(name):
print('hello:',name)mike
def hello_japanese(name):
print('にほんご',name)
while True:
name = input('请输入姓名:\n')
if name == 'stop':
break
language = input('请选择语言版本:\n c=>中文版\n e => 英文版\n j => 日本版\n')
if language =='c':
hello_chinese(name)
elif language == 'e':
hello_english(name)
elif language =='j':
hello_japanese(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)
运行结果:
改进:用字典表代替if循环结构:
def hello_chinese(name):
print('您好:',name)
def hello_english(name):
print('hello:',name)
def hello_japanese(name):
print('にほんご',name)
emp = {'name':'tom','age':22}
operation = {
'c':hello_chinese,
'e':hello_english,
'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)(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')
hello(hello_japanese,'Tom')
hello(lambda name:print('привет',name),'Tom')
运行结果:
三、函数的高级工具:
1、map(函数,可迭代对象)
返回的结果不是一个迭代对象需要用list转换过来
举例:对列表中的每个值进行操作:
l = list(range(1,21))
res = []
# 1、使用循环
for x in l:
res.append(x + 5)
# 2、使用推导
res = [x + 5 for x in l]
print(res)
运行结果:
使用map
l = list(range(1,21))
res = []
def add_number(x):
return x+5
res = list(map(add_number,l))
print(res)
运行结果:
2、filter(函数,可迭代对象):从后面多个符合条件的元素找出来。
l = list(range(1,11))
# def even_number(x):
# return x%2 == 0
# res = filter(even_number,l)
res = filter(lambda n :n % 2 ==0,l)
for n in res:
print(n,end = ' ')
运行结果:
l = list(range(1,11))
res = [x for x in l if x%2==0]
for n in res:
print(n,end = ' ')
运行结果: