使用字典选择执行函数时全部函数触发执行的问题排查
问题分析与解决方案
嘿,刚接触Python遇到这个问题太正常啦!你现在的代码里,字典的每个值不是函数本身,而是你直接调用函数后得到的返回值——因为你给每个函数名加了(),这会让Python在创建字典的那一刻就把所有函数都执行一遍,不管你最后选的是哪个race。
问题根源
比如你写"Dragonborn": self.character_race.select_dragonborn()的时候,Python看到括号就会立刻执行select_dragonborn(),把它的返回值存在字典里,而不是把这个函数“存起来备用”。所以每次调用set_race,不管传什么参数,所有种族的选择函数都会先跑一遍。
修复后的代码
你需要把字典里的值改成函数的引用(也就是不带括号的函数名),等需要执行的时候再加上括号调用它:
def set_race(self, race): race_list = { "Dragonborn": self.character_race.select_dragonborn, "Dwarf": self.character_race.select_dwarf, "Elf": self.character_race.select_elf, "Gnome": self.character_race.select_gnome, "Half-Elf": self.character_race.select_halfelf, "Halfling": self.character_race.select_halfling, "Half-Orc": self.character_race.select_halforc, "Human": self.character_race.select_human, "Tiefling": self.character_race.select_tiefling } # 现在才调用选中的函数 race_list[race]()
额外小建议
为了避免用户输入不存在的种族导致KeyError,你可以用get()方法做个容错处理,比如:
selected_function = race_list.get(race) if selected_function: selected_function() else: print(f"抱歉,不存在名为 {race} 的种族!")
这样代码会更健壮哦~
内容的提问来源于stack exchange,提问作者Bolwic
相关产品推荐
相关产品推荐

