python-17 递归 and lambda and 高阶函数

递归
一定要有出口,若无出口回报错(达到最大深度)
函数返回值返回到位置是函数调用的位置

!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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值