我对Python语法不太熟悉,我想知道是否有人能向我解释变量match
是如何处理这个函数中的for
表达式中的字符串的:
def find_project(project_name):
projects = get_projects()
try:
match, = (proj for proj in projects if proj["name"].strip() == project_name)
return match
except ValueError:
return None
发布于 2017-03-10 13:25:44
Python允许您一次分配多个变量,如下所示:
a, b = 1, 2
它的工作方式是将赋值a, b
的左侧作为一个元组,并将右边的元组1, 2
中的每个元素分配给它。
由于元组可以只有一个元素,下面的内容也可以工作:
a, = 1,
多个作业的右边不一定是元组。只要两边的元素数量相同,任何可迭代都可以:
a, b, c = "three little pigs".split()
如果元素数不匹配:
a, b, c = "oh", "no"
..。你得到了一个ValueError
ValueError: not enough values to unpack (expected 3, got 2)
将以上所有内容结合在一起,那么,您的功能:
def find_project(project_name):
projects = get_projects()
try:
match, = (proj for proj in projects if proj["name"].strip() == project_name)
return match
except ValueError:
return None
..。在生成器表达式上迭代
(proj for proj in projects if proj["name"].strip() == project_name)
..。如果结果有一个元素,则将该元素分配给match
。如果没有,则引发ValueError
(并被except
子句捕获),不发生赋值,并返回None
。
需要注意的两点:
https://stackoverflow.com/questions/42726053
复制