Joa*_*nge 260 python variable-assignment variable-declaration
是否可以在Python中声明变量,如此?:
var
Run Code Online (Sandbox Code Playgroud)
所以它初始化为None?似乎Python允许这样做,但是一旦你访问它,它就会崩溃.这可能吗?如果没有,为什么?
编辑:我想这样做的情况:
value
for index in sequence:
if value == None and conditionMet:
value = index
break
Run Code Online (Sandbox Code Playgroud)
Tod*_*lin 328
为什么不这样做:
var = None
Run Code Online (Sandbox Code Playgroud)
Python是动态的,所以你不需要声明事物; 它们自动存在于分配它们的第一个范围内.因此,您需要的只是上面的常规旧任务声明.
这很好,因为你永远不会得到一个未初始化的变量.但要小心 - 这并不意味着你不会最终错误地初始化变量.如果你做了什么None,确保你真正想要的东西,并尽可能分配更有意义的东西.
jfs*_*jfs 54
我衷心建议您阅读其他语言有"变量"(我将其添加为相关链接) - 在两分钟内您就会知道Python有"名称",而不是"变量".
val = None
# ...
if val is None:
val = any_object
Run Code Online (Sandbox Code Playgroud)
Tag*_*gar 16
在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
Run Code Online (Sandbox Code Playgroud)
PEP 526旨在为Python添加语法以注释变量类型(包括类变量和实例变量),而不是通过注释表达它们:
captain: str # Note: no initial value!
Run Code Online (Sandbox Code Playgroud)
它似乎更直接地符合你的要求"是否只能声明一个变量而不在Python中赋值?"
kqu*_*inn 13
我不确定你要做什么.Python是一种非常动态的语言; 在实际分配或使用变量之前,通常不需要声明变量.我想你想做的只是
foo = None
Run Code Online (Sandbox Code Playgroud)
这将把值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"
Run Code Online (Sandbox Code Playgroud)
从这样一个简短的代码示例来看这是否真的是正确的风格是有点困难,但它是一种更"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)
Run Code Online (Sandbox Code Playgroud)
注意:如果some_condition()引发异常,found则为未绑定.
注意:如果len(序列)== 0 item则为未绑定.
以上代码不可取.其目的是说明局部变量如何工作,即"变量"是否"定义"只能在运行时确定.优选方式:
for item in sequence:
if some_condition(item):
do_something(item)
break
Run Code Online (Sandbox Code Playgroud)
要么
found = False
for item in sequence:
if some_condition(item):
found = True
break
if found:
do_something(item)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
449937 次 |
| 最近记录: |