是否可以像这样在Python中声明一个变量?:

var

使它初始化为None?Python似乎允许这样做,但一旦你访问它,它就崩溃了。这可能吗?如果不是,为什么?

编辑:我想这样做的情况下:

value

for index in sequence:

   if value == None and conditionMet:
       value = index
       break

相关问题

为什么函数可以修改调用者感知到的一些参数,而不能修改其他参数? Python变量声明

另请参阅

Python名称和值 其他语言有“变量”


当前回答

首先,我对你最初提出的问题的回答

问:我如何发现一个变量是否在我的代码中定义了?

答:在源文件中阅读,直到看到定义该变量的行。

而且,您已经给出了一个代码示例,其中有各种相当python化的排列。你正在寻找一种方法来扫描序列中匹配条件的元素,所以这里有一些解决方案:

def findFirstMatch(sequence):
    for value in sequence:
        if matchCondition(value):
            return value

    raise LookupError("Could not find match in sequence")

显然,在这个例子中,你可以根据你想要实现的目标,将提升值替换为返回值None。

如果你想要所有符合条件的东西,你可以这样做:

def findAllMatches(sequence):
    matches = []
    for value in sequence:
        if matchCondition(value):
            matches.append(value)

    return matches

还有另一种计算收益率的方法我就不给你们看了,因为它的工作方式很复杂。

此外,还有一种实现这一目标的方法:

all_matches = [value for value in sequence if matchCondition(value)]

其他回答

首先,我对你最初提出的问题的回答

问:我如何发现一个变量是否在我的代码中定义了?

答:在源文件中阅读,直到看到定义该变量的行。

而且,您已经给出了一个代码示例,其中有各种相当python化的排列。你正在寻找一种方法来扫描序列中匹配条件的元素,所以这里有一些解决方案:

def findFirstMatch(sequence):
    for value in sequence:
        if matchCondition(value):
            return value

    raise LookupError("Could not find match in sequence")

显然,在这个例子中,你可以根据你想要实现的目标,将提升值替换为返回值None。

如果你想要所有符合条件的东西,你可以这样做:

def findAllMatches(sequence):
    matches = []
    for value in sequence:
        if matchCondition(value):
            matches.append(value)

    return matches

还有另一种计算收益率的方法我就不给你们看了,因为它的工作方式很复杂。

此外,还有一种实现这一目标的方法:

all_matches = [value for value in sequence if matchCondition(value)]

我知道这有点晚了,但是在python3中,你可以使用

uninitialized_value:str

# some code logic

uninitialized_value = "Value"

但是使用这个技巧要非常小心,因为

uninitialized_value:str

# some code logic

# WILL NOT WORK
uninitialized_value += "Extra value\n"

为什么不这样做呢:

var = None

Python是动态的,所以你不需要声明;它们自动存在于分配给它们的第一个作用域中。所以,你所需要的只是上面提到的一个常规的赋值语句。

这很好,因为您将永远不会得到一个未初始化的变量。但是要注意——这并不意味着您不会得到错误的初始化变量。如果你init一些东西为None,确保这是你真正想要的,如果可以的话,分配一些更有意义的东西。

如果None是一个有效的数据值,那么您需要以另一种方式修改变量。你可以用:

var = object()

这个哨兵是尼克·科格伦提出的。

如果None: var = None,你可以用这个丑陋的在线程序欺骗解释器 它只向局部变量字典中添加一个变量var,而不是初始化它。解释器将抛出UnboundLocalError异常,如果你试图在一个函数之后使用这个变量。这也适用于非常古老的python版本。不简单,也不漂亮,但不要对python有太多期望。