python 代码中 'or default' 的需要是什么?
What is the need of 'or default' in this python code?
这是代码 all_jokes 是一个字典,其中有一些类别映射到笑话。
def select_joke(category):
jokes = all_jokes[category or 'default']
shuffle(jokes)
return jokes[0]
与许多其他语言一样,or
returns 如果第一个元素是 "truthy",则第二个元素。
在这种情况下,如果category
为0,或None,或空字符串等,我们得到all_jokes['default']
。否则,我们得到 all_jokes[category]
.
意思是,
if category
is false (or empty or None) use 'default' as key.
可能不知道其余代码,all_jokes
是一个包含 default
选项的字典。
Returns all_jokes
字典中 default
键的值,如果 category
的值不是 :
from random import shuffle
all_jokes = {
'joke1': ['This is joke1'],
'joke2': ['This is joke2'],
'default': ['This is default joke']
}
def select_joke(category):
jokes = all_jokes[category or 'default']
shuffle(jokes)
return jokes[0]
print("----------------------------------------")
print(f"input:{0} output:{select_joke(0)}")
print(f"input:{None} output:{select_joke(None)}")
print(f"input:{''} output:{select_joke('')}")
print("----------------------------------------")
输出:
----------------------------------------
input:0 output:This is default joke
input:None output:This is default joke
input: output:This is default joke
----------------------------------------
Python 的 and
和 or
运算符等效于以下 if 表达式:
# NB: These work as intended for boolean values.
(a or b) is (a if a else b)
(a and b) is (b if a else a)
def select_joke(category):
"""Equivalent to your code."""
jokes = all_jokes[category if category else 'default']
shuffle(jokes)
return jokes[0]
这允许可以接受 'default'
笑话的调用站点传入 ''
或 None
。 Python 当使用 or
代替匹配此模式的 if 表达式(用另一个假值替换另一个假值)时,代码往往看起来更漂亮,尤其是当您使用默认为假值的函数参数时。
作为旁注,您可以使用 random.choice
:
来简化您的函数
def select_joke(category=None):
return random.choice(all_jokes[category or 'default'])
select_joke() # category will be 'default'.
select_joke('default') # category will be 'default'.
select_joke(None) # category will be 'default'.
select_joke('') # category will be 'default'.
select_joke('puns') # category will be 'puns'.
这是代码 all_jokes 是一个字典,其中有一些类别映射到笑话。
def select_joke(category):
jokes = all_jokes[category or 'default']
shuffle(jokes)
return jokes[0]
与许多其他语言一样,or
returns 如果第一个元素是 "truthy",则第二个元素。
在这种情况下,如果category
为0,或None,或空字符串等,我们得到all_jokes['default']
。否则,我们得到 all_jokes[category]
.
意思是,
if
category
is false (or empty or None) use 'default' as key.
可能不知道其余代码,all_jokes
是一个包含 default
选项的字典。
Returns all_jokes
字典中 default
键的值,如果 category
的值不是
from random import shuffle
all_jokes = {
'joke1': ['This is joke1'],
'joke2': ['This is joke2'],
'default': ['This is default joke']
}
def select_joke(category):
jokes = all_jokes[category or 'default']
shuffle(jokes)
return jokes[0]
print("----------------------------------------")
print(f"input:{0} output:{select_joke(0)}")
print(f"input:{None} output:{select_joke(None)}")
print(f"input:{''} output:{select_joke('')}")
print("----------------------------------------")
输出:
----------------------------------------
input:0 output:This is default joke
input:None output:This is default joke
input: output:This is default joke
----------------------------------------
Python 的 and
和 or
运算符等效于以下 if 表达式:
# NB: These work as intended for boolean values.
(a or b) is (a if a else b)
(a and b) is (b if a else a)
def select_joke(category):
"""Equivalent to your code."""
jokes = all_jokes[category if category else 'default']
shuffle(jokes)
return jokes[0]
这允许可以接受 'default'
笑话的调用站点传入 ''
或 None
。 Python 当使用 or
代替匹配此模式的 if 表达式(用另一个假值替换另一个假值)时,代码往往看起来更漂亮,尤其是当您使用默认为假值的函数参数时。
作为旁注,您可以使用 random.choice
:
def select_joke(category=None):
return random.choice(all_jokes[category or 'default'])
select_joke() # category will be 'default'.
select_joke('default') # category will be 'default'.
select_joke(None) # category will be 'default'.
select_joke('') # category will be 'default'.
select_joke('puns') # category will be 'puns'.