为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2021-10-12 15:52:20
我有一个快速的问题。通过像这样的返回 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()]我在网上找不到有关此特定问题的任何内容。是否有经验法则可以直观地解决此类问题?
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

这与“pythonic”无关,而只是组成问题(请注意,这是固执己见的)。

关于你的代码。方法#2 的优点是:所有相关代码Game都“封装”到单个类中(至少,它位于同一个地方)。这使得将来易于管理 - 轻松找到创建/变异的所有内容Game

方法#1 的优点是:你有更多的“纯”函数,以后可以重用,而且单独测试更容易一些。可重用性是一件好事——理论上——但过度思考并进行过早的优化是个坏主意,尤其是对于可读性的代价。

您可以将两者结合起来做一件事:保持“无状态”甲板创建而不是改变对象状态,并将其调用__init__,但让您create_draw_stack成为类的一部分(即 make it @staticmethod)以指示堆栈在类范围内的某处使用, [到目前为止] 这Game是 逻辑的一部分。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号