有多种方法能够为函数定义输出:
非常晦涩
如果使用可变对象作为函数的默认参数,会导致默认参数在所有的函数调用中被共享 。
例子1:
addItem方法的data设计了一个默认参数 , 使用不当会造成默认参数被共享 。
python里面,函数的默认参数被存在__default__属性中,这是一个元组类型
例子2:
在例子1中,默认参数是一个列表 , 它是mutable的数据类型,当它写进 __defauts__属性中时 , 函数addItem的操作并不会改变它的id , 相当于 __defauts__只是保存了data的引用,对于它的内存数据并不关心,每次调用addItem , 都可以修改 addItem.__defauts__中的数据,它是一个共享数据 。
如果默认参数是一个imutable类型,情况将会不一样,你无法改变默认参数第一次存入的值 。
例子1中,连续调用addItem('world') 的结果会是
而不是期望的
python的函数可以定义参数不限定数量def hanshu(*a):
return a
print(hanshu(1,2))
输出(1,2)
print(hanshu(1,2,3,4,5,6))
输出(1,2,3,4,5,6)
print(hanshu('a','b','c'))
输出('a','b','c')
注意:这里a会自动生成元组,不是列表 。
请问这个python脚本哪里出错了?打印出一个无限循环的数定义函数的时候 , 我们把参数的名字和位置确定下来,函数的接口定义就完成了 。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了 , 函数内部的复杂逻辑被封装起来,调用者无需了解 。
Python的函数定义非常简单 , 但灵活度却非常大 。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数 , 使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码 。
位置参数
我们先写一个计算x2的函数:
def power(x):
return x * x
对于power(x)函数,参数x就是一个位置参数 。
当我们调用power函数时,必须传入有且仅有的一个参数x:
power(5)25 power(15)225
现在 , 如果我们要计算x3怎么办?可以再定义一个power3函数,但是如果要计算x4、x5……怎么办?我们不可能定义无限多个函数 。
你也许想到了,可以把power(x)修改为power(x, n) , 用来计算xn,说干就干:
def power(x, n):
s = 1
while n0:
n = n - 1
s = s * xreturn s
对于这个修改后的power(x, n)函数,可以计算任意n次方:
power(5, 2)25 power(5, 3)125
修改后的power(x, n)函数有两个参数:x和n,这两个参数都是位置参数 , 调用函数时,传入的两个值按照位置顺序依次赋给参数x和n 。
默认参数
新的power(x, n)函数定义没有问题,但是 , 旧的调用代码失败了,原因是我们增加了一个参数,导致旧的代码因为缺少一个参数而无法正常调用:
power(5)
Traceback (most recent call last):
File "stdin", line 1, in moduleTypeError: power() missing 1 required positional argument: 'n'
Python的错误信息很明确:调用函数power()缺少了一个位置参数n 。
这个时候 , 默认参数就排上用场了 。由于我们经常计算x2,所以,完全可以把第二个参数n的默认值设定为2:
def power(x, n=2):
s = 1
while n0:
n = n - 1
s = s * xreturn s
这样,当我们调用power(5)时,相当于调用power(5, 2):
power(5)25 power(5, 2)25
而对于n2的其他情况,就必须明确地传入n,比如power(5, 3) 。
从上面的例子可以看出,默认参数可以简化函数的调用 。设置默认参数时,有几点要注意:
推荐阅读
- gis专业美国大学排名,gis 美国
- sqlserver2019key,sqlserver2019可以放在d盘中吗
- 电视上怎么连接电脑投屏,电视如何连接电脑投屏
- pc电脑怎么与鸿蒙万物互联,电脑怎么连鸿蒙
- linux命令样例 linux命令用法及举例
- 猫咪视频软件下载,猫咪视频软件下载
- 深海飞行游戏,深海开飞机
- sqlserver登陆命令cmd,sqlserver 登陆
- java发帖功能代码 java如何发布