0

我正在开发一个函数来查找集合中与给定日期最匹配的字符串。我决定使用类似于 CSS 选择器的评分系统来完成它,因为它具有相同的特异性概念。

一部分是计算最低分数。如果我正在寻找一个日期(年月日),那么最低分数是 100。如果我正在寻找一个月(只是月和年),那么它是 10,如果我只有一年,那么它是1:

minscore = 1
if month: minscore = 10
if day: minscore = 100

我对 Python 很陌生,所以我不知道所有的技巧。我怎样才能使它更(最)Pythonic?

4

4 回答 4

3

坚持易于阅读的代码:

if day:
    minscore = 100
elif month:
    minscore = 10
else:
    minscore = 1
于 2013-08-12T06:23:01.467 回答
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 of Python 会很好。

于 2013-08-12T06:23:43.733 回答
1

您可以使用三元表达式

minscore = 100 if day else 10 if month else 1

来自pep-308(条件表达式):

激励用例是使用“and”和“or”来实现相同效果的容易出错的尝试的普遍存在。

于 2013-08-12T06:19:13.997 回答
0

愚蠢的我......因为我从一个更复杂(错误)的 minscore 算法开始,我一开始没有看到答案。我认为这很好:

minscore = day and 100 or month and 10 or 1
于 2013-08-12T06:20:30.930 回答