zoukankan      html  css  js  c++  java
  • 函数第二天

    形参:在定义函数时的参数
    实参:在调用函数时的参数
    形参与实参的关系:

    1. 在调用时实参会绑定形参
    2. 绑定关系只能在函数体内使用
    3. 实参与形参的绑定关系只有调用时生效,而调用结束后则解除绑定关系

    实参传值:

    复制代码
    # 形式一:
    func(1, 2)
    
    # 形式二:
    a = 1
    b = 2
    func(a, b)
    
    # 形式三:
    func(int('1'), 2)
    复制代码

    形参与实参的使用:

    位置参数:

      位置形参:在函数定义时,按照从左到右的顺序定义

        特点:必须被传值,形参有几个值,就要传入几个值

      位置实参:调用时按照从左到右的顺序依次传值

        特点:按照形参顺序对应传值

    def func(x,y):
        print(x,y)
    func(1,2)

    关键字参数:

      关键字形参:在函数调用时按照 keys 与 value 的形式传值

        特点:根据“变量名”传值且可以不按照顺序传值

    def func(x,y):
        print(x,y)
    
    func(y=2,x=1)

    位置参数与关键字参数的混合使用:

      1,位置实参必须放在关键字实参前

    func(1,y=2)

      2,不能同时给同一个形参传多个值

    func(1,y=2,x=3) #错误的演示

    默认参数:在定义函数时就已经被赋值的形参

        特点:定义时被赋值了调用时就可以不用赋值,当然也可以在重新赋值

    def func(x,y=3):
        print(x,y)
    
    
    func(x=1,y=44444)#y在形参定义时已经赋值了,但是调用函数时也可以在重新赋值
    复制代码
    def register(name,age,gender='男'):
        print(name,age,gender)
    
    register('三炮',18)
    register('二炮',19)
    register('大炮',19)
    register('没炮',19,'女')
    复制代码

    位置参数与默认参数的混合使用:

      1,位置形参必须在默认形参的左边

    def func(y=2,x):
        pass

      2,默认参数的值是在函数定义赋值的,准确的说是赋予了内存地址

    m=2
    def func(x,y=m): # y=>2的内存地址
        print(x,y
    m=3333333333
    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)
    
    func(1,2,3)
    func(4,5,6)
    
    new_l=[111,222]
    func(1,2,3,new_l)
    复制代码
    可变长度的参数(*与**的用法)
      可变长度指的是在调用函数时,传入的值(实参)的个数不固定
      而实参是用来为形参赋值的,所以对应着,针对溢出的实参必须有对应的形参来接收

    可变长度的位置参数
    I:*形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的格式然后赋值紧跟其后的形参名
    *后跟的可以是任意名字,但是约定俗成应该是args
    复制代码
    def my_sum(*args):
        res=0
        for item in args:
            res+=item
        return res
    
    res=my_sum(1,2,3,4,)
    print(res)
    复制代码
     II: *可以用在实参中,实参中带*,先*后的值打散成位置实参
    复制代码
    def func(x,y,z):
        print(x,y,z)
    
    # func(*[11,22,33]) # func(11,22,33)
    # func(*[11,22]) # func(11,22)
    
    l=[11,22,33]
    func(*l)
    复制代码
    III: 形参与实参中都带*
    def func(x,y,*args): # args=(3,4,5,6)
        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)
    func(*'hello') # func('h','e','l','l','o')
    可变长度的关键字参数
    I:**形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名
    **后跟的可以是任意名字,但是约定俗成应该是kwargs

    def func(x,y,**kwargs):
        print(x,y,kwargs)
    
    func(1,y=2,a=1,b=2,c=3)
    II: **可以用在实参中(**后跟的只能是字典),实参中带**,先**后的值打散成关键字实参
    def func(x,y,z):
        print(x,y,z)
    
    func(*{'x':1,'y':2,'z':3}) # func('x','y','z')
    func(**{'x':1,'y':2,'z':3}) # func(x=1,y=2,z=3)
    III: 形参与实参中都带**
    def func(x, y, **kwargs):
        print(x, y, kwargs)
    
    
    func(y=222, x=111, a=333, b=444)
    func(**{'y': 222, 'x': 111, 'a': 333, 'b': 4444})
    混用*与**:*args必须在**kwargs之前
    复制代码
    
    
    def index(x, y, z):
    print('index=>>> ', x, y, z)


    def wrapper(*args, **kwargs): # args=(1,) kwargs={'z':3,'y':2}
    index(*args, **kwargs)
    # index(*(1,),**{'z':3,'y':2})
    # index(1,z=3,y=2)


    wrapper(1, z=3, y=2)
     
    复制代码
  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/zhangjinyi97/p/12520098.html
Copyright © 2011-2022 走看看