• day03-函数的固定参数及调用


         在此之前,我们演示的函数都是没有带参数的,下面我们就来说说带参数的函数。

    • 形参:指的是形式参数,是虚拟的,不占用内存空间,形参单元只有被调用的时才分配内存单元
    • 实参:指的是实际参数,是一个变量,占用内存空间,数据传递单向,实参传给形参,形参不能传给实参
    1 def test(x,y): #x,y是形参
    2     print(x)
    3     print(y)
    4 
    5 test(1,2) #1和2是实参

    #输出

    1

    2

    1、位置参数

    从上面的例子可以看出,实际参数和形式参数是一一对应的,如果调换位置,x和y被调用的时,位置也会互换,代码如下:

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 print("--------互换前-----")
    5 test(1,2)
    6 print("--------互换后-----")
    7 test(2,1)

    #输出

    --------互换前-----

    1

    2

    --------互换后-----

    2

    1

    1)多一个参数

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 print("--------多一个参数----")
    5 test(1,2,3)

    #输出

    --------多一个参数----

    Traceback (most recent call last):

      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

        test(1,2,3)

    TypeError: test() takes 2 positional arguments but 3 were given  #test()函数需要传两个实参,你传了三个实参

    2) 少一个参数

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 print("--------少一个参数----")
    5 test(1)

    #输出

    --------少一个参数----

    Traceback (most recent call last):

      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

        test(1)

    TypeError: test() missing 1 required positional argument: 'y'  #没有给y参数传实参

     事实证明:多传一个参数或者少传一个参数都是不行的。

    2、关键字参数

    关键字传参不需要一一对应,只需要你指定你的哪个形参调用哪一个实参即可,代码如下:

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 
    5 print("--------互换前------")
    6 test(x=1,y=2)
    7 print("--------互换后------")
    8 test(y=2,x=1)

    #输出

    --------互换前------

    1

    2

    --------互换后------

    1

    2

    1) 位置参数在前,关键字参数在后

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 
    5 test(1,x=2)

    #输出

    Traceback (most recent call last):

      File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module>

        test(1,x=2)

    TypeError: test() got multiple values for argument 'x' #给x形参传的值过多

    报错的意思是:给形参x传的值过多。这种报错的原因是:实参1已经传给了形参x,后面的x=2又传了一次,所以报错

    2) 关键字在前,位置参数在后

    1 def test(x,y):
    2     print(x)
    3     print(y)
    4 
    5 test(y=2,1)

    #输出

    File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8

        test(y=2,1)

                ^

    SyntaxError: positional argument follows keyword argument # 报错:关键字参数在位置参数的前面

    3) 位置参数放前面,中间放关键字参数

    1 def test(x,y,z):
    2     print(x)
    3     print(y)
    4 
    5 test(1,y=2,3)

    #输出

     File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8

        test(1,y=2,3)

                  ^

    SyntaxError: positional argument follows keyword argument

    4) 关键字参数放最后

    1 def test(x,y,z):
    2     print(x)
    3     print(y)
    4     print(z)
    5 
    6 test(1,2,z=3)

    #输出

    1

    2

    3

    4) 最后两个用关键字参数

    1 def test(x,y,z):
    2     print(x)
    3     print(y)
    4     print(z)
    5 
    6 test(1,z=2,y=3)

    #输出

    1

    3

    2

    得出一个结论:关键字参数是不能写在位置参数前面的。

    总结:

    1、既有关键字,又有位置参数时,是按位置参数的顺序来

    2、关键字参数是不能写在位置参数的前面的

  • 相关阅读:
    杭电2027
    杭电2028
    开发者所需要知道的iOS7 SDK新特性
    苹果已向这15款产品和应用宣战
    谷歌J2ObjC(Java to ObjectiveC)版本更新
    国外应用评测网站汇总
    iOS 7 UI设计官方图集
    iOS 7UI设计模板
    js中 setTimeout延时0毫秒的作用
    C# Xmlrpc
  • 原文地址:https://www.cnblogs.com/Study-Blog/p/6681431.html
Copyright © 2020-2023  润新知