for循环中的Python默认变量

时间:2010-11-22 16:22:50

标签: python variables for-loop

我想知道Python是否具有在for循环中将数据存储在默认变量中的概念。

例如,在perl中,等价物如下

foreach (@some_array) {
    print $_
}

谢谢, 德里克

4 个答案:

答案 0 :(得分:15)

没有。你应该使用

for each in some_array:
    print each

答案 1 :(得分:2)

只是为了好玩,这里的东西可以满足您的需求。默认情况下,它将循环变量绑定到名称“_each”,但您可以通过向其提供var关键字参数来自行选择覆盖它。

import inspect

class foreach(object):
    __OBJ_NAME = '_foreach'
    __DEF_VAR = '_each'

    def __init__(self, iterable, var=__DEF_VAR):
        self.var = var
        f_locals = inspect.currentframe().f_back.f_locals
        if self.var not in f_locals:  # inital call
            self.iterable = iter(iterable)
            f_locals[self.__OBJ_NAME] = self
            f_locals[self.var] = self.iterable
        else:
            obj = f_locals[self.__OBJ_NAME]
            self.iterable = obj.each = obj.iterable

    def __nonzero__(self):
        f_locals = inspect.currentframe().f_back.f_locals
        try:
            f_locals[self.var] = self.iterable.next()
            return True
        except StopIteration:
            # finished - clean up
            del f_locals[self.var]
            del f_locals[self.__OBJ_NAME]
            return False

some_array = [10,2,4]
while foreach(some_array):
    print _each

print
while foreach("You can do (almost) anything in Python".split(), var='word'):
    print word

答案 2 :(得分:1)

Python允许使用'_'变量(引用我的)。在程序中使用它似乎是Pythonic方法,可以在循环中忽略循环控制变量(请参阅其他问题,例如Is it possible to implement a Python for range loop without an iterator variable?或我的Pythonic way to ignore for loop control variable)。正如评论所指出的,这与Perl的默认变量不同,但它允许您执行以下操作:

some_list = [1, 2, 3]
for _ in some_list:
    print _

一位大师可能会纠正我,但我认为这与您正在寻找的内容非常接近。

答案 3 :(得分:0)

for循环语法中使用的内容变为迭代中的项目针对循环的其余部分存储的变量。

for item in things:
    print item

for googleplexme in items:
    print googleplexme

语法如下所示

for <given variable> in <iterable>:

意味着给定变量可以是您在命名空间中喜欢的任何内容,并且可迭代可以是可迭代的源。