是否可以在Python中声明变量,如此?:
var
所以它初始化为None?似乎Python允许这样做,但是一旦你访问它,它就会崩溃.这可能吗?如果没有,为什么?
编辑:我想这样做的情况:
value for index in sequence: if value == None and conditionMet: value = index break
python中未初始化的值(由同一作者)
Python中是否有任何声明关键字?(由同一作者)
Python:变量范围和函数调用
其他语言有"变量"
Todd Gamblin.. 328
为什么不这样做:
var = None
Python是动态的,所以你不需要声明事物; 它们自动存在于分配它们的第一个范围内.因此,您需要的只是上面的常规旧任务声明.
这很好,因为你永远不会得到一个未初始化的变量.但要小心 - 这并不意味着你不会最终错误地初始化变量.如果你做了什么None
,确保你真正想要的东西,并尽可能分配更有意义的东西.
为什么不这样做:
var = None
Python是动态的,所以你不需要声明事物; 它们自动存在于分配它们的第一个范围内.因此,您需要的只是上面的常规旧任务声明.
这很好,因为你永远不会得到一个未初始化的变量.但要小心 - 这并不意味着你不会最终错误地初始化变量.如果你做了什么None
,确保你真正想要的东西,并尽可能分配更有意义的东西.
我衷心建议您阅读其他语言有"变量"(我将其添加为相关链接) - 在两分钟内您就会知道Python有"名称",而不是"变量".
val = None # ... if val is None: val = any_object
在Python 3.6+中,您可以使用Variable Annotations:
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是一种非常动态的语言; 在实际分配或使用变量之前,通常不需要声明变量.我想你想做的只是
foo = None
这将把值None
赋给变量foo
.
编辑:你真正想要做的就是这样:
#note how I don't do *anything* with value here #we can just start using it right inside the loop for index in sequence: if conditionMet: value = index break try: doSomething(value) except NameError: print "Didn't find anything"
从这样一个简短的代码示例来看这是否真的是正确的风格是有点困难,但它是一种更"Pythonic"的工作方式.
编辑:下面是JFS的评论(发布在这里显示代码)
for item in sequence: if some_condition(item): found = True break else: # no break or len(sequence) == 0 found = False if found: do_something(item)
注意:如果some_condition()
引发异常,found
则为未绑定.
注意:如果len(序列)== 0 item
则为未绑定.
以上代码不可取.其目的是说明局部变量如何工作,即"变量"是否"定义"只能在运行时确定.优选方式:
for item in sequence: if some_condition(item): do_something(item) break
要么
found = False for item in sequence: if some_condition(item): found = True break if found: do_something(item)