You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动