Spe*_*cer 45 python language-comparisons variable-assignment python-2.7
我是Python新手的RoR程序员.我试图找到允许我将变量设置为特定值的语法,只有先前未分配.基本上我想要:
__CODE__
__CODE__
Anu*_*yal 84
您应该将变量初始化为None,然后检查它:
var1 = None
if var1 is None:
var1 = 4
Run Code Online (Sandbox Code Playgroud)
哪一行可以写成:
var1 = 4 if var1 is None else var1
Run Code Online (Sandbox Code Playgroud)
或使用快捷方式(但建议检查无)
var1 = var1 or 4
Run Code Online (Sandbox Code Playgroud)
或者,如果你没有任何分配给变量的变量名称不存在,因此稍后使用它会引发NameError
,你也可以使用这些知识做这样的事情
try:
var1
except NameError:
var1 = 4
Run Code Online (Sandbox Code Playgroud)
但我会建议反对.
Sin*_*ion 29
这是一种非常不同的编程风格,但我总是试图重写看起来像的东西
bar = None
if foo():
bar = "Baz"
if bar is None:
bar = "Quux"
Run Code Online (Sandbox Code Playgroud)
进入:
if foo():
bar = "Baz"
else:
bar = "Quux"
Run Code Online (Sandbox Code Playgroud)
也就是说,我努力避免某些代码路径定义变量但其他代码路径没有定义变量的情况.在我的代码中,永远不会有一个导致定义变量集模糊的路径(事实上,我通常更进一步,确保类型是相同的,无论代码路径如何).这可能仅仅是个人品味的问题,但我发现这种模式虽然在我写作时有点不那么明显,但是当我稍后阅读它时更容易理解.
uba*_*dub 25
var1 = var1 or 4
Run Code Online (Sandbox Code Playgroud)
这可能有的唯一问题是,如果var1是假值,如False或0或[],它将选择4.这可能是一个问题.
l__*_*__l 15
我也来自Ruby,所以我喜欢语法foo ||= 7
.
这是我能找到的最接近的东西.
foo = foo if 'foo' in vars() else 7
Run Code Online (Sandbox Code Playgroud)
我见过人们这样做是为了一个字典:
try:
foo['bar']
except KeyError:
foo['bar'] = 7
Run Code Online (Sandbox Code Playgroud)
Upadate: 不过,我最近发现了这个宝石:
foo['bar'] = foo.get('bar', 7)
Run Code Online (Sandbox Code Playgroud)
如果您喜欢,那么对于常规变量,您可以执行以下操作:
vars()['foo'] = vars().get('foo', 7)
Run Code Online (Sandbox Code Playgroud)
小智 9
这里的单行解决方案:
var1 = locals().get("var1", "default value")
Run Code Online (Sandbox Code Playgroud)
NameError
该解决方案将设置var1
为default value
ifvar1
尚未定义,而不是具有。
下面是它在 Python 交互式 shell 中的样子:
>>> var1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'var1' is not defined
>>> var1 = locals().get("var1", "default value 1")
>>> var1
'default value 1'
>>> var1 = locals().get("var1", "default value 2")
>>> var1
'default value 1'
>>>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
131590 次 |
最近记录: |