本文是Python基础进阶学习的最后一节
完整代码:https://github.com/saysky/python_demo
直接上代码
# 1. 函数作为参数
def add(x, y, f):
return f(x) + f(y)
s = add(-1, 2, abs)
print(s)
# 2. map(f, list)函数,依次让list里的每个元素调用f函数,并收集结果为新的集合
s2 = map(abs, [-1, -2, -3, 1, 2, 3]) # 把每个元素取绝对值
for item in s2:
print(item)
# 3. reduce 每次取2个元素,反复调用函数,最终返回
from functools import reduce
# 例1,求所有数之和
def f(x, y):
return x + y
print(reduce(f, [1, 2, 3, 4, 5])) # 输出 15
# 例2,将list转成一个数字
def f2(x, y):
return x * 10 + y
print(reduce(f2, [1, 2, 3, 4, 5])) # 输出 12345
# 4. filter 筛选,返回满足的元素为新列表
# 例1,求奇数
def is_odd(x): # 是否为奇数
return x % 2 == 1
s2 = filter(is_odd, [1, 2, 3, 4, 5])
for item in s2: # 输出 1 3 5
print(item)
# 例2,求不为空的数
def is_not_empty(s):
return s and len(s.strip()) > 0
s3 = filter(is_not_empty, ['', 'a', '', 'b'])
for item in s3: # 输出 1 3 5
print(item)
# 5. 自定义排序
# 内置的sorted排序
print(sorted([3, 1, 2, 5, 4])) # 数字升序排序
print(sorted(['bb', 'AA', 'CC'], key=str.lower, reverse=True)) # 字母倒序排序
# 对象集合排序
# 自定义排序字段
def k(item):
return item[1] # 按成绩排序,成绩是第二个字段
score = [('张三', 90), ('李四', 70), ('王五', 80)]
print(sorted(score, key=k))
# 6. 返回函数
# 可以定义子函数
def func():
# 定义子函数
def sub_func():
print('调用子函数.')
sub_func()
func()
# 返回函数和返回函数值有细微不同,返回函数会立即结束
# 返回函数
def sayHello():
print('Hello')
def test():
print('test')
return sayHello # 没有(),不会调用 sayHello()方法
result = test() # 注意没有调用 sayHello()
result() # 这里才调用sayHello
# 7. 闭包
# 闭包定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数
# 闭包主要用途:封装、保持状态、延迟执行
def outer_func(x):
def inner_func(y):
return x * y # 调用步骤2,y=7
return inner_func # 调用步骤1,x=5
# 创建一个闭包实例
inner_func = outer_func(5)
print(inner_func(7))
# 8. 匿名函数,功能有限
result = [item for item in map(lambda x: x * x, [1, 2, 3, 4, 5])]
print(result) # 输出 [1, 4, 9, 16, 25]
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])) # 输出 15
# 9.decorator 类似java里的自定义注解,暂时略,后面有机会用到再补充
完整代码:https://github.com/saysky/python_demo
test15
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏