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——参数传递的主要内容,如果未能解决你的问题,请参考以下文章