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的参数传递方式是一种 值传递引用传递 的一种综合。

相关内容

热门资讯

麦芽安装安卓系统怎么安装,轻松... 你有没有想过,把安卓系统装到麦芽上,是不是就像给老式收音机配上蓝牙功能那么酷炫呢?想象你的麦芽设备瞬...
直板安卓系统手机游戏,直板安卓... 你有没有发现,最近手机游戏界又掀起了一股热潮?没错,就是那些让你一玩就停不下来的直板安卓系统手机游戏...
nolia是安卓系统吗,安卓系... 你有没有听说过Nolia这个操作系统?最近它在科技圈里可是小火了一把呢!很多人都在问,Nolia是安...
改善后的安卓系统,探索安卓系统... 你知道吗?最近安卓系统可是来了一次大变身,简直就像是换了个新灵魂一样! 作为一个紧跟科技潮流的数码达...
安卓系统小票机如何使用,轻松实... 你有没有想过,在繁忙的超市、商场或者餐厅,那些快速打印出小票的机器竟然是运行在安卓系统上的呢?没错,...
rm1090刷安卓系统 你有没有想过,给手机换个新系统,就像给它换了个新灵魂?今天,就让我带你一起探索如何用rm1090刷安...
369出行安卓系统,智慧导航新... 你有没有发现,最近出行软件界又掀起了一股热潮?没错,就是那个备受瞩目的369出行安卓系统!今天,就让...
韩国请假系统下载安卓版,享受便... 你知道吗?最近有个超级实用的韩国请假系统在咱们安卓用户中传得沸沸扬扬的!这个系统不仅操作简单,而且功...
支持安卓2.2系统的apk,兼... 你有没有想过,手机上的那些老古董应用,竟然还能在最新的安卓系统上运行?没错,就是那些支持安卓2.2系...
老款奥迪升级安卓系统 你有没有想过,你的老款奥迪也能焕发青春呢?没错,就是那个陪伴你走过风风雨雨的老伙计,现在有了升级安卓...
安卓系统只有英文翻译,Andr... 你知道吗?在咱们这个科技飞速发展的时代,手机已经成了我们生活中不可或缺的好伙伴。而说起手机,安卓系统...
安卓电视装苹果系统教程,轻松实... 亲爱的电视迷们,你是否曾梦想过在安卓电视上体验苹果系统的流畅与优雅?别再羡慕了,今天就来手把手教你如...
安卓系统换电池的方法 手机用久了,电池续航能力大不如前,是不是你也想给安卓手机来个“换血重生”呢?别急,今天就来手把手教你...
流量卡怎么解决安卓系统,高效使... 你是不是也遇到了这样的烦恼?手机流量不够用,但又不想每个月花大价钱买套餐?别急,今天就来给你支个招,...
dx80刷安卓系统 你有没有想过,给你的dx80手机换换口味呢?没错,就是那个一直默默陪伴你的dx80,今天咱们就来聊聊...
车载安卓系统安吉星卸载,轻松优... 你有没有发现,现在很多车载系统都开始流行起安卓系统了呢?尤其是安吉星,这个在汽车界小有名气的车载系统...
安卓手机系统ios系统升级,全... 你有没有发现,最近你的安卓手机又闹腾起来啦?没错,我又要来跟你聊聊这个让人又爱又恨的话题——安卓手机...
安卓系统7.0功略,深度解析全... 你有没有发现,你的安卓手机最近是不是变得有点儿不一样了?没错,它升级到了安卓系统7.0!这可不是一个...
安卓系统最新价格表,全面解析升... 你有没有发现,最近安卓系统的价格表又有了新变化?没错,这个话题可是让不少手机控们兴奋不已呢!今天,就...
安卓11q1系统,新特性与升级... 你知道吗?最近安卓系统又来了一次大更新,那就是安卓11Q1系统。这可不是一个小打小闹的更新,它可是带...