def fn(*args): g = (x for x in args) print('g = ', g) print(next(g)) print(next(g)) print(next(g))
fn(12, 1, 3)
输出结果是
g = <generator object fn.<locals>.<genexpr> at 0x000001F606ED0990>1213
由此可见
1.使用 tuple 包装 for循环的副产物x,可以生成一个 generator
2.generator 类似于java的iterator
3.generator的优点在于,没有把所有item都放到内存中,而是使用next方法取的时候才去取值
def fn(a, b, *args, **di): print('a = ', a) print('b = ', b) for x in args: print('x = ', x) for k, v in di.items(): print('k = ', k, ' v = ', v) fn(10, *(12, 14), name='messi', age=12)
输出结果是a = 10
b = 12
x = 14
k = name v = messi
k = age v = 12
由此可见,必须参数和可变参数在传递给方法时参数统一处理了,先满足必须参数再满足可变参数