zoukankan      html  css  js  c++  java
  • python--函数参数的学习

    #一,形式参数和实参
    """在定义函数阶段定义的参数称之为形参,相当于变量名"""
    # def fun(x,y): #x=1,y=2
    # print(x,y)
    """实参,在调用函数的阶段,传入的值称之为实际参数,简称实参,相当于变量值"""
    # fun(1,2)

    #关系:
    #在调用阶段,实参(变量值)会赋值给形参(变量名)
    #这种绑定关系只能在函数体使用
    #实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系

    #实参相当于值,值可以是???形式
    #形式一:实参是传入的值,也可以是变量形式赋的值,也可以是一个功能。
    """func(int('1'),2)->func(1,2)"""

    """位置参数,在函数定义阶段按照从左到右的顺序一次定义的参数"""
    #位置形参必须被传值,多一个少一个都不行
    #特点:按照顺序与形参一一对应

    """关键字参数,在函数调用阶段,按照key=value的形式传入的值
    特点:指名道姓给某个形参传值,可以不参考顺序"""
    # def func(x,y):
    #
    # func(y=1,x=2)

    """混合使用
    1。位置实参必须放在关键字实参前,
    2。不能为同一个形参重复传值 func(1,y=2,x=1)-->不能这样,得到了多个值"""


    """默认参数
    默认形参,在定义函数的阶段,就已经被赋值的形参,称之为默认参数"""
    # 特点,在定义的阶段就已经被赋值,意味着在调用的阶段可以不用为其赋值,准确的说,被赋予的是值的内存地址,引用传递
    # def func(x,y=2):
    # print(x,y)
    # func(x=1)

    # def register(name,age,gender="男"):
    # print(name,age,gender)
    # register("zhanzhan",29)
    # register("jianguo",3,"女")
    # register("dandan",28,"女")
    """
    zhanzhan 29 男
    jianguo 3 女
    dandan 28 女
    """

    #在定义的阶段就已经被赋值,意味着在调用的阶段可以不用为其赋值
    # m=2
    # def func(x,y=m):-->y=m的内存地址
    # print(x,y)
    # m=3333333333
    # func(1)
    """
    1 2
    """
    函数的最理想的状态是函数的类型不受外界代码的干扰

    #示范二:
    m=[1111,]
    # def func(x,y=m): #不是m给了Y,是m的内存地址给了Y
    # print(x,y)
    # m.append(3333) #这里的加是对m 进行操作
    # func(1)

    """3,虽然默认值可以被指定为任意数据类型,但是不推荐使用可变类型
    函数的定义应该遵循的原则"""

    # def func(x,y,z,l=None):#默认参数的值不要是可变类型
    # if l is None:
    # l=[]
    # l.append(x)
    # l.append(y)
    # l.append(z)
    # print(l)
    # l=[44,55,66]
    # func(1,2,3,l)
    """
    [44, 55, 66, 1, 2, 3]
    """

    """可变长度参数指的是在调用函数时,传入的值(实参)的个数不固定"""
    #而实参是用来给形参赋值的,所以对应着,针对溢出的实参必须有对应的形参来接受
    #I:形参格式:用来接收溢出的位置实参
    #II:*形参名,用来接收溢出的位置实参,溢出的位置实参会被*保存成元组
    #*后跟的可以是任意名字,但是约定俗成应该是args
    # def func(x,y,*z):
    # print(x,y,z)
    # func(1,2,3,4,5,6)
    """
    1 2 (3, 4, 5, 6)
    """
    """求和"""
    # def sum(*args):
    # res=0
    # for item in args:
    # res+=item
    # return res
    # res=sum(1,2,3,4,5)
    # print(res)

    """2。4。2可变长度的关键字长度"""
    ######*可以在实参中,实参中带*,先*后的值打散成位置参数
    ######
    # def func(x,y,z):
    # print(x,y,z)
    # func(*[11,22,33])#如果没有* ,则缺少实参[11,22,33]算一个
    """
    ----------
    11 22 33
    ----------
    """
    """形参和实参都带有*"""
    def func(x,y,*args):
    print(x,y,args)
    # func(1,2,3,4,5,6)
    # func(1,2,[3,4,5,6])
    # func(1,2,*[3,4,5,6])
    """
    ---------------
    1 2 (3, 4, 5, 6)
    1 2 ([3, 4, 5, 6],)
    1 2 (3, 4, 5, 6)
    --------------------
    """
    # func(*"hello")
    """
    -------
    h e ('l', 'l', 'o')
    ---------
    """

    """II:
    **可以在实参中(**后跟的只能是字典),实参中带**,先**后的值打散
    """
    # def func(x,y,z):
    # print(x,y,z)
    # func(*{'x':1,'y':2,'z':3}) #x y z
    # func(**{'x':1,'y':2,'z':3}) #1 2 3
    # func(**{'x':1,'a':2,'z':3}) #TypeError: func() got an unexpected keyword argument 'a'

    """III形参和实参都带有*
    """
    # def func(x,y,**kwargs):
    # print(x,y,kwargs)
    # func(**{'y':2,'x':1,'a':3,'b':4}) #-->1 2 {'a': 3, 'b': 4}

    def index(*args,**kwargs):
        print(args,kwargs)
    
    def rapper(*args,**kwargs):
        index(*args,**kwargs)
    rapper(1,2,3,x=1,y=2,z=3)

    表面上调用的是rapper的形参,但是rapper又原封不动的传给了函数index
    调用的rapper 的参数要符合index的参数规则
    (1, 2, 3) {'x': 1, 'y': 2, 'z': 3}
    
  • 相关阅读:
    alt属性和title属性
    穷人和富人的区别
    JS经典源码:通用JavaScript脚本函数库
    网页弹出框
    男女交往必知15个真理
    alexa排名
    好男人找不到女朋友的根源
    小笑话集(全是经典!)不信你不笑(转)
    送到家服务网2009年3月26日顺利上线了!
    [转]互联网产品开发中的“快”字诀
  • 原文地址:https://www.cnblogs.com/clairedandan/p/14117994.html
Copyright © 2011-2022 走看看