函数
程序员文章站
2022-07-12 10:02:08
...
九、函数
- 为什么使用函数
- 最大化代码重用
- 最小化代码冗余
- 将过程分解
-
函数定义
def 函数名(参数1,参数2,...)
-
函数调用
函数名(实际参数)
-
变量作用域
Built-in method 全局
全局作用于 global关键字
Encolsure nonlocal
Local - 参数
- 传递
不可变对象,传递的是变量的副本,不影响原始的值。
可变对象,传递的是地址引用,可能改变原始的值。 - 匹配
位置匹配
关键字匹配
默认值匹配
*args 任意参数量(tuple)
参数以逗号分隔,进行传递
def avg(*c):
return sum(c)/len(c)
a = avg(1,2,3)
print(a)# 2
参数以元祖形式给出时,需要用单星号解包
def avg(*c):
return sum(c)/len(c)
c = (3,4,5)
a = avg(*c)#解包
print(a)
** kwargs 任意个位置参数(字典)
直接以位置参数的形式给出
def display(**kwargs):
print(kwargs)
display(name='Jack',age = 10)
以字典形式给出时,需要用双星号解包
d={'name': 'Jack', 'age': 10,'gender':'M'}
display(**d)
函数托管,传递的是函数名。
解决多分支的问题。
def hello_cn(name):
print('{},你好!'.format(name))
def hello_en():
print('{}, Hello!'.format(name))
def hello(action,name):
action(name)
langunge = input('请输入语言:')
name = '小红'
if langunge == 'cn':
action = hello_cn
else:
action = hello_en
hello(action,name)
请输入语言:cn
小红,你好!
传递的是函数名,无括号,加括号后就会执行函数。
- lambda表达式
- 定义:
lambda 参数1,参数2,...: 函数体
可以无参数,也可以有返回 - 无return关键字
eg:lambda name:print(name)
- 调用:命名(参数)
- 高级工具
- map(函数名,可迭代对象)#映射函数
将可迭代对象中的元素逐个放入函数中处理,得到返回值
返回值是map对象,可迭代,通过list函数转成列表
返回值的个数,与参数可迭代对象中的参数个数相同
列表中每个元素+5。
l = list(range(6))
# 1. for
result1 = []
for i in l:
result1.append(i+5)
# 2. 列表推导式
result2 = [i+5 for i in l]
# 3. map
f = lambda x:x+5
result3 = list(map(f,l))
print('原始列表',l)
print('for: ',result1)
print('列表表达式: ',result2)
print('map + lambda: ',result3)
原始列表 [0, 1, 2, 3, 4, 5]
for: [5, 6, 7, 8, 9, 10]
列表表达式: [5, 6, 7, 8, 9, 10]
map + lambda: [5, 6, 7, 8, 9, 10]
列表表达式 – 推导的速度最快,底层是C实现
-
filter(函数名,可迭代对象) #过滤函数
将可迭代对象中的元素逐个放入函数中处理,如果处理后为真,则返回可迭代对象中的相应的元素
返回的可迭代对象元素的个数,是参数可迭代对象的一个子集。
选出列表中的偶数。
l = list(range(6))
# 1. for
result1 = []
for i in l:
if i%2 ==0:
result1.append(i)
# 2. 列表推导式
result2 = [i for i in l if i%2 ==0]
# 3. map
f = lambda x:x%2==0
result3 = list(filter(f,l))
print('原始列表',l)
print('for: ',result1)
print('列表表达式: ',result2)
print('map + lambda: ',result3)
原始列表 [0, 1, 2, 3, 4, 5]
for: [0, 2, 4]
列表表达式: [0, 2, 4]
map + lambda: [0, 2, 4]
map(f,l)
l中的元素,经过f函数后,返回值为真,则保留这个元素,否则从列表中删掉