猿问

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

我有一个快速的问题。


通过像这样的返回 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()]

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


临摹微笑
浏览 167回答 2
2回答

阿晨1998

这与“pythonic”无关,而只是组成问题(请注意,这是固执己见的)。关于你的代码。方法#2 的优点是:所有相关代码Game都“封装”到单个类中(至少,它位于同一个地方)。这使得将来易于管理 - 轻松找到创建/变异的所有内容Game。方法#1 的优点是:你有更多的“纯”函数,以后可以重用,而且单独测试更容易一些。可重用性是一件好事——理论上——但过度思考并进行过早的优化是个坏主意,尤其是对于可读性的代价。您可以将两者结合起来做一件事:保持“无状态”甲板创建而不是改变对象状态,并将其调用__init__,但让您create_draw_stack成为类的一部分(即 make it @staticmethod)以指示堆栈在类范围内的某处使用, [到目前为止] 这Game是 逻辑的一部分。
随时随地看视频慕课网APP

相关分类

Python
我要回答