函数结构中的参数理解——《python学习手册》笔记之4

函数结构中的参数理解——《python学习手册》笔记之4

计算机语言的函数和数学中的函数,真还不是一回事情。至少在python中,我就有这种感觉。所以这世界上完全相同的一个词,含义差别竟然可以隔得很远很远。
那么python中的函数是个什么东西呢?且待我我以python 学习手册中的一个函数实例“def changer(a,b):”为例,开始来理解函数吧。因为函数也许是python中最重要的工具,内容也特别丰富,手册一书中的篇幅达到近200页,我把侧重点放在函数的参数这个点上。仅仅参数这个点,其实内容也极为丰富,我这个短短的学习笔记,大概只是这个点中的微粒了。

标题一、python函数基本结构

可以看到,在函数“def changer(a,b):”中,我们所看到的,
首先是一个定义标志def:def
一个函数定义标志,就是表示这个代码行首的def,引导出一个由用户定义的函数对象,这个对象包括函数名和函数的参数,以及由此而导出的函数执行过程。
然后是一个函数名称name:changer
字符changer是一个函数的名称。这个名称常用来表明函数在准备干些什么,如果我起名print-two,这通常表明用户用这个名称总会与“打印”print有点关系,如果我起名changer,在用户心目中,这个名称通常会与“改变”change这个动作有点关系。如果我只用一个f来表示函数名称,那大概是泛泛的一个函数例子而已,名称f就只有函数最为基本的含义了。
第三个构件是参数arguement:(a,b)
有时为空,但通常会有字符在其中,这个字符就是函数的参数。函数的功能是由函数的参数来体现的,在python中,一个函数的参数,总是在函数名称之后的圆括号中。这个圆括号中给出的字符,就是python函数中的参数。
第四个构件是冒号colon:它是函数命名的结束符号冒号:
函数的冒号只是表示函数的命名完成了,冒号导引着函数体的出现。冒号之后,这是函数的第五个构件。
第五个构件是函数体function body:函数体
它描述该函数具体功能,也就是用户要求这个函数所作的事情。
函数体的实例:

def f(a): #这为函数四结构,以下则为函数体。
… a = 22 #函数体起始行

b = ‘good number’
f(b) #这是在调用函数f,但将参数换为b。
print(b)
good number #函数体结束行。

这个函数表明,函数参数值是可变换的,教材称作参数a传递给参数b,但函数名f则共享。这大概也从一个角度表明,函数这个工具,在python中的作用巨大。

标题二、一个changer函数实例

>>> def changer(a,b):
...     a = 2
...     b[1] = 'good number'
...
>>> X = 4
>>> L = [4,5]
>>> changer(X,L)         #将a,b参数改为X,L参数,名不变,调用同名函数changer。
>>> X, L
(4, [4, 'good number'])

这是一个名为changer的函数,有点改变对象的意味在内,但改变之中显然如同前例一样,有共享的东西,那就是共享一个函数changer。这个函数的参数,则为a,b两个字符。从这个简短函数中,我们可以看到python函数的哪些基本观念呢?函数的每一个构件都大有话可说,但文字的野心不能太大。知识的积累从来都是如涓滴之漏,累而积之,方能水滴石穿。还是集中到参数这个构件之中,参数之外的内容姑且忽略。

标题三、changer函数的两对参数“a和b”与“X和L”的自然语言理解

函数changer原有两个参数(a,b),这两个参数也是两个名称,但却是可以赋值的名称,与函数的那个changer名称似乎不一样。不过,对参数名称的赋值似乎与变量的赋值有点不一样,它和对象引用甚有关联,却与变量作用域无关。
参数a是函数作用域内的局部变量,当它变为另一个完全不同的对象时,并没有改变调用这个函数的调用者的作用域,显然,参数a的赋值是数字,其后的参数X的赋值也是数字。这两种赋值,似乎都是绑定在数字对象之中。
而参数b呢,与a一样,也是一个局部变量名,给它赋值的却是一个可变对象,一个列表,方括弧中的数字序列构成一个列表。列表与字符串不同,它是可变的。而且这个列表中的可变对象不是一个数字,而是一个字符串。所以,这个对于参数的赋值是函数调用者看中的另一个对象类型,不与参数a同类的类型。于是,changer函数的第二次参数L,就在原参数位置上让对象发生改变,但保持了列表类型,将列表中的字符串变成了数字。参数b变为参数L,b的列表赋值变成了L的[4,5]。这样赋值的结果,就会在返回后对于L的值产生影响。从结果中可知,调用执行后,X保持了它所给定的赋值4,但L的结果却有点意思,它取用了L列表中的零位数字4,却没有取1位数字5。列表中的数字5,被b的赋值 'good number’给取代了。
这是一个有趣的结果,L被调用后竟然在后台悄然地改变了列表的内容。这被看作是,作为另一个列表的L,它在调用时,同时充当了changer函数的输入和输出。不过这一点我依然很困惑,究竟是一个什么样的功能,让调用者对于L参数做这样的一个改变的呢?保持它的一部分,改变它的另一部分。
这大概就是python的魅力,继续涓滴之漏,累而积之,终会有弄明白的一天。

猜你喜欢

转载自blog.csdn.net/weixin_41670255/article/details/113645842