递归
一定要有出口,若无出口回报错(达到最大深度)
函数返回值返回到位置是函数调用的位置
!3
def sum_numbers(num):
if num == 1:
return 1 # 出口
return num + sum_numbers(num-1)
print(sum_numbers(3)) #6
lambda
lambda 参数 : 返回值
简化代码(需要的存储空间也小与def)
如果一个函数有一个返回值,and只有一句代码,可以使用lambda简化
lambda参数可有可无,只能返回一个表达式的值
def fn1():
return 200
print(fn1) #内存地址<function fn1 at 0x011407C8>
print(fn1())#200
fn2 = lambda : 100
print(fn2)#100
print(fn2()) #<function <lambda> at 0x015C39C0>
无参数
一个参数
default参数
fn1 = lambda a,b,c = 100 : a+b+c
print(fn1(1,2)) #103
print(fn1(1,2,200)) #203
可变参数
这里可变参数传入到lambda之后,返回值为元组
*args
fn1 = lambda *args : args
print(fn1(1,2)) #(1, 2)
print(fn1(1)) #(1,)
**kwargs
不定长关键字参数,返回字典
fn1 = lambda **kwargs : kwargs
print(fn1(name = 'python',age = '20'))
#{'name': 'python', 'age': '20'}
带判断的lambda
fn1 = lambda a,b : a if a > b else b
print(fn1(1,2)) #2
列表数据按字典key值排序
```python
students = [
{'name':'TOM','age':'19'},
{'name':'Jack','age':'20'},
{'name':'Terry','age':'21'}
]
#按name值升序排列
students.sort(key=lambda x:x['name'])
print(students)
#按name值降序排列
students.sort(key=lambda x:x['name'],reverse = True)
print(students)
#按age值降序排列
students.sort(key=lambda x:x['age'],reverse = True)
print(students)
# [{'name': 'Jack', 'age': '20'}, {'name': 'TOM', 'age': '19'}, {'name': 'Terry', 'age': '21'}]
# [{'name': 'Terry', 'age': '21'}, {'name': 'TOM', 'age': '19'}, {'name': 'Jack', 'age': '20'}]
# [{'name': 'Terry', 'age': '21'}, {'name': 'Jack', 'age': '20'}, {'name': 'TOM', 'age': '19'}]
高阶函数
将函数作为参数传递
print(abs(-10)) #10 绝对值
print(round(1.2)) #1 四舍五入
print(round(1.9)) #2
def sum_num(a,b,f):
return f(a) + f(b)
result = sum_num(1,-2,abs)
print(result) #3
map(func,lst)
将传入的函数变量func作用到lst变量的每个元素中,并将结果组成迭代器返回
list1 = [1,2,3,4,5]
def func(x):
return x ** 2
result = map(func,list1)
print(result) #<map object at 0x01C81D70>
print(list(result)) #[1, 4, 9, 16, 25]
reduce(func,lst)
import functools
每次func计算的结果几乎和序列的下一个元素做累积计算
reduce()传入的参数func必须接受两个参数
import functools
list1 = [1,2,3,4,5]
def func(a,b):
return a+b
result = functools.reduce(func,list1)
print(result) #15
filter(func,lst)
过滤掉不符合条件的元素,返回一个filter对象,可以用list()转换成列表
list1 = [1,2,3,4,5,6,7,8,9,10]
def func(x):
return x%2 == 0
result = filter(func,list1)
print(result) #<filter object at 0x01311D70>
print(list(result)) #[2, 4, 6, 8, 10]