我正在阅读Python速成课程,并在做第8章(函数)中的任务.有一件事我不能理解.这是代码(#1):

def make_car(manufacturer, model_name, **car_info): 
    car_info['manufacturer'] = manufacturer
    car_info['model name'] = model_name
    return car_info

car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(car)

这是输出:

{'color': 'blue', 'tow_package': True, 'manufacturer': 'subaru', 'model name': 'outback'}

我得到了我需要的东西--一本词典.数据被存储在词典car_info中.

这是另一段代码(#2):

def make_car(manufacturer, model, **options):
    """Make a dictionary representing a car."""
    options = {
    'manufacturer': manufacturer.title(),
    'model': model.title(),
    }
    for option, value in options.items():
        options[option] = value

    return options

my_outback = make_car('subaru', 'outback', color='blue', tow_package=True)
print(my_outback)

我认为数据应该存储在选项中,输出应该与前一个相同.但事实并非如此.我明白了:

{'manufacturer': 'Subaru', 'model': 'Outback'}

谁能解释一下为什么代码#2不能提供与代码#1相同的结果?它必须将所有数据存储在options中(就像代码#1存储在car_info中一样).

此更改有帮助(代码#3):

def make_car(manufacturer, model, **options):
    """Make a dictionary representing a car."""
    car_dict = {
        'manufacturer': manufacturer.title(),
        'model': model.title(),
        }
    for option, value in options.items():
        car_dict[option] = value

    return car_dict

但我不明白为什么我们需要car_dict,如果在代码#1中,它与car_info一起工作得很好.

推荐答案

在代码块#2中,您写道:

def make_car(..., ..., **options): ...
    options = {
        ...
    }

也就是说,你接受了options分作为参数, 然后你忽视了它, Select 用一本全新的词典覆盖它. 别干那事.

将您的局部变量命名为其他名称, 例如car_dict个, 从代码块#3我们可以看到哪一个是赢家.

Python相关问答推荐

pandas DataFrame GroupBy.diff函数的意外输出

Gekko:Spring-Mass系统的参数识别

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

标题:如何在Python中使用嵌套饼图可视化分层数据?

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

什么相当于pytorch中的numpy累积ufunc

优化pytorch函数以消除for循环

将pandas Dataframe转换为3D numpy矩阵

OR—Tools CP SAT条件约束

joblib:无法从父目录的另一个子文件夹加载转储模型

在极中解析带有数字和SI前缀的字符串

python—telegraph—bot send_voice发送空文件

GPT python SDK引入了大量开销/错误超时

在电影中向西北方向对齐""

如何在一组行中找到循环?

jsonschema日期格式

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

Pandas:将值从一列移动到适当的列

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

在Django REST框架中定义的URL获得404分