Skip to main content

Python 入门基础知识 - 函数中的参数

Python 入门基础知识 - 函数中的参数

函数中的参数

在Python中,函数的参数可以有多钟形式。例如某些函数,在其调用时需要向其传递参数,但在使用时,可以不向

其传递参数,依然可以正常调用。在Python中还可以声明一个具有任意个参数的函数。

函数中的参数 - 参数默认值

在Python中声明函数时,可以预先声明一个默认的参数值。当调用具有参数值的函数时,可以不向函数传递参数,

而使用声明函数时设置的默认值。

举例如下:

def cube(x=5):
    return x ** 3
print(cube())
print(cube(2))

如果一个函数具有多个参数,而且这些参数都具有默认值,在调用函数的时候,传递参数是按照声明函数时参数的

顺序依次传递的。如果在调用的时候仅使用","表示向函数的最后一个参数传递值,会引发错误。如下:

def cube2(x=1, y=2, z=3):
    return (x + y - z) ** 3
# print(cube2( 3, 3 ))      # 这里会正常运行
# print(cube2( , , 3 ))     # 这里会抛出异常

异常内容类似如下

    print(cube2( , , 3 ))

                  ^

SyntaxError: invalid syntax

如果需要向指定的参数传递值可以使用如下方式重新定义函数

def cube3(x=None, y=None, z=None):
    if x is None:
        x = 1
    if y is None:
        y = 2
    if z is None:
        z = 3
    return (x + y - z) ** 3
print(cube3())
print(cube3(None, None, 5))

除了使用上面的方法,还可以使用下面的方法,向指定的参数传递值

函数中的参数 - 参数传递

在Python中参数值的传递是按照声明函数时参数的顺序进行传递的。

而实际上Python还提供了另外一个传递参数的方法---按照参数名传递值的方法。

以参数名传递参数时类似于设置参数的默认值。使用按参数名传递参数的方式调用函数时,要在函数名后的圆括号里为函数的所有参数赋值。

赋值的顺序不必按照函数声明时的参数顺序。如下

def fun(x, y, z):
    return x + y - z
print(fun(1, 2, 3))
print(fun(z=1, x=2, y=3))

在Python中,调用函数可以同时使用按顺序传递参数,以及按参数名传递参数的方式。

但是,要注意按顺序传递参数要位于按参数名传递的参数之前,而且不能有重复的情况。

如下

def fun1(x, y, z):
    return x + y + z
print(fun1(1, z=2, y=3))
print(fun1(z = 1, y= 2, 3))   # 错误的方式!按顺序传递的参数不能位于按参数名传递的参数之后

这里会报如下错误

    print(fun1(z = 1, y= 2, 3))

SyntaxError: non-keyword arg after keyword arg

print(fun1(1, z = 2, x = 3))  # 错误的方式!参数重复,1已经传递给x,后面又将3传递给x

这里会报错如下

    print(fun1(1, z = 2, x = 3))

TypeError: fun1() got multiple values for keyword argument 'x'

在具有默认参数值的函数中,使用按参数名向函数中参数传递的方法非常方便。

如果使用按照参数名向函数传递参数的方法,不必在函数的声明时将参数的默认值设置为None,

可以省去函数中的判断语句。为了让函数更具通用性,下面的实例依然将参数的默认值设置为None。

def cube4(x=None, y=None, z=None):
    if x is None:
        x = 1
    if y is None:
        y = 2
    if z is None:
        z = 3
    return (x + y - z) ** 3
print(cube4(z=4))
print(cube4(x=2, z=5))

函数中的参数 - 可变长参数

在Python中,函数可以具有任个参数,而不必将所有参数定义。使用可变参数的函数,将其所有参数保存在一个元组里,

在函数中可以使用for循环来处理。声明一个可变长参数的函数只需已"*"开头定义一个参数即可。

代码如下

def my_list_append(*list):
    newList = []
    for i in list:
        newList.extend(i)
    return newList


a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
print(my_list_append(a, b))
print(my_list_append(a, b, c))

函数中的参数 - 参数引用

在Python中可以在参数中使用可变对象,如列表等,来达到改变参数值的目的。如下

def reset_value1(x):
    x = x ** 2


def reset_value2(x):
    x[0] = x[0] ** 2


a = 2
b = [2]
reset_value1(a)  # 这里的改变是不会成功的
print(a)
reset_value2(b)  # 这里的改变成功的
print(b)

以上实例环境声明

# _*_ coding: utf-8 -*-

# version 2.7.13

版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/40