我怎样才能让这更像Pythonic?

时间:2013-08-12 06:18:03

标签: python coding-style

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

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

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

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

4 个答案:

答案 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