已有183人关注
书163页例题代码相关疑问(资源包\MR\Code\11\01)
发表在Python图书答疑 2020-02-25 悬赏:1 学分 《Python从入门到项目实践》第11章 用函数实现模块化程序设计 162页-163页
是否精华
版块置顶:

根据162页定义,形式参数为定义函数时括号中的参数,实际参数为调用函数时括号中的参数。按照以上理解,163例题中,参数obj为形式参数,被赋值的mot为实际参数。在进行值传递时表明已经调用了函数demo,调用函数的括号中不是实际参数mot吗?也没有形参啊?改变形参是从哪里体现的呢?定义的函数demo第二步是obj +=obj,在值传递的时候是不就变成了mot += mot?mot不是被赋值字符串了吗?字符串不是可以相加吗?为何这里又不相加了?

求大神解答!

分享到:
精彩评论 2
无语_mrkj
学分:3155 LV11
2020-02-28
沙发

这里的改变形式参数是指在函数中对函数的参数(也称为形式参数)的值进行修改。

定义的函数demo第二步是obj +=obj,在值传递的时候是不就变成了mot += mot?

这句话的理解应该是:在进行值传递时,obj = obj+obj,而这里面的3个obj的值不是一样的,第一个是形式参数obj,它的值是两个obj相加,也就是mot+mot,但是它们相加的结果,只是赋值给了变量ojb,并不能保存到实际参数mot中。

yuxuan262
学分:140 LV3
2020-02-28
板凳

无语_mrkj 发表于2020-02-28 15:12

这里的改变形式参数是指在函数中对函数的参数(也称为形式参数)的值进行修改。

定义的函数demo第二步是obj +=obj,在值传递的时候是不就变成了mot += mot?

这句话的理解应该是:在进行值传递时,obj = obj+obj,而这里面的3个obj的值不是一样的,第一个是形式参数obj,它的值是两个obj相加,也就是mot+mot,但是它们相加的结果,只是赋值给了变量ojb,并不能保存到实际参数mot中。

我运行了以下代码:

def demo(obj):

      print(obj)
      obj = [1, 2, 3]
      obj += obj
      print(obj)
list = ['邓肯', '吉诺比利', '帕克']
demo(list)
print(list)

得到结果如下:

['邓肯', '吉诺比利', '帕克']
[1, 2, 3, 1, 2, 3]
['邓肯', '吉诺比利', '帕克']


此时实参是可变对象(列表)啊?为何我改变了形参的值后,实参的值不改变?这个时侯是值传递还是引用传递?

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照