不使用等号定义变量
Defining a Variable without using the Equal sign
我试着理解一些东西,
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
是否有另一种不使用等号来定义变量的方法?
简短的回答并非如此,但这并不意味着 python 中从未使用过空声明。如果你想声明一个变量而不是实例化它,你最好的选择是
x = ''
或
x = Null
有时您会想要这样做,尽管其他人已经提到过。例如,考虑这段代码。
try:
myValue = foo()
except:
pass
print(myValue);
如果 foo() 抛出错误,您的代码不会因为 try-catch 而中断。但是,当您尝试打印 myValue 时,您的代码将中断,因为它未定义。为防止这种情况,您可以在 try-catch
上方添加 myValue 的空声明
你的问题很奇怪。实际上,您永远不想不使用 =
来分配给变量。但是为了完整起见,可以通过 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()
。那是酒吧里精神不稳定、过度狂热、醉酒的家伙,他会操你的代码,让你说 "he be cray cray"。
所以不要乱用 locals()
。另一方面,只需使用 x = 10
并保存您的理智。呸!这 post 身体受伤
您不能使用 "is" 声明变量,因为 "is" 比较操作数的身份(== imo 的更严格版本)而不是分配它。
回到你的问题,我认为没有必要,因为“=”很好地发挥了这个作用。
但是在代码块中,例如 for 循环,您可以在该代码块中分配临时变量。
示例:-
for i in range(20):
print i
或
您也可以使用 "as" 关键字,例如
import xml.etree.ElementTree as ET
和
with open('file.txt') as f:
a = f.readlines()
这完全取决于你所说的 'define a variable'。
当您在交互式 Python 解释器中时,最后一个表达式的 return 值自动存储在 _
(下划线)变量中:
>>> 1.0 + 1.0
2.0
>>> _
2.0
>>> _ * 2
4.0
>>> _
4.0
此外,如果您使用 IPython,
__
和___
(双下划线和三下划线)指的是倒数第二个和倒数第三个输出值,
_iii
、_ii
、_i
指最后三个输入的命令,
- 任何以前的输出都可以使用
_2
和 之类的东西访问
- 可以使用类似
_i2
: 的字符串访问任何先前的输入
(见一个对应的Whosebug 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.)
我试着理解一些东西,
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
是否有另一种不使用等号来定义变量的方法?
简短的回答并非如此,但这并不意味着 python 中从未使用过空声明。如果你想声明一个变量而不是实例化它,你最好的选择是
x = ''
或
x = Null
有时您会想要这样做,尽管其他人已经提到过。例如,考虑这段代码。
try:
myValue = foo()
except:
pass
print(myValue);
如果 foo() 抛出错误,您的代码不会因为 try-catch 而中断。但是,当您尝试打印 myValue 时,您的代码将中断,因为它未定义。为防止这种情况,您可以在 try-catch
上方添加 myValue 的空声明你的问题很奇怪。实际上,您永远不想不使用 =
来分配给变量。但是为了完整起见,可以通过 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()
。那是酒吧里精神不稳定、过度狂热、醉酒的家伙,他会操你的代码,让你说 "he be cray cray"。
所以不要乱用 locals()
。另一方面,只需使用 x = 10
并保存您的理智。呸!这 post 身体受伤
您不能使用 "is" 声明变量,因为 "is" 比较操作数的身份(== imo 的更严格版本)而不是分配它。 回到你的问题,我认为没有必要,因为“=”很好地发挥了这个作用。 但是在代码块中,例如 for 循环,您可以在该代码块中分配临时变量。 示例:-
for i in range(20):
print i
或
您也可以使用 "as" 关键字,例如
import xml.etree.ElementTree as ET
和
with open('file.txt') as f:
a = f.readlines()
这完全取决于你所说的 'define a variable'。
当您在交互式 Python 解释器中时,最后一个表达式的 return 值自动存储在 _
(下划线)变量中:
>>> 1.0 + 1.0
2.0
>>> _
2.0
>>> _ * 2
4.0
>>> _
4.0
此外,如果您使用 IPython,
__
和___
(双下划线和三下划线)指的是倒数第二个和倒数第三个输出值,_iii
、_ii
、_i
指最后三个输入的命令,- 任何以前的输出都可以使用
_2
和 之类的东西访问
- 可以使用类似
_i2
: 的字符串访问任何先前的输入
(见一个对应的Whosebug 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.)