python变量的ruby风格条件设置

时间:2012-10-06 16:22:15

标签: python python-2.7

在Ruby中,如果要有条件地设置变量的值,可以执行以下操作:

foo = myhash[ "bar" ] || myhash[ "baz" ]

如果存在,它会将foo的值设置为myhash [“bar”],否则会将foo设置为myhash [“baz”]。如果两者都不存在,则将foo设置为nil。

在Python中,如果尝试这种类型的赋值,则会出现语法错误。此外,Python将在myhash [“baz”]上抛出KeyError,而不是将其设置为None。在我看来,在Python中有条件地设置foo的唯一方法是编写一个大的多行条件语句,但我真的很想在Ruby这样的行中执行此操作。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

您收到语法错误,因为python or operator的语法不同,您需要明确要求Python使用.get() method从字典查找中返回None

foo = myhash.get('bar') or myhash.get('baz')

由于.get()采用默认值而非查找密钥(默认为None),因此您还可以将其拼写为:

foo = myhash.get('bar', myhash.get('baz'))

这具有额外的好处,如果myhash['bar']为false-y(在布尔上下文中计算为False,例如空序列或数字0),它仍将返回myhash['bar']而不是{{ 1}}。

答案 1 :(得分:0)

foo = myhash.get('bar', myhash['baz'])

如果'baz'键不存在,这确实会引发错误,但我仍然认为这是一个错误,并且不希望语言保持沉默。如果第二项也是可选项,并且您希望None作为最终回退,则还可以使用.get进行第二次查找。