python3 函数的参数

329 阅读2分钟

0. 概要

本文总结了函数传参的方式,便于使用时快速查询

本文总结自廖雪峰的python3教程

函数的命名不能以数字开头,且只能包含字母、数字、下划线。与变量相同。

1. 位置参数

相当于一个占位,传参时不需要指定参数名

def testFunc(x):
    return x * x

def testFunc2(x, y):
    return x + y

调用:

>>>testFunc(6)
36
>>>testFunc2(6, 7)
13

2. 默认参数

定义函数时给参数设置一个默认值,当传参时没有传入参数则自动赋予默认值作为参数

格式特点:“默认参数”必须放在“位置参数”的后面

注意:默认参数必须指向不变对象

def testFunc3(x, y=2):
    return x

def testFunc4(x=2, y=3):
    return x, y

调用:

>>> testFunc3(y=4, x=0)
(0, 4)
>>> testFunc3(3)
(3, 2)
>>> testFunc3(9,8)
(9, 8)

3. 可变参数

当传入的参数的数量无法确定时就可以使用可变参数,可以传入任意个包括0个参数

如果传入了多个参数,在函数调用时自动组装成为一个tuple

格式特点:定义函数时在参数名前加一个星号*

def testFunc5(*numbers):
    sum = 1
    for n in numbers:
        sum = sum * n
    return sum

调用:

>>> testFunc5(3, 5, 9)
135

传入一个list或tuple的时候必须在参数前面加上星号*

>>> testNumbers = [6, 2, 4]
>>> testFunc5(*testNumbers)
48

4. 关键字参数

关键字参数允许传入0个或人一个含有参数名的参数,

函数调用时自动组装为一个dict

定义:

def testFunc6(name, numberOfPhones, **phonesName):
    print(f"""name: {name}
number: {numberOfPhones}
other: {phonesName}""")

调用:

>>> testFunc6('Simon', 3, Phone1='iPhone', Phone2='Xiaomi')
name: Simon
number: 3
other: {'Phone1': 'iPhone', 'Phone2': 'Xiaomi'}

或者可以将dict直接传入关键词参数,但是传入时需要再dict名称前加2个星号**

定义:

Phones= {'Phone1': 'iPhone', 'Phone2': 'Xiaomi'}
testFunc6('Simon', 3, **Phones)

5. 命名关键字参数

命名关键字参数限制了传入的参数的名字

传参时必须传入参数名,否则将报错

定义:

def testFunc7(name, os, *, version, language):
    print(name, os, version, language)

调用

>>> testFunc7('pyServer', 'Centos', version= 8, language= 'CN')
pyServer Centos 8 CN

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def testFunc7(name, os, *type, version, language):
    print(name, os, type, version, language)

6. 参数组合

当一个函数存在多种参数类型,必须遵守参数使用的顺序:

必选参数、默认参数、可变参数、命名关键字参数和关键字参数

定义:

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)