小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

盤點(diǎn)一個(gè)Python代碼調(diào)用的問題

 Python進(jìn)階者 2024-12-26 發(fā)布于廣東
行至水窮處,坐看云起時(shí)。

大家好,我是Python進(jìn)階者。

一、前言

前幾天在Python最強(qiáng)王者交流群【向陽】問了一個(gè)Python代碼調(diào)試的問題。問題如下:

下面是具體的運(yùn)行代碼:

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")

各位大神,這個(gè)文件是如何實(shí)現(xiàn)對函數(shù) tit_for_tat 和 rat的調(diào)用傳參的?
strategy_1 = tit_for_tat
strategy_2 = rat
調(diào)用語句沒有傳實(shí)參

這個(gè)問題應(yīng)該怎么解決?

二、實(shí)現(xiàn)過程

這里【瑜亮老師】給了一個(gè)指導(dǎo),如下所示:

strategy_1 = tit_for_tat strategy_2 = rat 這兩個(gè)語句不是調(diào)用。只是函數(shù)引用或者把函數(shù)賦給變量strategy_1和strategy_2。

函數(shù)后面沒有加括號就不是調(diào)用

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

當(dāng)你打印strategy_1的時(shí)候會出現(xiàn)function,而不是運(yùn)行函數(shù)tit_for_tat

【向陽】:謝謝瑜亮老師, 這兩句都沒用函數(shù)明啊,調(diào)用不是要函數(shù)名嗎 action_a = strategy_a(history) action_b = strategy_b(history)

【向陽】:我好像有點(diǎn)理解了

strategy_1 = tit_for_tat strategy_2 = rat 這兩句就是賦值 賦值后 calculate_sentence(rounds, strategy_1, strategy_2) 就是calculate_sentence(rounds, tit_for_tat, rat)

【瑜亮老師】:你看我截圖那里,先運(yùn)行綠色框內(nèi)的函數(shù),傳進(jìn)去3個(gè)參數(shù),后面的兩個(gè)參數(shù)就是兩個(gè)函數(shù)。這兩個(gè)函數(shù)在函數(shù)calculate_sentence中執(zhí)行,執(zhí)行的位置在黃色框那里。在黃色框中給函數(shù)加上了括號,并傳遞了參數(shù)history。

【瑜亮老師】:如果還不明白,你可以新建一個(gè)py文件,輸入運(yùn)行下面的代碼:def a(): print("hello")

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

【瑜亮老師】:區(qū)別就是函數(shù)后面有沒有括號。第一個(gè)print只能打印出來函數(shù)名,以及在內(nèi)存中的位置。第三個(gè)print能調(diào)用并執(zhí)行a函數(shù),打印出來hello。

不知道你的代碼是從哪里弄的。strategy_1 = tit_for_tat strategy_2 = rat 這兩行代碼在這個(gè)代碼里是多此一舉的。

直接傳遞函數(shù)名就行了,還再用個(gè)新的變量搞一下。

【向陽】:哈哈,AI大模型推薦的代碼 就這兩行多余的代碼,我研究了半天 還是瑜老師的解釋才明白 不過還是學(xué)習(xí)了,函數(shù)名直接傳遞,很熟體內(nèi)再調(diào)用

【瑜亮老師】:其實(shí)不用把函數(shù)名作為參數(shù)傳進(jìn)去。直接在函數(shù)體內(nèi)可以調(diào)用其他函數(shù)。你這個(gè)代碼是獨(dú)立的代碼,不涉及任何其他的,只是函數(shù)之間的調(diào)用可以不用傳遞函數(shù)名。

也就是說,刪掉那兩行,刪掉calculate_sentence函數(shù)中那兩個(gè)參數(shù),在calculate_sentence函數(shù)中直接調(diào)用tit_for_tat函數(shù)和rat函數(shù)即可。

順利地解決了粉絲的問題。

如果你也有類似這種Python相關(guān)的小問題,歡迎隨時(shí)來交流群學(xué)習(xí)交流哦,有問必答!

三、總結(jié)

大家好,我是Python進(jìn)階者。這篇文章主要盤點(diǎn)了一個(gè)Python代碼調(diào)試的問題,文中針對該問題,給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問題。

最后感謝粉絲【向陽】提出的問題,感謝【瑜亮老師】給出的思路,感謝【莫生氣】等人參與學(xué)習(xí)交流。

【提問補(bǔ)充】溫馨提示,大家在群里提問的時(shí)候。可以注意下面幾點(diǎn):如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點(diǎn)demo數(shù)據(jù)來(小文件的意思),然后貼點(diǎn)代碼(可以復(fù)制的那種),記得發(fā)報(bào)錯(cuò)截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個(gè).py文件就行。


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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多