Loading

【Python】函数可变参数、默认参数的传值问题

函数默认参数的传值问题

我们都知道Python函数在调用的时候,一定需要有和函数定义的形参一样多的实参才能调用。但是在Python内置函数里面,会发现很多个可选参数。那么我们在自定义函数的时候能不能定义含有可选参数的函数呢?答案当然是可以的,因为Python的内置函数其实也是使用Python自由的语法结构来定义和使用的。
我们举个例子,Python内置函数中我们使用频率较高的一个就是range()函数了。
对于range函数的使用,我们应该知道,range函数三个参数分别是range(start,end,step),其中step经常会被我们省略,且缺省值为1。
现在我们来自定义一个range函数:

def my_range(start,end,step=1):
    list_temp = []
    if not isinstance(start,(int,float)):
        print("您的输入有误,输入必须是数字")
    elif not isinstance(end,(int,float)):
        print("您的输入有误,输入必须是数字")
    elif start > end:
        print("您的输入有误,起始数字大于结束数字")
    else:
        while start <= end:
            list_temp.append(start)
            start = start + step
        print(list_temp)
        return list_temp

这个时候如果不指定step参数的话,该函数还是能够正常运行,只不过step值默认设置为1。这个函数就相当于是Python内置的range()函数,只不过在自定义函数的时候需要注意设置可选参数,考虑到各种情况下的运行。
必须注意的是:
1.可选参数一定要放在必选参数后面,否则Python解释器解释语句时候会发生歧义。假如一个函数有A、B两个参数,其中A为可选参数,位于函数参数前面的位置,B位于后面的位置。调用该函数的时候若只传入一个参数,会产生歧义,按照顺序来说,实参应该代入A的位置,但是按照本意来说,实参应该代如B的位置。所以说可选参数一定要放在必选参数后面。
2.默认参数必须指向不变值,不能指向一个可变变量。指向变量会导致出错。
3.当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

函数可变参数的传值问题

定义可变参数,只需要在参数前面加上*号即可。比如要将list或者tuple变量作为参数传进函数,就可以使用可变参数的函数。
可变参数在使用的时候,可以传入任意个参数进去,包括0个参数。
例如在下面的代码中:

numbers = [1,2,3,4,5,6,7,8,9]
def calculate(numbers):
    sum = 0
    for i in numbers:
        sum += i
    return sum
print(calculate(numbers))

上面的函数就是将一整个列表作为参数的。但是如果当需要传入的列表参数长度不定的时候,可以选用可变参数。代码如下所示:

posted @ 2020-09-29 20:04  雨下一整晚Real  阅读(11)  评论(0编辑  收藏  举报  来源