2016-07-28 43 views
4
for i in range(5): 
    def test(i=i): 
     print(i) 

test() 
test() 
test() 
test() 
test() 

这会每次打印4个?有人可以帮助我理解这一点。带循环内默认参数的Python函数

+2

您定义的函数'test'五倍。在完成五次定义之后,剩下的是最后一个,即'i == 4'。 – khelwood

+0

我扩大了并添加了一些评论。 –

+0

如果你想创建这样的几个函数,把它们放在一个列表或字典中。 – polku

回答

8

您重新定义test 4次:

一样:

#define test 
def test(i = 0): 
    print(i) 

#redefine test 
def test(i = 1): 
    print(i) 

#redefine test 
def test(i = 2): 
    print(i) 

#redefine test 
def test(i = 3): 
    print(i) 

#redefine test 
def test(i = 4): 
    print(i) 

所以你只有1 test()最后一个。

3

函数test在循环的每次迭代中都被重新定义。

通过循环完成的时间,test很简单:

def test(i=4): 
    print(i) 
3

第一脚本完成了环路,由for循环,我值为4

那么多少有史以来次结束,你可以调用test(),将打印4

我已经添加了一些打印到你的代码,这样就可以了解流量更好

for i in range(5): 
    print(i) 
    def test(i=i): 
     print("test") 
     print(i) 

test() 
test() 
test() 
test() 
test() 

输出将是:

0 
1 
2 
3 
4 
test 
4 
test 
4 
test 
4 
test 
4 
test 
4