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

var

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

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

value

for index in sequence:

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

相关问题

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

另请参阅

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


当前回答

我衷心建议你阅读其他语言有“变量”(我添加了一个相关链接)-在两分钟内你会知道Python有“名称”,而不是“变量”。

val = None
# ...
if val is None:
   val = any_object

其他回答

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

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

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

而且,您已经给出了一个代码示例,其中有各种相当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写C语言。如果你想在一个序列中找到一些东西,Python有内置的函数来做这件事,比如

value = sequence.index(blarg)

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

在Python 3.6+中,你可以使用变量注释:

https://www.python.org/dev/peps/pep-0526/#abstract

PEP 484引入了类型提示,也就是类型注释。虽然它的主要关注点是函数注释,但它也引入了类型注释的概念来注释变量:

# 'captain' is a string (Note: initial value is a problem)
captain = ...  # type: str

PEP 526旨在为Python添加注释变量类型的语法(包括类变量和实例变量),而不是通过注释来表示它们:

captain: str  # Note: no initial value!

这似乎更直接地符合你的问题“在Python中是否可能只声明一个变量而不赋值?”

注意:Python运行时不强制函数和变量类型注释。它们可以被第三方工具使用,如类型检查器、ide、linter等。

我衷心建议你阅读其他语言有“变量”(我添加了一个相关链接)-在两分钟内你会知道Python有“名称”,而不是“变量”。

val = None
# ...
if val is None:
   val = any_object