• 函数


            1.   函数的使用原则

    储备知识:

    函数的使用应该分为两个明确的阶段:

    1定义阶段:只检测语法,不执行函数体代码、

    def fun():

      print(‘from func’)

    2调用阶段:会触发函数体代码的执行

    先定义后调用

    示范一

    def foo():

      print(‘from foo’)

      bar

    foo()

    示范二

    def bar ():

      print(‘from bar’)

    def foo():

      print(‘from foo’)

    foo()

    示范三

    def foo():

      print(‘from foo‘)

      bar()

    def foo():

      print(’from bar‘)

    foo()

    示范四

    def foo():

      print(’from foo’)

      bar()

    foo()

    def bar():

      print(‘from bar’)

    *************************************************************************************************************

                                  2. 函数的返回值

    return  值:

    注意点:

    1,函数的返回值没用类型限制

    2,函数的返回值没有个数限制

     2.1  返回多个值:多个返回值用逗号分隔开,返回的是元组形式

    def func():

      print('from func')

      return 1,1,1,'hello',[1,2,3]

    res =func()

    print(res,type(res))

    2.2返回1个值:返回的就是该值本身

    def func():

      return 123

    res =func()

    print(res,type(res))

    2.3 返回0个值或者干脆没用retunrn:返回None

    def func():

      retunrn

      pass

    res=func()

    print(res)

    return 除了有多个返回值的功能,还有结束函数执行的功能

    函数内可以有多个return,但只要执行一次,整个函数就立即结束

    def func():

      print(1)

      return

      print(2)

      return

      print(3)

    func()

    ************************************************************************************************************************

                       3  函数参数的使用

    细分:

    1.位置参数:

    1.1位置参数:在定义阶段,按照从左到右的顺序依次定义的的形参称之为位置形参

    特点:但凡按照位置定义的形参,必须被传值,多一个不行,少一个也不行

    def func(‘x,y,z’):

      print(‘x,y,z’)

    func(1,2)   错,少了一个

    func(1,2,3)   对

    func(1,2,3,4)  错,多了一个

    1.2位置实参:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参

    特点:

    1.与形参一一对应

    def func(x,y,z):

      print(x,y,z)

    func(2,1,3,)

    2.关键字实参:在调用阶段,按照key:value的形式定义的实参称之为关键字实参

    特点:可以完全打乱顺序,但是仍然能为指定的形参传值(总结:指名道姓地为指定形参传值)

    def func(x,y,z):

      print(x,y,z)

    func(x=1,y=2,z=3)

    fun(1,2,3)

    func(z=3,y=2,x=1)

    实参的形式可以是位置实参与关键字实参混合使用,但是必须循序原则:

      1.位置实参必须放在关键字实参的前面

      2.不能对同一个形参重复传值

    func(1,z=3,y=2)

    func(z=3,1,y=2)  #错误

    func(1,z=3,x=2,y=3)  #错误

     *************************************************************************************************

     1 可变长参数:
     2         可变长指的是实参值的个数不固定
     3         而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
     4 
     5         ===========*args===========
     6         def foo(x,y,*args):
     7             print(x,y)
     8             print(args)
     9         foo(1,2,3,4,5)
    10 
    11         def foo(x,y,*args):
    12             print(x,y)
    13             print(args)
    14         foo(1,2,*[3,4,5])
    15 
    16 
    17         def foo(x,y,z):
    18             print(x,y,z)
    19         foo(*[1,2,3])
    20 
    21         ===========**kwargs===========
    22         def foo(x,y,**kwargs):
    23             print(x,y)
    24             print(kwargs)
    25         foo(1,y=2,a=1,b=2,c=3)
    26 
    27         def foo(x,y,**kwargs):
    28             print(x,y)
    29             print(kwargs)
    30         foo(1,y=2,**{'a':1,'b':2,'c':3})
    31 
    32 
    33         def foo(x,y,z):
    34             print(x,y,z)
    35         foo(**{'z':1,'x':2,'y':3})
    36 
    37         ===========*args+**kwargs===========
    38 
    39         def foo(x,y):
    40             print(x,y)
    41 
    42         def wrapper(*args,**kwargs):
    43             print('====>')
    44             foo(*args,**kwargs)
    45 
    46 #5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递
    47 可以保证,传入的参数中一定包含某些关键字
    48         def foo(x,y,*args,a=1,b,**kwargs):
    49             print(x,y)
    50             print(args)
    51             print(a)
    52             print(b)
    53             print(kwargs)
    54 
    55         foo(1,2,3,4,5,b=3,c=4,d=5)
    56         结果:
    57             2
    58             (3, 4, 5)
    59             3
    60             {'c': 4, 'd': 5}
  • 相关阅读:
    vue递归组件的实现
    Vue左滑组件slider的实现
    vue 全局引用jq(打包后可能会遇到的问题)
    vue simple框架打包遇到报错问题
    HTML5 FormData实现文件上传实例
    长连接、短连接、长轮询和WebSocket
    解决axios IE11 Promise对象未定义
    Html5的map在实际使用中遇到的问题及解决方案
    Js参数RSA加密传输,jsencrypt.js的使用
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/frank007/p/9703305.html
Copyright © 2020-2023  润新知