python赋值操作和传参方式
创始人
2024-05-30 06:50:41
0

在看django源码的时候,无意中看到这么一个操作,上代码:

def set_value(dictionary, keys, value):"""Similar to Python's built in `dictionary[key] = value`,but takes a list of nested keys instead of a single key.set_value({'a': 1}, [], {'b': 2}) -> {'a': 1, 'b': 2}set_value({'a': 1}, ['x'], 2) -> {'a': 1, 'x': 2}set_value({'a': 1}, ['x', 'y'], 2) -> {'a': 1, 'x': {'y': 2}}set_value({'a': 1}, ["x", "y", "z"], 2) -> {'a': 1, 'x': {'y': {'z': 2}}}"""if not keys:dictionary.update(value)returnfor key in keys[:-1]:if key not in dictionary:dictionary[key] = {}dictionary = dictionary[key]dictionary[keys[-1]] = value

乍看之下,一脸懵逼,尤其看到代码后三行的时候,发现 dictionary 都被赋值为 {} 了,为啥最终传进去的 dictionary 参数变成了合成后的字典对象。

然后去debug啊,陷入思考中。突然醒悟,python的参数传递方式和赋值操作。

python的传参方式

Python参数传递采用的是 传对象引用 的方式。实际上,这种方式相当于 传值传引用 的一种综合。

如果函数收到的是一个 可变对象(比如字典 或者列表) 的引用,就能修改对象的原始值——相当于通过 传引用 来传递对象。

如果函数收到的是一个 不可变对象(比如数字、字符或者元组) 的引用,就不能直接修改原始对象——相当于通过 传值 来传递对象。

赋值操作

表达式: x = value。意思就是将 value 赋值给变量 xx 是变量名,python会为其分配内存空间,地址为 id(x),值是 value


接下来说开始贴出的代码,因为 dictionary = dictionary[key] 相当于将 dictionary[key] 赋值给了新的变量 dictionary,这个 dictionary 并不等同于参数中的那个 dictionary 。「因为python对可变对象的参数传递是一种引用传递。dictionary 只是代表一个参数名称而已。虽然被重新指向了新的内存地址,但传参进来的那个 dictionary 本身并未变化」。

所以 dictionary = dictionary[key] 中等号左侧的 dictionary 是一个新的变量名称,因为其内存地址等于 dictionary[key]dictionary[keys[-1]] = value 的操作也只是针对新变量 dictionary 的操作,也就等价于对 dictionary[key] 的操作。

总结

  • python的赋值操作也就是将某个值赋值给一个 变量名字。这个变量名字被赋值,将开辟新的内存空间。
  • python的参数传递方式是一种 值传递引用传递 的一种综合。

相关内容

热门资讯

汽车是安卓系统嘛,安卓系统在智... 你有没有想过,汽车里那个神奇的操作系统,是不是和安卓手机里的一样呢?没错,今天咱们就来聊聊这个话题—...
网易狼人杀 安卓系统,体验指尖... 亲爱的玩家们,你是否曾在深夜里,手机屏幕前,与一群好友展开一场惊心动魄的“狼人杀”对决?今天,就让我...
小米安卓系统小主机,探索小米安... 你有没有想过,家里的电视、电脑、平板,甚至手机,其实都可以变成一个超级智能的娱乐中心?没错,这就是小...
卡刷安卓系统大全,全面解析各类... 你有没有想过,你的安卓手机可以像变形金刚一样,随心所欲地变换模样?没错,今天就要给你揭秘一个神奇的世...
安卓系统测试流畅度,安卓系统流... 你有没有发现,现在手机更新换代的速度简直就像坐上了火箭呢!尤其是安卓系统,每次更新都让人眼前一亮。但...
安卓系统50怎么升级,轻松迈向... 亲爱的安卓用户们,你是否也像我一样,对安卓系统的更新充满了期待?没错,就是那个让我们的手机焕然一新的...
安卓5.1.1操作系统,系统特... 你知道吗?在手机世界里,操作系统就像是个大管家,它不仅决定了手机的脸面,还掌管着手机的所有“家务事”...
手机安卓系统如果升级,体验流畅... 亲爱的手机控们,你们有没有发现,你的安卓手机最近是不是总在提醒你更新系统呢?别急,别急,今天就来给你...
安卓系统怎么禁止待机,安卓系统... 手机待机时间短,是不是让你头疼不已?别急,今天就来教你一招,让你的安卓手机告别“短命”模式,延长待机...
亿联安卓苹果系统,跨平台沟通新... 你知道吗?在科技飞速发展的今天,手机操作系统可是咱们日常生活中不可或缺的一部分。说起手机系统,亿联安...
smoothx安卓系统安装ap... 你有没有想过,为什么你的手机里总是乱糟糟的,各种app堆在一起,找起来费劲得很?别急,今天就来教你怎...
安卓系统图库在哪里,图库应用位... 你有没有发现,手机里的照片越来越多,有时候想找一张特定的照片,却像大海捞针一样困难?别急,今天就来告...
安卓7.0系统自带彩蛋,隐藏彩... 你知道吗?安卓7.0系统里竟然藏着不少小秘密,就像一颗颗隐藏的彩蛋,等着我们去发现。今天,就让我带你...
安卓系统好用的电池,好用到飞起... 你有没有发现,用安卓手机的时候,电池续航能力简直让人爱不释手啊!没错,今天咱们就来聊聊这个话题——安...
akg3003安卓系统,安卓系... 你有没有听说过AKG3003这款耳机?它最近在安卓系统用户中可是火得一塌糊涂呢!今天,就让我带你全方...
福州攻略系统和安卓,安卓用户必... 你打算去福州玩儿吗?别急,别急,让我这个福州通给你来点独家攻略,让你在福州的街头巷尾畅游无阻!这次,...
安卓游戏账号转系统,轻松实现账... 你有没有想过,有一天你的安卓游戏账号里堆满了金币、装备和等级,但是突然间,你发现这个账号已经不适合你...
安卓怎么下载原系统,安卓系统下... 你有没有发现,有时候安卓手机的系统更新后,新功能是挺多,但就是有点水土不服,用起来总觉得不如原来的系...
安卓系统和ios系统使用区别,... 你有没有发现,身边的朋友在使用手机时,总是对安卓系统和iOS系统争论不休?有时候,你甚至会被卷入这场...
安卓手机各系统名称,一网打尽各... 你有没有发现,现在安卓手机的世界里,系统名称可是五花八门,让人眼花缭乱呢?今天,就让我带你一起探索一...