python初始化函数调用函数_python函数中的变量是否在每次函数调用时重新初始化?...

Python必须在myfunction1()的每个条目上创建一个新列表,并将其分配给“biglist”。在

在myfunction2()中,传递对全局范围的“biglist”的引用,因此不需要进行复制。在

两者之间还有其他微妙的区别。传入该引用会使全局数据受到(可能是不需要的)干扰:>>> biglist = [ 1,2,3,4,5,6,7,8,9 ]

>>> def myfunction3(mylist):

... mylist[2] = 99

...

>>> biglist

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> myfunction3(biglist)

>>> biglist

[1, 2, 99, 4, 5, 6, 7, 8, 9]

…然而,在函数作用域中声明它意味着每次都会重新创建它。因此,例如:

^{pr2}$

每次调用函数时,都有一个新的、干净的、未经修饰的列表副本。在

那么你怎样才能两全其美呢?试试这个:>>> def myfunction5():

... mylist = biglist+[] # Make a private copy

... mylist[4] = 99

...

>>> biglist

[1, 2, 99, 4, 5, 6, 7, 8, 9]

>>> myfunction5()

>>> biglist

[1, 2, 99, 4, 5, 6, 7, 8, 9]

您可以看到全局范围列表没有改变。基于此方法,您的新功能将是:def myfunction1a(number):

mylist = biglist+[] # Copy-safe version

print number*mylist

使用您的基准时间进行比较如何?我知道在这种情况下,您实际上并没有修改函数中的“biglist”,但是如果您必须共享全局数据,那么习惯使用它并不是一个坏的范例,而且列表只从头构建一次(然后复制)可能会带来一些性能改进。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值