写在之前
函数的参数,我在之前的文章中也提到过,参数这个东西我感觉还是比较有话题的,你可能在某些地方听说过诸如 “形参”,“实参” and so on...那么这些到底是什么呢?下面我们就来详细的说一下函数的参数和变量的问题。
参数 & 变量
我们用 def 来定义函数,函数名后面的括号里如果有变量的话,它们通常被成为 “形参”;在我们调用的时候,给函数提供的值我们称它为 “实参”,或者叫 “参数” 也是 ok 的。其实我觉得我们完全可以简化一下,可以笼统的把函数括号里的变量叫做 “参数”,当然叫做 “变量” 也是可以的,只要你知道指的是什么就好了。
如果非要有人较真,就是要区分参数和变量,我在这里引用一段网上看到的 “微软网站上关于此问题的说明”,你可以尝试看一下,标题叫 -- 参数和变量的差异(Visual Basic),下面的图片是我从官网上的截图:
如果你真的硬着头皮看完了上述的内容,你就会发现里面的一些关键词:参数,变量,形参,实参,本来我们只是想弄懂参数和变量的的区别,结果又冒出两个别的词,其实根本不需要担心,在学习编程的时候,类似的东西有很多名词,你现在听过了,下次有人说起的时候你就不用担心了。
其实在 Python 中,并没有搞得这么复杂,如果你看完上面截图的内容,再来看下面的代码,你就会发现很多事情其实是很明朗的:
>>>defadd(x):# x 是形参
... y =10# y 是变量
...returnx + y# 这里的 x 就是形参作为变量来用
...
>>> x =20# x 是变量
>>> add(x)# x 是参数,但它是由上面那行的变量 x 传递对象 20 的引用
30
你看,是不是没有那么复杂,所以名字是什么不是最关键的,最重要的是你要明白在函数名后面的括号里的东西的作用是 “传递对象的引用”。
我们再来看一个例子:
>>>defadd_digit(my_list):
... my_list.append(9999)
...returnmy_list
...
>>> x = [1,2,3]
>>> y = add_digit(x)
>>> y
[1,2,3,9999]
>>> x
[1,2,3,9999]
>>> id(y)
38793288L
>>> id(x)
38793288L
原本列表 x 是在函数外面的,既可以理解成 x 和 函数是属于 “同级” 的,只不过是分属于两个不同的个体,按照我们的常规理解,同级的个体,如果一个个体的内部发生了变化,对于另一个个体来说是没法影响的(注意我说的 “同级”,“个体”),但是事实是改变了,因为参数是 “传递对象的引用”,所以函数个体内部的小变动影响到了 x 个体,颇有 “以下犯上” 的意思。
花这么长的篇幅写这些的原因,终归还是希望你能很深的记住这点:“函数的参数传递对象的引用”,重要的事刚好说了三遍。
写在最后
我尽量的在明白且清晰的传递一些我的认识,虽然我 Boss 之前和我说在写代码的时候有些东西会用就行,不必去看到它底层的东西,但我还是觉得在学基础的东西的时候还是求甚解的好,地基打得牢,干啥都不慌,恰恰我之前对基础的东西其实是一晃而过的,现在我在努力改变自己原先的做法,希望也能引起你的重视。
The end。
我也要引起你的重视。
领取专属 10元无门槛券
私享最新 技术干货