Python允许您一次分配多个变量,如下所示:a, b = 1, 2
其工作方式是将赋值a, b的左侧视为一个元组,并将右侧元组1, 2中的每个元素分配给它。在
由于元组只能有一个元素,因此以下方法也适用:
^{pr2}$
多重赋值的右边不一定是元组。任何iterable都可以,只要两边的元素数相同: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。在
有两件事需要注意:在阅读代码时,逗号,很容易丢失。另一种方法是在左侧使用列表语法:[match] = (proj for proj in projects if proj["name"].strip() == project_name)
。。。也有同样的效果。
如果右侧是生成器表达式(或其他类型的iterator),则可以使用带有默认值的^{}:def find_project(project_name):
projects = get_projects()
it = (proj for proj in projects if proj["name"].strip() == project_name)
return next(it, None)
。。。更简短,更易读。