当前位置:  开发笔记 > 编程语言 > 正文

是否可以仅在没有在Python中赋值的情况下声明变量?

如何解决《是否可以仅在没有在Python中赋值的情况下声明变量?》经验,为你挑选了4个好方法。

是否可以在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,确保你真正想要的东西,并尽可能分配更有意义的东西.



1> Todd Gamblin..:

为什么不这样做:

var = None

Python是动态的,所以你不需要声明事物; 它们自动存在于分配它们的第一个范围内.因此,您需要的只是上面的常规旧任务声明.

这很好,因为你永远不会得到一个未初始化的变量.但要小心 - 这并不意味着你不会最终错误地初始化变量.如果你做了什么None,确保你真正想要的东西,并尽可能分配更有意义的东西.


关键是要明确,而不是隐含.不要猜测初始值是什么.不知道未初始化的变量是抛出异常还是神奇地具有有用的值.
我唯一的问题是我跟踪一个计数器(minValue),任何时候一个值都低于它,我将它设置为新的minValue.如果我最初将minValue声明为None,那么显然它仍然低于我比较的任何数字.我最后只是在sys.maxint初始化它

2> jfs..:

我衷心建议您阅读其他语言有"变量"(我将其添加为相关链接) - 在两分钟内您就会知道Python有"名称",而不是"变量".

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



3> Tagar..:

在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中赋值?"


很好的答案

4> kquinn..:

我不确定你要做什么.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的评论(发布在这里显示代码)

与OP的问题无关,但上述代码可以改写为:

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)

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有