函数的参数

函数的参数

一、参数的类型

函数的参数分为形参和实参python

一、形参

定义函数时括号内声明的参数,本质是一个变量名,用来接收外部传来的参数app

二、实参

调用函数时括号内传入的值,值能够是常量、变量、表达式或三种的组合函数

def index(a):  # 形参:至关于变量名
    print(a)
    print(b)
    if a > b:
        print(a)
    else:
        print(b)
b = 2
a = 1
index(a)  # 实参:至关于变量值

二、传参方式

一、位置参数 positional arguments

调用函数时经过位置传入的实参与形参一一对应code

def index(a,b):
    if a>b:
        return a
    else:
        return b
index(1,3)# 按照位置顺序向形参中传参

二、关键字参数

一、调用函数时按照key=value形式指定实参能够不按顺序传参it

二、关键字参数与位置参数混用时,位置参数必定要在前io

三、而且不能够对同一个形参重复赋值class

def res(a,b,c,d):
    print(a,b,c,d)
res(1,2,d=3,c=4)#混用关键字参数与位置参数,位置参数在前,关键字参数在后指定参数传参

三、默认参数

在定义函数时已经为形参进行赋值,须要常常改变的参数定义成位置参数,不多改变的定义成默认参数容器

一、默认参数必须在位置参数以后基础

二、默认参数仅在定义阶段赋值一次变量

def res(a, b, c, d=5):
    print(a, b, c, d)
d = 8# 在定义时已经被赋值一次,此处修改无效
res(1, 2, c=3)#默认参数能够在实参中不写直接调用
res(1, 2, c=3,d=8)# 若是修改默认参数在调用时修改

三、默认参数一般设为不可变类型

若是设置成可变类型,则每次调用都是在上次调用的基础上加值

def res(a, b, c, d=[]):
    d.append(c)
    print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=3)
res(1, 2, c=3)
>>>
1 2 3 [3]
1 2 3 [3, 3]
1 2 3 [3, 3, 3]

能够修改以下:

# 第一种解决方案
def res(a, b, c, d=None):
    if d == None:# 若是是None则定义一个空列表
        d=[]
    d.append(c)
    print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=4)
res(1, 2, c=5)

# 第二种解决方案
def res(a, b, c, d):
    d.append(c)
    print(a, b, c, d)
res(1, 2, 3,d=[])
res(1, 2, 4,[])
res(1, 2, 5,[])

四、可变长参数

调用函数时,实参的个数不固定,而实参传参有位置参数和关键字参数,全部有两种解决方案

一、位置参数*args,在定义阶段形参最后一个参数args前加个星号,能够接受全部实参中的溢出的位置参数,默认以元组的形式保存下来

  • 官方认证为*args,可是只要有星号后面是什么参数都有可变长类型的效果

  • *是打散传入的容器类型,若是不打星号就默认转换溢出的参数造成元组

def res(a, b, c,*args):
    print(a, b, c,args)
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 (4, 5, 6, 7, 8)
def res(a, b, c,*args):
    print(a, b, c,*args)# 将输入的参数原本转换成元组的,打散
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 4 5 6 7 8

二、关键字参数**kwargs,在定义阶段最后一个形参用,将调用时全部溢出的关键字参数转换为字典{关键字:参数}赋值给形参

官方认证为**kwargs,可是只要有星号后面是什么参数都有可变长类型的效果

def res(a, b, c, **kwargs):# 将调用时溢出的关键字参数转换成字典
    print(a, b, c, kwargs)


res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 {'d': 1, 'f': 4, 'e': 7}
def res(a, b, c, **kwargs):
    print(a, b, c, *kwargs)# 一个*是打散字典拿到key值,打散字典只能是一个*


res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 d f e

五、命名关键字参数

一、在位置可变长参数和关键字可变长参之间

二、在调用阶段,必定要以关键字参数的形式传值

三、关键字参数必定要在位置参数后面

def index(a,b,c=1,*args,d,**kwargs):
    print(a,b,c,args,d,kwargs)
index(1,2,3,4,5,6,d=2,f=4,g=8)
>>>
# 1 2 3 (4, 5, 6) 2 {'f': 4, 'g': 8}

六、组合使用

必须按照定义顺序:位置参数,关键字参数,*args,命名关键字参数,**kwargs

相关文章
相关标签/搜索