周志洋

个人站

持续学习 才能不被淘汰


Python基础知识-函数进阶

参数种类回顾

def demo(pos, default=1, *args, scale=1.0, **kwargs):
   return pos, default, args, scale, kwargs

print(demo(10, 2, 3, 4, scale=0.5, mode="fast"))

可变对象做默认值的陷阱

def bad_append(item, cache=[]):
   cache.append(item)
   return cache

print(bad_append(1))  # [1]
print(bad_append(2))  # [1, 2] 共享了同一个列表

def good_append(item, cache=None):
   if cache is None:
       cache = []
   cache.append(item)
   return cache

闭包与 nonlocal

def make_counter():
   count = 0
   def inc():
       nonlocal count
       count += 1
       return count
   return inc

c = make_counter()
print(c(), c())  # 1 2

装饰器入门

import time

def timeit(func):
   def wrapper(*args, **kwargs):
       start = time.perf_counter()
       try:
           return func(*args, **kwargs)
       finally:
           print(f"{func.__name__} took {time.perf_counter()-start:.6f}s")
   return wrapper

@timeit
def work(n=100000):
   return sum(range(n))

work()


转载请注明:周志洋的博客 » Python基础知识-函数进阶

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦