美文网首页
计算和控制流(二)代码组织:函数的参数

计算和控制流(二)代码组织:函数的参数

作者: 无尽的结 | 来源:发表于2019-01-08 16:05 被阅读0次

    一、参数

    1.什么是参数?

    参数是传入到函数的值,当调用含参数的函数时,这些参数的值会被复制给函数中的对应参数。

    1.1什么是形式参数(formal parameter)?

    函数创建和定义过程中,函数名后面括号里面的参数。

    1.2什么是实际参数?

    函数在调用过程中传入的参数。

    1.3形式参数只是代表一个位置,一个变量名,实际参数是一个具体内容,赋值到变量的值如下图所示:
    def add(a,b): #a,b为形参所以是定义的时候用的只是占了一个位置用了一个名称,在函数里面可以直接用
        return a+b
    print(add(1,2)) #在调用的时候1,2参数为实参,1赋值给a,2赋值给b
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    3
    
    Process finished with exit code 0
    
    2.函数中定义参数的方式
    2.1固定参数

    固定参数是在参数表中写明参数名key的参数,固定了顺序和 数量的固定参数,这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就是说第一个形参对应这第一个实参。
    2.1.1例如def a(key1,key2,key3....)如下图所示:

    def a(x,y):
        print(x,y)
    a(1,2)#调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错。
    a(1,2,3)
    a(1)
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    1 2
    Traceback (most recent call last):
      File "F:/j/demo9.py", line 4, in <module>
        a(1,2,3)
    TypeError: a() takes 2 positional arguments but 3 were given
    
    Process finished with exit code 1
    

    2.1.2例如def a(key1,key2=value2...)这种方式就是第一种的改进版,提供了默认值如下图所示:

    def a(x,y=3):
        print(x,y)
    a(1,2)
    a(1)
    a(y=4,x=3)
    #调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了,这个时候x还是1,y则为默认的3。
    # 上面这俩种方式,还可以更换参数位置,比如a(y=4,x=3)用这种形式也是可以的。
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    1 2
    1 3
    3 4
    
    Process finished with exit code 0
    
    2.2可变参数

    可变参数是指在定义函数时还不知道会有多少参数传入的可变参数,它以一个*号加上不带名称只有顺序之分的形参的方式来表示这个函数的实参个数不定,可能为0个也可能为n个。注意一点是,不管有多少个,在函数内部都被存放在以形参名为标识符的元组中。语法如下图所示:

    def a(*args): #不带key的多个参数
    

    2.2.1不带名字可变参数的实例如下图所示:

    def a(*args): #不带key的多个参数
        print(args)
    a(123,666,"abcd",True) #当调用函数时可以往里面传入无限个参数
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    (123, 666, 'abcd', True)
    
    Process finished with exit code 0
    

    2.2.2带名字的可变参数是在形参名前加两个*号表示语法如下图所示:

    def a(**kwargs): #带key=value形式的多个参数   
    

    2.2.3带名字可变参数的实例如下图所示:

    def a(**kwargs): #带key=value形式的多个参数
        print(kwargs)
    #此时在调用函数时不能在以这种方式a(123,666,"abcd",True) 传入参数了不然会报错,因为参数在函数内部将被存放在以形式名为标识符的字典中
    a(name='sgy',age=30,sep='comma')#以字典元素的方式传入参数
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    {'name': 'sgy', 'age': 30, 'sep': 'comma'}
    
    Process finished with exit code 0
    
    3.调用函数的参数

    调用函数的时候,可以传进两种参数一种是没有名字的位置参数,另一种是带key的关键字参数,如果混用,所有位置的参数必须在前,关键字参数必须在后。
    3.1没有名字的参数语法如下图所示:

    def func(*args):
    func(args1,args2...)#会按照前后顺序对应到函数参数传入
    

    3.2带有Key关键字参数语法如下图所示:

    def a(age,name,sep): 
        print(age,name,sep)
    a(name='sgy',age=30,sep='comma')#由于指定了key所以不用按照顺序对应
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    30 sgy comma
    
    Process finished with exit code 0
    

    3.3混用参数的语法如下图所示:

    def a(age,name,sep):
        print(age,name,sep)
    a('sgy',30,sep='comma')#位置参数要放在关键字参数前面不然会报错
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
    sgy 30 comma
    
    Process finished with exit code 0
    

    3.3.1调用函数时把关键字参数放在位置参数前面时会报错如下图所示:

    def a(age,name,sep):
        print(age,name,sep)
    a(sep='comma',30,'sgy')#把关键字参数放在位置参数前面会报错
    

    输出

    F:\j\venv\Scripts\python.exe F:/j/demo9.py
      File "F:/j/demo9.py", line 3
        a(sep='comma',30,'sgy')
                     ^
    SyntaxError: positional argument follows keyword argument
    
    Process finished with exit code 1
    

    相关文章

      网友评论

          本文标题:计算和控制流(二)代码组织:函数的参数

          本文链接:https://www.haomeiwen.com/subject/yramrqtx.html