Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在python中插入额外的作用域吗_Python_Python 2.7_Scope_List Comprehension - Fatal编程技术网

可以在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只是重命名循环变量?如果您希望它在自己的范围内,那么名称无论如何都不重要。