1

在 Ruby 中,如果你想有条件地设置变量的值,你可以这样做:

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

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

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

4

2 回答 2

3

您会收到语法错误,因为 python或运算符的语法不同,您需要使用以下方法None明确要求 Python从字典查找中返回:.get()

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']而不是myhash['baz']

于 2012-10-06T16:24:35.150 回答
0
foo = myhash.get('bar', myhash['baz'])

如果“baz”键不存在,这确实会引发错误,但无论如何我都会认为这是一个错误,并且不希望语言将其静音。如果第二项也是可选的并且您希望None作为最终后备,您也可以.get用于第二次查找。

于 2012-10-06T16:24:49.177 回答