Python函数引用技术咨询:获取返回值与参数传递问题
解决你的Python函数调用与参数传递问题
嘿,完全不用抱歉!学编程就是从这些基础问题入手的,咱们一步步把问题解决掉~
你的核心问题有两个:如何保存create_dict()的返回值,以及如何给print_dict()传入必要的字典参数。咱们先看问题根源:你用字典存储函数引用的思路很棒,但当前的写法没有考虑到不同函数的参数需求和返回值处理,所以咱们调整一下逻辑就行。
1. 保存create_dict()的返回值
create_dict()会返回一个新创建的字典,但你之前的调用do['C']()只是执行了函数,没有把返回的字典存下来。咱们需要在主程序里维护一个变量来保存这个字典,比如my_dict。
2. 给print_dict()传递参数
print_dict()需要接收一个字典作为参数,但原来的do['P']()调用没有传参,会触发TypeError。我们可以通过两种方式解决:
方式一:用lambda包装函数(保持字典映射的风格)
修改你的file2主程序,用lambda函数来处理参数传递和返回值保存:
from file1 import * # 初始化存储字典的变量 my_dict = {} # 调整函数映射,用lambda处理参数和返回值 do = { 'C': lambda: globals().update({'my_dict': create_dict()}), # 保存返回的字典 'P': lambda: print_dict(my_dict), # 传入字典参数 'E': fin } while True: rep = input('choice?\n' 'C-reate dict\n' 'P-rint dict\n' 'E-xit\n').strip().upper() # 处理用户输入的大小写和空格 if rep in do: do[rep]() else: print("无效选项,请选择C、P或E!")
方式二:直接在循环里判断(更直观,适合新手)
如果觉得lambda有点绕,直接用条件判断会更清晰:
from file1 import * # 初始化存储字典的变量 my_dict = {} while True: rep = input('choice?\n' 'C-reate dict\n' 'P-rint dict\n' 'E-xit\n').strip().upper() if rep == 'C': # 保存create_dict返回的字典 my_dict = create_dict() elif rep == 'P': # 给print_dict传入存储的字典 print_dict(my_dict) elif rep == 'E': fin() else: print("无效选项,请重新输入!")
额外小优化(可选)
你可以修改file1里的create_dict(),让它支持往已有字典里添加条目(而不是每次都创建新字典),这样更实用:
def create_dict(existing_dict=None): # 如果没有传入字典,就新建一个 dico = existing_dict if existing_dict is not None else {} name = input('请输入姓名: ') age = input('请输入年龄: ') coef = input('请输入系数: ') dico[name] = (age, coef) return dico
这样在主程序里选C的时候,可以改成my_dict = create_dict(my_dict),就能不断添加新的条目啦~
内容的提问来源于stack exchange,提问作者eric paris




