use*_*008 380 python variables defined
您如何知道变量是否已在运行时在代码中的特定位置设置?这并不总是显而易见的,因为(1)变量可以有条件地设置,(2)变量可以有条件地删除.我正在寻找像defined()
Perl isset()
,PHP或defined?
Ruby中的东西.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 595
try:
thevariable
except NameError:
print("well, it WASN'T defined after all!")
else:
print("sure, it was defined.")
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 320
'a' in vars() or 'a' in globals()
如果你想迂腐,你也可以查看内置的
'a' in vars(__builtins__)
div*_*eek 120
我认为最好避免这种情况.写起来更清晰,更清晰:
a = None
if condition:
a = 42
Run Code Online (Sandbox Code Playgroud)
sc4*_*c45 16
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
Run Code Online (Sandbox Code Playgroud)
对于这种特殊的情况下,它是好做a = None
的,而不是del a
.这将减少对象的引用计数a
(如果有)分配给,并且在a
未定义时不会失败.注意,该del
语句不直接调用对象的析构函数,而是从变量中取消绑定.当引用计数变为零时,将调用对象的析构函数.
可能需要这种情况的一种可能情况:
如果使用finally
块来关闭连接,但在try
块中,程序sys.exit()
将在定义连接之前退出.在这种情况下,finally
将调用该块,并且连接关闭语句将失败,因为未创建任何连接.
归档时间: |
|
查看次数: |
595939 次 |
最近记录: |