python之函数的参数

目录

1.创建和调用函数

2.函数的返回值

3.参数

3.1实际参数和形式参数

3.2位置参数和关键字参数

 3.3参数的限制"/","*"

3.4收集参数之(*)和(**)的使用方式

3.4.1(*)与形参结合

3.4.2(**)与形参结合

 3.4.3解包参数


1.创建和调用函数

创建函数的形式:def 函数名(参数s):+ 函数的功能 +返回值

例如:我们要创建多次打印的函数。

def csdn(name):
    for i in range(3):
        print(f"I love {name}.")

        
csdn("csdn")
>>>I love csdn.
>>>I love csdn.
>>>I love csdn.

2.函数的返回值

例如:sum()函数返回求和之后的结果,len()函数返回函数的长度等等。

那么函数内部的返回值用return表示,例如:

def div(x,y):
    z = x/y
    return z

div(4,2) #函数的调用
>>>2.0

#同时也可以写成
def div(x,y):
    return x/y

div(6,2)
>>>3.0

注意:当函数中有多个return语句,则当执行第一句return语句之后就跳出该函数。

3.参数

3.1实际参数和形式参数

参数分为实际参数(实参)形式参数(形参)两种类型,其中实参是根据形参定义的顺序进行传递的。

例如:

def myfunc(a,b,c):
    return "".join(c,b,a)
myfunc("你","我","他")#实参根据形参的顺序进行传递
>>>'他我你'

3.2位置参数和关键字参数

对于此类位置固定的参数,我们称为位置参数。

此外我们可以使用关键字参数进行准确的传参,例如:

def myfunc(a,b,c):
    return "".(c,b,a)
myfunc(c="你",b="我",a="他")
>>>'你我他'

在同时使用关键字参数和位置参数的时候,位置参数必须在关键字参数之前,例如:

def myfunc(a,b,c):
    return "".(c,b,a)
myfunc(c="你","我","他")
>>>SyntaxError: positional argument follows keyword argument#报错
myfunc("他","我",c="你")#位置参数在关键字参数之后则不会报错
>>>'你我他'

在定义函数的时候,可以使用默认参数,如果在进行函数调用的时候,没有传入实参,则为默认参数。例如:

def myfunc(a,b,c="它"):
    return "".join((a,b,c))
myfunc("你","我")#如果没有实参传递,则由默认参数输出
>>>'你我它'
myfunc("你","我","他")#如果有实参传递,则代替默认参数输出
>>>'你我他'

注意:在使用默认参数的时候要将默认参数放在参数最后,否则会报错,例如:

def myfunc(a="你",b,c):
    
>>>SyntaxError: non-default argument follows default argument
#语法错误:非默认参数跟在默认参数后面

 3.3参数的限制"/","*"

函数的参数还有一个成员,那就是"/",其作用是限制关键字参数的语法。例如:


 

 "/"表示在其左侧不能使用关键字参数,右侧可以使用关键字和位置参数。例如:

def mul(x,/,y):
    return x*y

mul(5,6)
>>>30
mul(x=5,6)
>>>SyntaxError: positional argument follows keyword argument
def mul(x,y):
    return x*y

mul(x=5,y=6)
>>>30

 与"/"类似,"*"其作用是限制位置参数的语法。表示其左侧可以是位置参数也可以是关键字参数,但右侧只能是关键字参数。例如:

def  mul(x,*,y):
    return x*y

mul(5,3)
>>>Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    mul(5,3)
TypeError: mul() takes 1 positional argument but 2 were given
mul(x=5,y=3)
>>>15

3.4收集参数之(*)和(**)的使用方式

3.4.1(*)与形参结合

表示为将实参在未被关键字参数和位置参数使用的情况下,对实参进行打包成元组,例如:

def myfunc(*args):
    print(args)

    
myfunc(1,2,3,4,5,6)
#由于传入多个实参,而形参又与*结合,所有*args对所有的实参进行打包,变成元组的形式
>>>(1, 2, 3, 4, 5, 6)

当实参中存在关键字参数的时候,则*args只对关键字参数之前的实参进行打包成元组,例如:

def myfunc(*args,a,b):
    print(args,a,b)

    
myfunc(1,2,3,4,5,a=6,b=7)#*args对1,2,3,4,5打包成元组
>>>(1, 2, 3, 4, 5) 6 7

注意:如果在收集参数后面还需要指定一些参数,那么在函数调用的过程中则需要使用关键字参数来指定该实参,否则会报错。例如:

def myfunc(*args,a,b):
    print(args,a,b)


myfunc(1,2,3,4,5,6,7)
#六个实参都被打包成元组,导致a和b两个形参没有接收到实参,也没有默认参数,则系统报错
>>>Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    myfunc(1,2,3,4,5,6,7)
TypeError: myfunc() missing 2 required keyword-only arguments: 'a' and 'b'
myfunc(1,2,3,4,5,a=6,b=7)
#使用关键字参数可以避免以上情况
>>>(1, 2, 3, 4, 5) 6 7

3.4.2(**)与形参结合

表示为将实参在未被关键字参数和位置参数使用的情况下,对实参进行打包成字典。

注意:由于字典中的键值对是成对存在的,所有在传入实参的过程中必须使用关键字参数。

例如:

def myfunc(**args):
    print(args)

    
myfunc(x=1,y=2)
>>>{'x': 1, 'y': 2}#字典
myfunc(1,2)
>>>Traceback (most recent call last):#报错
  File "<pyshell#52>", line 1, in <module>
    myfunc(1,2)
TypeError: myfunc() takes 0 positional arguments but 2 were given

最后,收集函数的两种形式可以同时出现在一个函数,比如format函数:

 3.4.3解包参数

在函数调用的时候运用(*)(**)与实参结合,则称为解包参数。例如:
 

args = (1,2,3,4)
def myfunc(a,b,c,d):
    print(a,b,c,d)

    
myfunc(args)#报错,由于函数myfunc需要传入四个参数,而args是一个元组,只传入一个参数
>>>Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    myfunc(args)
TypeError: myfunc() missing 3 required positional arguments: 'b', 'c', and 'd'
myfunc(*args)#*args表示将元组进行解包,然后进行传参
>>>1 2 3 4


kwargs = {'a':1,'b':2,'c':3,'d':4}
def myfunc(a,b,c,d):
    print(a,b,c,d)

    
myfunc(kwargs)
>>>Traceback (most recent call last):#报错,同上,该参数是一个字典,表一个参数
  File "<pyshell#64>", line 1, in <module>
    myfunc(kwargs)
TypeError: myfunc() missing 3 required positional arguments: 'b', 'c', and 'd'
myfunc(*kwargs)#对字典进行解包一次
>>>a b c d
myfunc(**kwargs)#对字典进行解包两次
>>>1 2 3 4

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值