python系列教程193——参数传递

Posted 人工智能AI技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程193——参数传递相关的知识,希望对你有一定的参考价值。


声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的​​教学网站​​。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

为了说明参数的工作方式,先看看如下的代码:

>>>def f(a):     # a is assigned to (references) passed object

... a = 99 # Changes local variable a only

...

>>>b = 88

>>>f(b) # a and b both reference same 88 initially

>>>print(b) # b is not changed

88

在这个例子中,在使用f(b)调用函数的时候,变量a赋值了对象88,但是,a只是存在于调用的函数之中。在函数中修改a对于调用函数的地方没有任何影响。

对函数中的一个参数名的赋值(例如,a=99)不会影响到函数调用作用域中的b这样的一个变量。

但是当参数传递像列表和字典这样的可修改对象的时候,对这样的对象的原处修改在函数退出后依然有效,并由此影响到调用者。如下例所示

>>>def changer(a,b):    # Arguments assigned references to objects

... a = 2 # Changes local names value only

... b[0] = spam # Changes shared object in-place

...

>>>X = 1

>>>L = [1,2] # Caller

>>>changer(X,L) # Pass immutable and mutable objects>>>X,L # X is unchanged,L is different!

(1,[spam,2])

在这段代码中,changer函数给参数a赋值,并给参数b所引用的一个对象元素赋值。这两个函数内的赋值从语法上仅有一点不同,但是从结构上看却大相径庭。
•因为a是在函数作用域内的本地变量名,第一个赋值对函数调用者没有影响,它仅仅把本地变量a修改为引用一个完全不同的对象,并没有改变调用者作用域中的名称X的绑定。
•b也是一个本地变量名,但是它被传给了一个可变对象(在调用者作用域中叫做L的列表)。所以对函数中b[0]进行赋值的结果会在函数返回后影响L的值。实际上,changer中的第二条赋值语句没有修改b,我们修改的是b当前所引用的对象的一部分。


以上是关于python系列教程193——参数传递的主要内容,如果未能解决你的问题,请参考以下文章

python系列教程193——参数传递

python系列教程197——默认参数

python系列教程197——默认参数

python系列教程196——参数匹配

python系列教程196——参数匹配

python系列教程198——任意数目的参数