可以在python中插入额外的作用域吗
我想知道是否可以在我的代码中插入一个额外的作用域,而无需定义函数。我遇到的问题如下:可以在python中插入额外的作用域吗,python,python-2.7,scope,list-comprehension,Python,Python 2.7,Scope,List Comprehension,我想知道是否可以在我的代码中插入一个额外的作用域,而无需定义函数。我遇到的问题如下: def func(a, b, c): some_var = [a for a in b] # do stuff with a 我的期望是a仍然是我传递给函数的值,因为我期望另一个a在列表理解的范围内(必须永远搜索该bug!) 我如何重写它,使列表理解中的a在它自己的范围内 我想要比这更优雅的东西 def func(a, b, c): def helper(v): return
def func(a, b, c):
some_var = [a for a in b]
# do stuff with a
我的期望是a仍然是我传递给函数的值,因为我期望另一个a在列表理解的范围内(必须永远搜索该bug!)
我如何重写它,使列表理解中的a在它自己的范围内
我想要比这更优雅的东西
def func(a, b, c):
def helper(v):
return [a for a in v]
some_var = helper(b)
# do stuff with a
在使用{}
定义范围的语言中,可以执行以下操作
def func(a, b, c) {
some_var = null
{
some_var = [a for a in b]
}
# do stuff with a
}
Python中有类似的东西吗?如果可以,请转到Python 3。众所周知,python 2中的列表理解会将变量泄漏到名称空间中 但是,如果没有,您可以通过使用不泄漏变量的生成器表达式(包装在列表调用中)来模拟干净的列表理解
def func(a, b, c):
some_var = list(a for a in b) #Does not leak a
# do stuff with a
如果可以,请转到python 3。众所周知,python 2中的列表理解会将变量泄漏到名称空间中 但是,如果没有,您可以通过使用不泄漏变量的生成器表达式(包装在列表调用中)来模拟干净的列表理解
def func(a, b, c):
some_var = list(a for a in b) #Does not leak a
# do stuff with a
您可以通过将列表理解包装为dict理解来插入额外的范围,例如:
>>> {None: [x for x in range(5)] for __ in range(1)}.values()[0]
这不会泄漏
x
的值,但它不是真正可读的。您可以通过将列表理解包装为dict理解来插入额外的范围,例如:
>>> {None: [x for x in range(5)] for __ in range(1)}.values()[0]
这不会泄漏
x
的值,但它不是真正可读的。如果您只是创建b
的副本,那么执行以下操作不是很容易:
def func(a, b, c):
some_var = b[:]
无需担心
a
是否在额外范围内。如果您只是创建b
的副本,只需执行以下操作不是很容易:
def func(a, b, c):
some_var = b[:]
无需担心
a
是否在额外的作用域中。这是什么python版本?为什么你还没有在Python3上呢?列表理解(但不是集合理解、dict理解,也不是生成器表达式)在Python2中的作用域是泄漏的。这是用Python修复的3@ParitoshSinghPython 2.7。这是我工作中的一项要求(我知道,我知道,也更喜欢python 3)@User12547645你不能将内部变量重命名为其他变量吗?@User12547645只是重命名循环变量?如果您希望它在自己的范围内,那么名称并不重要。这是什么python版本?为什么你还没有在Python3上呢?列表理解(但不是集合理解、dict理解,也不是生成器表达式)在Python2中的作用域是泄漏的。这是用Python修复的3@ParitoshSinghPython 2.7。这是我工作中的一项要求(我知道,我知道,也更喜欢python 3)@User12547645你不能将内部变量重命名为其他变量吗?@User12547645只是重命名循环变量?如果您希望它在自己的范围内,那么名称无论如何都不重要。