Python学习笔记——函数参数

刚开始学习Python,看了一些资料,总结记录一下基本的Python函数参数。

Python中函数定义,有五种参数分类,分别为:位置参数、默认参数、可变参数、关键字参数、命名关键字参数。

(1)位置参数

也称必选参数,也就是函数调用时,必须传递实参值。这类参数很简单,如下,调用add函数时必须传值给参数x,y,否则报错。

def add(x, y):
    print("x+y=", x+y)

add(3,5)

(2)默认参数

默认参数,顾名思义,参数有默认值,调用函数时,可不传值给默认参数。如下:

def add(x, y=5):
    print("x+y=", x+y)

add(3)

注:(1)默认参数必须在必选参数之后;(2)默认参数必须指向不变对象。

例如,

def addTest(L=[]):
    L.append("test")
    print(L)

addTest()
addTest()

运行结果:


这是由于参数L指向了列表,每次调用都会改变L的值,每次调用L值都不相同,都会多一个字符串“test”。

修改:

def addTest(L=None):
    if L is None:
        L = []
    L.append("test")
    print(L)

addTest()
addTest()

(3)可变参数

可变参数是指传入函数的参数个数是可变的,可以是0个或者任意多个。在函数内部,可变参数接收到的是一个元组tuple。

如,求和计算sum=1+2+3+4+......

def _sum(*numbers):
    s = 0
    for n in numbers:
        s=s+n
    print("结果为:", s)

_sum(1, 2, 3)
_sum(1, 2, 3, 4, 5)

当然,以上_sum函数的参数也可以是列表或者元组,运行结果是一样的,如果是列表或者元组的话,就是普通的位置参数。

此外,对于已构建的列表,可以加“*”号,将列表元素作为可变参数传递给函数。

def _sum(*numbers):
    s = 0
    for n in numbers:
        s=s+n
    print("结果为:", s)

_sum(1, 2, 3)
_sum(1, 2, 3, 4, 5)
#定义列表,*numbers将list的所有元素作为可变参数传进去
numbers=[1,2,3,4,5]
_sum(*numbers)

(4)关键字参数

可变参数可以传递0或任意多个实参,在函数内部自动组装成元组。关键字参数允许传递0或任意多个含参数名的参数,这些关键字参数在函数内部组装成字典。

def student(name, age, **keywords):
    print("name:",name,",age:",age,",keywrods:",keywords)

student("guangyi",16)
student("guangyi", 16, city="hang",gender="M")

对于已构建的字典,可以加“**”,将字典的所有key-value用关键字参数传递到函数的**keywords中,keywords将获得一个字典,它是传入字典的拷贝

def student(name, age, **keywords):
    print("name:",name,",age:",age,",keywrods:",keywords)

student("guangyi",16)
student("guangyi", 16, city="hang",gender="M")
information={"city" : "hang", "gender":"M","other":"nothing"}
# 将字典information的所有key-value用关键字参数传递到函数的**keywords中,keywords将获得一个字典,它是传information的拷贝
student("guangyi", 16, **information)
注:对字典keywrods的更改不会影响原字典information

(5)命名关键字参数

它与关键字参数的不同在于,关键字参数是命名的,必须且只能传入指定名字的参数,如下,只能传入参数名为“city”和“job”的关键字参数。(命名关键字参数需要一个分隔符“*”,“*”后面的为命名关键字参数)

def student(name,age,*,city,job):
    print("name:", name, ",age:", age, ",city:", city,"job:",job)

student("guangyi",16,city="hang",job="IT engineer")

另,如果关键字参数前面有可变参数,可不加分隔符“*”

def student(name,age,*args,city,job):
    print("name:", name, ",age:", age,"args:",args ,",city:", city,"job:",job)

student("guangyi",16,1,2,"test",city="hang",job="IT engineer")

总结:命名关键字参数前必须有分隔符“*”,或者可变参数,否则无法识别命名关键字参数

命名关键字参数可以有默认值,如下,参数“city”给定默认值“hang zhou”,函数调用时,该参数可以使用缺省值。

def student(name,age,*args,city="hang zhou ",job):
    print("name:", name, ",age:", age,"args:",args ,",city:", city,"job:",job)

student("guangyi", 16, 1, 2, "test", job="IT engineer")

最后,参数可以组合使用,但是定义的顺序必须为位置参数、默认参数、可变参数、命名关键字参数、关键字参数

猜你喜欢

转载自blog.csdn.net/nancy50/article/details/79806737
今日推荐