ITPub博客

首页 > 数据库 > 数据库开发技术 > 盘点一个Python代码调用的问题

盘点一个Python代码调用的问题

原创 数据库开发技术 作者:Python进阶者 时间:2024-12-26 09:00:00 0 删除 编辑
点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

今

日

鸡

汤

行至水穷处,坐看云起时。

大家好,我是Python进阶者。

一、前言

前几天在Python最强王者交流群【向阳】问了一个Python代码调试的问题。问题如下:

下面是具体的运行代码:

def tit_for_tat(history):
    
    if len(history) == 0:
        return 'silence'  # First round, choose silence
    else:
        return 'silence' if history[-1][1] == 'silence' else 'betray'


def rat(history):
    
    return 'betray'


def calculate_sentence(rounds, strategy_a, strategy_b):
    
    sentences_a = []
    sentences_b = []
    history = []

    for round in range(rounds):
        action_a = strategy_a(history)
        action_b = strategy_b(history)

        # Update the history
        history.append((action_a, action_b))

        # Determine sentences for this round
        if action_a == 'silence' and action_b == 'silence':
            sentences_a.append(1)
            sentences_b.append(1)
        elif action_a == 'betray' and action_b == 'silence':
            sentences_a.append(0)
            sentences_b.append(5)
        elif action_a == 'silence' and action_b == 'betray':
            sentences_a.append(5)
            sentences_b.append(0)
        else:  # Both betray
            sentences_a.append(2)
            sentences_b.append(2)

    # Calculate total sentences
    total_sentence_a = sum(sentences_a)
    total_sentence_b = sum(sentences_b)

    return total_sentence_a, total_sentence_b


# Define the number of rounds
rounds = 4

# Choose strategies for both prisoners
strategy_1 = tit_for_tat
strategy_2 = rat

# Calculate sentences
total_sentence_a, total_sentence_b = calculate_sentence(rounds, strategy_1, strategy_2)

# Output the results
print(f"Prisoner A (tit_for_tat) total sentence: {total_sentence_a} years")
print(f"Prisoner B (rat) total sentence: {total_sentence_b} years")

各位大神,这个文件是如何实现对函数 tit_for_tat 和 rat的调用传参的?
strategy_1 = tit_for_tat
strategy_2 = rat
调用语句没有传实参

这个问题应该怎么解决?

二、实现过程

这里【瑜亮老师】给了一个指导,如下所示:

strategy_1 = tit_for_tat strategy_2 = rat 这两个语句不是调用。只是函数引用或者把函数赋给变量strategy_1和strategy_2。

函数后面没有加括号就不是调用

你可以试试下面的代码就明白了。strategy_1 = tit_for_tat print(strategy_1)

当你打印strategy_1的时候会出现function,而不是运行函数tit_for_tat

【向阳】:谢谢瑜亮老师, 这两句都没用函数明啊,调用不是要函数名吗 action_a = strategy_a(history) action_b = strategy_b(history)

【向阳】:我好像有点理解了

strategy_1 = tit_for_tat strategy_2 = rat 这两句就是赋值 赋值后 calculate_sentence(rounds, strategy_1, strategy_2) 就是calculate_sentence(rounds, tit_for_tat, rat)

【瑜亮老师】:你看我截图那里,先运行绿色框内的函数,传进去3个参数,后面的两个参数就是两个函数。这两个函数在函数calculate_sentence中执行,执行的位置在黄色框那里。在黄色框中给函数加上了括号,并传递了参数history。

【瑜亮老师】:如果还不明白,你可以新建一个py文件,输入运行下面的代码:def a(): print("hello")

b=a print(b) print("---分割线---") print(b())

【瑜亮老师】:区别就是函数后面有没有括号。第一个print只能打印出来函数名,以及在内存中的位置。第三个print能调用并执行a函数,打印出来hello。

不知道你的代码是从哪里弄的。strategy_1 = tit_for_tat strategy_2 = rat 这两行代码在这个代码里是多此一举的。

直接传递函数名就行了,还再用个新的变量搞一下。

【向阳】:哈哈,AI大模型推荐的代码 就这两行多余的代码,我研究了半天 还是瑜老师的解释才明白 不过还是学习了,函数名直接传递,很熟体内再调用

【瑜亮老师】:其实不用把函数名作为参数传进去。直接在函数体内可以调用其他函数。你这个代码是独立的代码,不涉及任何其他的,只是函数之间的调用可以不用传递函数名。

也就是说,删掉那两行,删掉calculate_sentence函数中那两个参数,在calculate_sentence函数中直接调用tit_for_tat函数和rat函数即可。

顺利地解决了粉丝的问题。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python代码调试的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【向阳】提出的问题,感谢【瑜亮老师】给出的思路,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群】

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

原文作者:Python爬虫与数据挖掘;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2024-12-18

  • 博文量
    913
  • 访问量
    379390