核心编程2523期
13 高级函数设计
闭包思想
- 内层函数调用了外层函数的变量,可以隐藏值,或者灵活调整参数。
python
def outer(k, b):
def inner(x):
return k * x + b
return inner
func = outer(2, 1)
v = func(2)
print(v)全局/局部变量
- 主函数里面的变量是全局变量
python
def func():
a = 1
b = 2
locals_dict = locals()
print(f"{locals_dict=}")
return a + b
if __name__ == '__main__':
c = 12
d = func()
print(f"{c=}")
print(f"{d=}")
globals_dict = globals()
print(f"{globals_dict=}")
print(f"{__name__=}")
print(f"{__file__=}")python
global varnonlocal
- 非局部变量
def outer():
x = 1
def inner():
nonlocal x
x = 2
print(f"inner: {x}")
print(f"outer: {x}"")14 递归函数与匿名函数
汉诺塔
15 匿名函数,装饰器与欧几里得算法
匿名函数
lambda args: expression
lambda 参数: 返回值filter(func, iterable)
- 过滤函数
map(func, iterable)
- 映射函数
reduce(func, iterable)
- 减少函数
- 将元素通过指定的方式进行合并
from functools import reduce
ret = reduce(lambda x, y: x if x > y else y, [1, 2, 3, 4, 5])
print(ret)- 求元素中的最大值
装饰器
定义:接收一个函数,返回另一个新函数(函数嵌套)
作用:动态的为一个函数增添功能
import time
def count_running_time(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"函数:{func.__name__}\t耗时:{end - start}")
return result
return wrapper
@count_running_time
def my_sum(nums):
return sum(nums)
print(my_sum([i for i in range(10**8)]))16 欧几里得算法与面向对象入门
gcd(Greatest Common Division)
辗转相除法(分土地)
- python
def gcd(n1, n2): return gcd(n2, n1 % n2) if n2 else n1
lcm(Least Common Multiple)
n1 * n2 / gcd(n1, n2)
def lcm(n1, n2): return n1 * n2 // gcd(n1, n2)// 除法之后结果向下取整