这是python中随机游走仿真的一部分。
谁能解释为什么装饰器的“长度”定义为:
length=kwargs["n"] if "n" in kwargs else args[-1]
特别是:
首先,我相信装饰器print_info(func)必须返回在random_generator(n)和walk_generator(num_steps,n)函数中使用的参数“ n”。正确吗?
第二,我不明白为什么我们要使用“字典”类型(** kwargs)。在这种情况下,walk_generator函数不是(5,2)元组吗?
第三,如果需要使用** kwargs,请向我解释上面的行(“长度”的定义方式)。
谢谢:)
import random
def print_info(func):
def wrapper_func(*args, **kwargs):
length=kwargs["n"] if "n" in kwargs else args[-1]
print("iterator (length=%d) object is created."%length)
return func(*args, **kwargs)
return wrapper_func
@print_info
def random_generator(n):
for i in range(n):
yield -2*random.randint(0,1)+1
@print_info
def walk_generator(num_steps, n):
for i in range(n):
yield random_generator(num_steps)
if __name__=="__main__":
walk_gen=walk_generator(5,2)
for rand_gen in walk_gen:
print("new random walk begins")
position=0
for step in rand_gen:
position+=step
print("\t position: %d (%d)"%(position, step))