Skip to content

核心编程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 var

nonlocal

  • 非局部变量
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)
    • // 除法之后结果向下取整

记录学习,分享技术