我正在使用一个函数来查找与给定日期最匹配的集合中的字符串。我决定使用类似CSS选择器的评分系统,因为它具有相同的特异性概念。
一部分是计算最低分数。如果我正在寻找一个日期(年月日),那么最低分为100.如果我正在寻找一个月(仅一个月和一年),那么它是10,如果我只有一年,那么它是1:
minscore = 1
if month: minscore = 10
if day: minscore = 100
我对Python很陌生,所以我不知道所有的技巧。我怎样才能使这更多(最多)Pythonic?
答案 0 :(得分:3)
坚持易于理解的代码:
if day:
minscore = 100
elif month:
minscore = 10
else:
minscore = 1
答案 1 :(得分:3)
稀疏优于密集;)
minscore = 1
if month:
minscore = 10
elif day:
minscore = 100
这也在PEP 8中引用:
复合语句(同一行上的多个语句)是 一般都气馁。
是:
if foo == 'blah':
do_blah_thing() do_one() do_two() do_three()
而不是:
if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three()
我猜一个条件语句(即三元表达式)可能是最好的pythonic"的方法,但我认为来自Python的Zen的引用会很好。
答案 2 :(得分:1)
您可以使用ternary expression:
minscore = 100 if day else 10 if month else 1
来自pep-308(条件表达式):
激励用例是容易出错的尝试的普遍存在 使用“和”和“或”来实现相同的效果。
答案 3 :(得分:0)
愚蠢的我...因为我从一个更复杂(错误)的minscore算法开始,我起初没有看到答案。我认为这很不错:
minscore = day and 100 or month and 10 or 1