Python中的Dicts有一个非常好的方法get
:
# m is some dict
m.get(k,v) # if m[k] exists, returns that, otherwise returns v
对于任何值,有没有办法做到这一点?例如,在Perl中,我可以这样做:
return $some_var or "some_var doesn't exist."
答案 0 :(得分:2)
Python中的or
运算符guaranteed返回其中一个操作数,如果左表达式求值为False
,则评估并返回正确的操作符。
修改强>:
重新阅读你的问题后,我注意到我第一次误解了它。通过使用locals()
内置函数,您可以将get()
方法用于变量,就像您将它用于dicts(尽管它既不是非常漂亮也不是pythonic),来检查值是否存在或不:
>>> locals().get('some_var', "some_var doesn't exist.")
"some_var doesn't exist."
>>> some_var = 0
>>> locals().get('some_var', "some_var doesn't exist.")
0
答案 1 :(得分:2)
如果您需要能够更具体地处理“false-ish”值(例如,0
或''
是好的值,但None
和False
是没有),Python 2.5中引入了更详细的“条件表达式”(又名三元运算符):
return x if <cond> else y
<cond>
可以是任何条件:
return x if isinstance(x, basestring) else y
答案 2 :(得分:1)
在Python中也可以短路工作。
return a or b
答案 3 :(得分:1)
实际上Python ehre有所不同:
如果未定义名为some_var
的变量,则无法访问它以确定它不存在 -
你会得到一个NameError异常。
设计是这样的:未定义的变量名称没有“未定义”或“空”值,它们引发了异常,这是从Python到大多数动态类型语言的差异之一。
因此,获取some_var
可能定义或不定义的语句不是Pythonic。在一个好的程序中,它将被定义,即使包含“无”或“假” -
在这种情况下,“或”成语会起作用,但建议的方法是使用表达式if
,如:
return some_var if some_var else "some_var contains a False Value"
如果您碰巧有可能未定义some_var
的代码,并且不能为soemr eason更改它,则可以检查字符串“some_var”是否作为localv ariables的一个关键字存在,由{返回{1}}要知道它是否被定义:
locals()
这也不是最pythonic的方式 - 必须处理变量,我的未被定义是Python代码中的例外。所以最好的尝试是尝试在try原因中使用vars内容,如果var不存在则捕获“NameError”异常:
return some_var if "some_var" in locals() else "some_var was not defined"