还有什么pythonic?更改就地或返回值

马塞尔·布拉施(Marcel Braasch)

我有一个快速的问题。

用返回的func初始化值,是否更像pythonic:

class Game:

    def __init__(self, AMOUNT_OF_PLAYERS = 2, AMOUNT_OF_CARDS = 7):
        self.draw_stack = create_draw_stack()
        self.play_stack = [self.draw_stack.pop()]

def create_draw_stack():
    VALUES = list(range(1, 10))
    COLORS = ["Red", "Blue", "Yellow", "Green"]
    return [Card(value, color) for value in VALUES for color in COLORS]

还是应该看起来像这样:

class Game:

    def __init__(self, AMOUNT_OF_PLAYERS = 2, AMOUNT_OF_CARDS = 7):
        self.draw_stack = []
        self.play_stack = []
        self.create_draw_stack()
        self.create_play_stack()

    def create_draw_stack(self):
        VALUES = list(range(1, 10))
        COLORS = ["Red", "Blue", "Yellow", "Green"]
        cards = [Card(value, color) for value in VALUES for color in COLORS]
        self.draw_stack = cards

    def create_play_stack(self):
        self.play_stack = [self.draw_stack.pop()]

我在网上找不到这个特定问题的任何内容。是否有经验法则可以直观地解决此类问题?

谢谢。

布鲁诺·德斯胡里尔斯

为了说明Slam用pythonic解决方案的答案:

class Game:

    VALUES = list(range(1, 10))
    COLORS = ["Red", "Blue", "Yellow", "Green"]

    @classmethod
    def create_draw_stack(cls):
        return  [Card(value, color) for value in cls.VALUES for color in cls.COLORS]       

    def __init__(self, players_count=2, cards_count=7):
        self.draw_stack = self.create_draw_stack()
        self.play_stack = [self.draw_stack.pop()]

另外,您问:

是否有经验法则可以直观地解决此类问题?

“直观”部分主要是经验问题(“经验”与“花时间做某事”不同-它还意味着阅读,实验,思考等)。

wrt /“经验法则”:

  • 高凝聚力:一个“单元”(可以是模块,类,方法或函数)应该只涉及一件事,而只能涉及一件事(有时,“一件事”可能很宽,但无论如何)
  • 局域性:可以一起使用的东西应该放在一起(这样一来,您不必在编辑器中打开十几个文件即可了解整个作品的工作方式)
  • 低耦合:一个“单位”应直接依赖于尽可能少的其他单位
  • 可读性:代码应尽可能清晰易读(好的,这里有一些主观部分)
  • 可测试性:该代码应易于隔离测试(参见“低耦合”)
  • 简便性:根据问题的复杂程度,代码应尽可能简单。
  • 易用性:您的“单元” API应该设计成尽可能容易地用于客户端代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章