首页 > 数据库 > 数据库开发技术 > 盘点一个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爬虫与数据挖掘;如有侵权,请联系管理员删除。