第八十七节:位置参数
位置参数,也被称作必备参数,就是说在创建函数的时候如果设定了参数,在参数传递的时候,后面的实际参数必须保持和函数创建时的形式参数一致的数量和位置。
首先,来看一下为什么要保持一致的数量。
就拿上节内容的bmi指数实例来做实验。了解Python函数中的形式参数和实际参数
在这个实例中,创建函数bmi()时创建了三个形式参数:“name,height,weight”,在调用函数的时候,先将最后一个实际参数取掉试试看,详见下图:
少一个参数的异常
结果出现了TypeError异常,这个异常的意思就是说缺少了一个“weight”参数。
那么在已经设定好的三个参数之外,调用函数的时候临时再增加一个参数,会怎么样呢?详见下图:
多一个参数的异常
结果还是出现了TypeError异常,这个异常的意思则是函数bmi()只设定了3个参数,实际参数却给了4个。
这两个实验的结果,证明了:参数设定好以后,数量是不能变化的,否则就会出现异常导致错误。
接下来,看一下参数的位置发生变化会发生什么样的情况。
在调用函数bmi()的时候,实际参数的位置做一点小调整,先将第一个参数name位置的“李四”和第二位置height参数的“1.9”互换位置,详见下图:
参数位置错误的异常
从结果上看,头三行的代码虽然执行了,但是出现了逻辑错误:姓名成了1.9,身高成了李四M,这显然不对,到了执行计算公式代码行的时候,由于“李四”是个字符串str,不能进行数据类型计算,所以出现了TypeError异常。
这个结果因为出现了TypeError异常而可以明白地察觉到,但是也有不出现明显异常的BUG,是不容易发现的。
这个实例中的调用函数的时候将第二位置的“1.9”和第三位置的“100”互换,又会发生什么情况呢?详见下图:
参数位置错误的BUG
请看,完全没有异常发生,代码被完整地执行了,结果出来后,仔细看看,身高变成了100M(米),体重变成了1.9(公斤),这位李四先生,体型就是一根100米高的草,而且必须是细草,否则不可能只有1.9公斤重……
这就是代码没有错,但是由于参数的错误,导致了出现了不合逻辑的BUG。
由以上两个实验得出的结论是:参数设定好以后,位置也是不能随意变更的,否则即使不出现异常,一会出现逻辑性BUG。
今天的内容看似简单,但却非常重要,Python虽然是包容性很强的编程语言,但在编写代码的逻辑细节上,还是容不得半点马虎。