在不使用等号的情况下定义变量

时间:2017-08-10 20:38:44

标签: python operators

我尝试了解一些事情,

x = 10
print x

结果将是10

x is 10
print x

结果将是未定义错误X.

x = 10
y = 10

if x == y:
  print True

if x is y:
  print True

结果是:

True
True

是否有其他方法可以在不使用等号的情况下定义变量?

4 个答案:

答案 0 :(得分:4)

你的问题很奇怪。在实践中,您永远不会想要使用=来分配变量。但只是为了完整起见,可以通过使用globals()(或locals(),依赖)来分配新变量。

以下是一种方法:

globals().__setitem__('x', 10)

证明:

In [139]: x
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-139-401b30e3b8b5> in <module>()
----> 1 x

NameError: name 'x' is not defined

In [140]: globals().__setitem__('x', 10)

In [141]: x
Out[141]: 10

修改

不要惹恼locals()。那个酒吧里精神不稳定,过于粗暴,醉酒的家伙,会让你的代码变成你的代码并让你说#34;他是cray cray&#34;。

所以不要惹恼locals()。另一方面,只需使用x = 10并保存您的理智。呸!这篇文章伤得很厉害

答案 1 :(得分:1)

您不能使用&#34; is&#34;来声明变量。 as&#34;是&#34;比较操作数的身份(更严格的== imo版本)不分配它。 回到你的问题,我不认为这是必要的&#34; =&#34;很好地发挥了这个作用。 但是在代码块中,例如for循环,您可以在该代码块中分配临时变量。 例如: -

for i in range(20):
    print i

您也可以使用&#34;作为&#34;像

这样的关键字
import xml.etree.ElementTree as ET

with open('file.txt') as f:
    a = f.readlines()

这完全取决于您的定义&#39;定义变量&#39;。

答案 2 :(得分:0)

简短的回答并不是真的,但这并不意味着在Python中不会使用空声明。如果你想声明一个变量而不是实例化它,你最好的选择是

x = ''

x = Null

有些时候你想要这样做,尽管别人提到过。例如,请考虑此代码。

try:
    myValue = foo()
except:
    pass

print(myValue);

如果foo()抛出错误,则代码不会因try-catch而中断。但是,当您尝试打印myValue时,您的代码将会中断,因为它未定义。为了防止这种情况,你可以在try-catch

之上添加一个空的myValue声明

答案 3 :(得分:0)

当你在交互式Python解释器中时,最后一个表达式的返回值会自动存储在_(下划线)变量中:

>>> 1.0 + 1.0
2.0
>>> _
2.0
>>> _ * 2
4.0
>>> _
4.0

此外,如果你正在使用IPython,

  • _____(双倍和三倍下划线)指的是倒数第二个和第三个到最后一个输出值,
  • _iii_ii_i是指最后三个输入命令,
  • 可以使用_2
  • 之类的内容访问任何以前的输出
  • 任何以前的输入都可以使用_i2
  • 之类的字符串进行访问

(参见相应的Stackoverflow answer。)

In [1]: True
Out[1]: True

In [2]: 'asdbsd'
Out[2]: 'asdbsd'

In [3]: -5 + 0
Out[3]: -5

In [4]: ___, __, _
Out[4]: (True, 'asdbsd', -5)

In [5]: _i
Out[5]: u'___, __, _'

In [6]: _1
Out[6]: True

In [7]: _i3
Out[7]: u'-5+0'

(IPython documentation。)