• 函数



    1、函数有3种形式
    1)语句形式: foo()
    def foo():
      pass
    2)表达式形式: 3*foo()
    def foo():
      return 1
    print(3*foo()) //3
    3)当做另一个参数的函数:foo(foo('hehe'))
    def foo(a):
      print(a)
    foo(foo('hehe'))// hehe hehe


    2、函数是第一类对象,即函数可以被当做数据传递
      1)可以被引用
      def bar():
        print('hehe')
      res=bar
      res()
      2)可以当做参数传递
      def bar(a):
        print(a)
      bar(bar(1))


      3)返回值可以是函数
      def foo():
        print('1')
      def bar():
        print(foo)
        return foo
      a=bar()
      a()


    4)可以当做容器类型的元素
    def foo():
      pass
    def bar():
      pass
    li=[bar,foo]
    li[0]()
    li[1]()

    3、函数的参数
    1)形参和实参定义
    2)形参为变量名,实参为变量值,函数调用就是把值绑定在名字上,函数调用完成,接触绑定
    3)参数的分类:
      位置参数:按照从左往右的顺序定义参数
      位置形参:必须要传入值
      位置实参:按照位置给参数传值
      关键字参数:按照key=value的形式定义实参不用按照位置给形参传值
    需注意:关键字实参必须在位置实参后边
    #正确
    def foo(a,b,c):
      pass
    foo(1,2,c=3)
    #错误
    def foo(a,b,c):
      pass
    foo(1,c=3,2)
    2、同一个形参不能重复传值
    #错误
    def foo(a,b,c):
      pass
    foo(1,2,3,b=4)
    默认参数:形参定义时赋好的值,实参可以不必给默认形参传值
    需注意:1、只在执行定义的时候赋一次值
    2、默认参数定义在位置参数右面
    #正确
    def foo(a,b,c=1):
      pass
    #错误
    def foo(a,c=1,b):
      pass
    3、默认参数通常定义成不可变类型(不定义成列表字典)
    可变长参数:1、针对实参在定义时长度不固定的情况,形参可接受任意长度实参:
          2、而实参有位置实参和关键字实参两种方式,形参也有对应的两种方式接受不固定实参,*args,**kwargs。
    实例分解:
    def foo(x,y,*args):
      pass
    foo(1,2,3,4,5)
    ==>
    def foo(x,y,*args)):
      pass
    foo(1,2,*(3,4,5))
    ==>
    def foo(1,2,*(3,4,5))):
      pass
    foo(1,2,*(3,4,5))
    #执行foo时会将3,4,5传递给 *,会将3,4,5 做成元组(3,4,5)赋值给args
    #**kwargs
    def foo(x,y,**kwargs)
      pass
    foo(1,y=2,a=1,b=2,c=3)
    ==>
    def foo(x,y,**kwargs)
      pass
    foo(1,y=2,**{'a':1,'b':2,'c':3})
    ==>
    def foo(1,2,**{'a':1,'b':2,'c':3})
      pass
    foo(1,y=2,**{'a':1,'b':2,'c':3})
    #调用foo时会将a=1,b=2,c=3 转化为**{'a':1,'b':2,'c':3},{'a':1,'b':2,'c':3}传入kwargs
    #命名关键字参数:*后定义的参数,必须被传值(有默认值除外)且必须按照关键字实参的形式传递可以保证,传入的参数中一定包含某些关键字
    def foo(x,y,*args,a=1,b,**kwargs):
      print(x,y)
      print(args)
      print(a)
      print(b)
      print(kwargs)
    foo(1,2,3,4,5,b=3,c=4,d=5)
    ==>
    1,2
    (3, 4, 5)
    1
    3
    {'c': 4, 'd': 5}


  • 相关阅读:
    实体类、边界类和控制类
    面向对象分析和面向对象设计的区别
    面向对象分析与设计的步骤
    用例图:从用户角度描述系统功能,并指各功能的操作者
    面向对象分析和设计(OOA/D)
    在UML系统开发中有三个主要的模型
    UML建模之活动图介绍(Activity Diagram)
    活动图本质上就是流程图
    流程图
    流程、业务与事务
  • 原文地址:https://www.cnblogs.com/kunixiwa/p/7194251.html
Copyright © 2020-2023  润新知