开发者社区> 问答> 正文

python:修改参数而不创建新对象

我希望games在check()调用时更新,但是一旦“游戏+ = 1”运行,它就会创建一个新对象,而不是修改参数。但是我想修改这个论点,那我该怎么做呢?

现在wins,gamescheck()返回后重置为0

def check(...games, wins,...):
   ...
        games += 1
        wins += 1 if winner == 'agent' \
            else 0 if winner == 'bot' \
            else 0.5
        ...
        return 1
    return 0

def play_bot():
    games = 0
    wins = 0
    ...
    if check(...games, wins,...): player = choice([0,1])
    ...

展开
收起
游客gsy3rkgcdl27k 2019-09-06 23:25:40 678 0
2 条回答
写回答
取消 提交回答
  • 如果你想这样做的话,

    你可以把函数的games = []

    这样就可以了. 但是要考虑清楚作用域的问题哈.....

    2019-11-18 11:11:39
    赞同 展开评论 打赏
  • 最简单的方法是简单地从check函数中返回所需的信息:

    def check(node, winner):

    if node:

    return 1 if winner == 'agent' else 0 if winner == 'bot'
    

    else 0.5

    Return None by default.

    def play_bot():

    games = 0

    wins = 0

    win = check(node, winner)

    if win is not None:

    games += 1
    
    wins += win
    
    player = choice([0,1])
    

    如果你真的需要去OOP路由,你可以传递一个对象,check以便该函数可以根据需要修改它:

    class Record:

    def init(self):

    self.games = self.wins = 0
    

    def check(node, record, winner): if node:

    record.games += 1
    
    record.wins += 1 if winner == 'agent' else 0 if winner == 'bot' else 0.5
    
    return True
    

    return False def play_bot(): record = Record()

    if check(node, record, winner):

    player = choice([0,1])
    

    第三种解决方案是使用全局变量,但我真的不建议这样做。

    2019-09-07 20:59:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载