函数
文章目录
- 函数
- 定义与调用
- 参数传递
- 内存分析
- 返回值
- 参数定义
- 默认值参数
- 个数可变的参数
- 关键字参数
- 变量的作用域
- 匿名函数
- 基本语法
- 示例
- lambda与排序
- 高阶函数
- map函数
- reduce函数
- filter函数
- 多关键字排序
定义与调用
函数可以嵌套用
先定义后调用
def calc(a,b):
c=a+b
return c
result=calc(10,20)
print(result)
set()函数去掉重复的元素
参数传递
-
位置实参, 按照对应位置接收值 , 实参和形参数目要相同
-
传引用调用
-
关键字a=10,b=20
内存分析
def fun(arg1,arg2):
在函数中,如果是不可变对象,不影响实参的值
形参改变,指向新对象
如果是可变对象,影响实参的值
如果不改变可变实参,则 lstcopy=lst[:]复制列表
谨慎使用可变对象做实参
diymod(x,y) (x//y,x%y)
pow(x,y),x的y次幂
返回值
def fun(nmu)
odd=[]
even=[]
for i%2:
odd.append(i)
else:
even.append(i)
return odd,even
1)如果函数没有返回值,return可以不写
2)返回值1个,直接返回类型
3)多个返回结果为元组
参数定义
默认值参数
如果没有传递默认值参数则使用默认值
比如times=1
传值则用传的值
个数可变的参数
def demo(*a) -》 demo(1,2)
*a可接收多个数
**kw 接收 x=1,b=2 会 变成字典
*(1,2)解包 相当于1,2
**{‘c’:1,‘v’:2}解包字典
关键字参数
针对实参 , 参数为a,b,c
b=3,c=2,a=1
不按照排列顺序
变量的作用域
同名变量作用域小的屏蔽作用域大的
修改全局变量 : global 如global x
修改外围变量 nonlocal
尽可能少用局部变量
如果不提前申明 , 出现在=左边为局部变量
一切皆对象,函数也可以作为实参
匿名函数
在Python中,可以使用lambda
关键字来创建匿名函数,这些函数通常用于编写简洁的函数,而不需要使用def
关键字定义一个正式的函数。
基本语法
lambda [参数1[,参数2…]]:表达式
表达式可以调用其他函数,并且会自动返回值。
示例
t = lambda a, b, c: a + b + c # 返回函数对象在内存地址
print(t(1, 2, 3)) # 执行函数对象
lambda与排序
sorted()
函数可以对可迭代对象进行排序。
print(sorted([36, 5, -12, 9, -21], key=abs))
abs
是绝对值函数,没有指定reverse
参数时,默认为升序。
random.shuffle()
用于打乱列表顺序。data.sort(key=lambda x: x)
使用元素本身作为排序的关键字。data.sort(key=lambda x: len(str(x)), reverse=True)
将元素转换为字符串,根据字符串长度进行降序排序。
高阶函数
高阶函数是指可以接受函数作为参数或者返回函数的函数。
map函数
map
函数可以将一个函数应用到一个可迭代对象的每个元素上。
a = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, a))) # 将a中的每个元素映射到函数上,即平方
reduce函数
reduce
函数通常用于累加操作,每次计算的结果都会作为下一次的输入。
from functools import reduce
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])) # 累加操作
filter函数
filter
函数用于过滤序列,过滤掉不符合条件的元素。
print(list(filter(lambda x: x % 2 != 0, [1, 2, 3, 4, 5]))) # 筛选出奇数
注意:map
和filter
的结果都是迭代器,需要使用list
函数来转换为列表才能看到返回值。
多关键字排序
# item[1], item[4] 在 [8, 2, 7, 1, 6] 中的是 (2, 6)
# 第一个:第一关键字,第二个:第二关键字,先看第一个数,第一个相同看第二个
print(sorted([8, 2, 7, 1, 6], key=lambda item: (item[1], item[4])))
# item[1], -item[4] 第5个元素降序
print(sorted([8, 2, 7, 1, 6], key=lambda item: (item[1], -item[4])))
在多关键字排序中,如果第一个关键字相同,则会比较第二个关键字,依此类推。