首页 > 编程语言 >Python函数

Python函数

时间:2022-11-14 22:22:38浏览次数:45  
标签:__ 函数 Python self init print class def

1. 函数的定义

  1. 函数代码用关键字def声明,后接函数标志性名称(参数)

  2. 函数参数放置()中,可以有零个或多个

  3. return 表达式结束函数

  4. 匿名函数:lambda

    1. lambda函数的主体是一个表达式,封装量非常有限

    2. lambda函数拥有自己的命名空间,不能访问自己参数列表之外或全局里的变量

    3. lambda函数只有一行

匿名函数
    x_ = lambda name, age: print(f'{age}岁的{name}')
    x_('小米',22)        # 22岁的小米
    
函数中封装匿名函数
    def myFunc(n):
        return lambda a: a * n
    print(myFunc(2)(10))        # 20

 

  5. 参数的几种类型:

    1. 必须参数:如果函数在声明的时候带了形参,则调用的时候必须传入参数

    2. 关键字参数:关键字参数在传入时可以不按顺序,会根据参数的名称进行匹配

    3. 默认参数:即在声明的时候形参携带了默认参数,如果调用的时候没有进行传参,则使用默认参数

    4. 不定长参数:

      1. *       带了*号的参数会以元组的形式传入,存放所有未命名的变量参数

      2. **        带了**号的参数以字典的形式传入

      3. * 单独出现  *号导读出现,则*号后面的参数必须以关键字形式传入   

不定长参数
    * 以元组形式导入
        def printInfo(arg1, *argTuple):
            print(arg1)        # 10
            print(argTuple)      # (20, 30, 40)  后续为未名的变量以元组形式存放
            return
        printInfo(10,20,30,40)

    ** 以字典的形式导入
        def  printInfo(arg, **argDict):
            print(arg)          # 1
            print(argDict)            # {'a'=A, 'b'=B}
            return
        printInfo(1, a='A', b='B')

    * 单独出现
        def printInfo(arg1, arg2, *, arg3):
            print(arg1+arg2+arg3)
            return
        printInfo(1, 2, arg3=3)                # 6

 

2. 递归函数

  递归函数就是函数调用自身的过程 

例1:用递归函数实现数额阶乘
    常规函数实现方式
    def jiehceng(n):
        result = n
        for i in range(1,n):
            result *= i
        return result
    print(jiecheng(4))            # 24

    递归函数实现阶乘
    def factRecur(n):
        if n == 1:   return 1
        else:
            return n * factRecur(n-1)
    print(factRecur(4))            # 24

例2:递归函数实现斐波那契数列
    def fibRecur(n):
        if n == 1 or n == 2:   return 1
        else:
            return fibRecur(n-1) + fibRecur(n-2)
    print(fibRecur(10)                # 55

 

3. 构造函数

构造函数:类对象初始化的时候自动调用,用__init__命名,一个class类中只有一个构造函数
    例:
    class gouZao:
        def  __init__(self, name, age):
            self.name = name
            self.age = age
        def person(self):
            return f'我叫{self.name},今年{self.age}岁。'

  gou = gouZao('张三','21')    # 我叫张三,今年21岁。

构造函数中子类重写父类的方法
  class father:
    def __init__(self,x):
      self.x = x
    def write(self):
      print('我是父类的方法')

  class son(father):
    def __init__(self):
      pass
    def write(self):
      print('我是子类的方法')
  mySon = son()
  mySon.write()  # 我是子类的方法,因为方法名相同,所以父类的方法在子类继承后被重写了

强制调用父类的私有方法
  class Father:
    def __init__(self,x):
      self.x = x
    def __action(self):
      print('我是父类的私有方法')

  class Son(Father):
    def __init__(self):
      pass
    def action(self):
      super()._Father__action()

  Son().action()    # 我是父类的私有方法,子类要调用父类的私有方法,需要调用super函数,并且父类前面需要添加_下划线

构造函数继承,调用父类中未绑定的方法,会引发钻石继承问题
  class A:
      def __init__(self):
          print('我是A~')
  class B1(A):    def __init__(self):    A.__init__(self)    print('我是B1')
  class B2(A):   def __init__(self):    A.__init__(self)    print('我是B2')   class C(B1, B2):    def __init__(self):    B1.__init__(self)    B2.__init__(self)    print('我是C~')   c = C() # 连续打印了两次A的内容,不符合 解决钻石继承的问题————super(),继承父类的方法   class A:    def __init__(self):    print('我是A~')   class B1(A):    def __init__(self):    super().__init__()    print('我是B1')   class B2(A):   def __init__(self):    super().__init__()    print('我是B2')   class C(B1, B2):   def __init__(self):   super().__init__()    print('我是C~')   c = C()   # 类的方法解析顺序mro(),或者__mro__()   print(C.mro())   # [<class '__main__.C'>, <class '__main__.B1'>, <class '__main__.B2'>, <class '__main__.A'>, <class 'object'>]   print(B1.mro())   # [<class '__main__.B1'>, <class '__main__.A'>, <class 'object'>]   print(C.__mro__)  # (<class '__main__.C'>, <class '__main__.B1'>, <class '__main__.B2'>, <class '__main__.A'>, <class 'object'>)   print(B1.__mro__)  # (<class '__main__.B1'>, <class '__main__.A'>, <class 'object'>)

 

 4. 多肽

  

多肽:用一个函数调用类里面的方法,但是不确定调用的是哪个对象,首先类中要有函数中的方法
    class A:
        def XX(self):
            print('我是AXX')
        def YY(self):
            print('我是AYY')

    class B:
        def XX(self):
            print('我是BXX')
        def YY(self):
            print('我是BYY')

    class C:
        def XX(self):
            print('我是CXX')
        def YY(self):
            print('我是CYY')

    声明函数来调用不同的类
    def showTime(x):
        x.XX()
        x.YY()

    多肽调用
    showTime(A())
    showTime(B())
    showTime(C())

 

  

标签:__,函数,Python,self,init,print,class,def
From: https://www.cnblogs.com/chf333/p/16889310.html

相关文章

  • python传值以及深浅拷贝
    Python深拷贝和浅拷贝浅拷贝:指的是重新分配一块内存,创建一个新的对象,里面的元素是原对象里的各个子对象的引用。原来变量的内存不一样。深拷贝:指的是重新分配一块内......
  • Yii全局函数使用
    由于YII致力于完美的整合第三方库,它并没有定义任何全局函数。yii中的每一个应用都需要全类别和对象范围。例如,Yii::app()->user;Yii::app()->params['name'];等等。我们可以......
  • php filter函数库 (与变量和类型有关的扩展),可以过滤常用邮件,IP,变量数组等...
     filter扩展库简介 Thisextensionfiltersdatabyeithervalidatingorsanitizingit.Thisisespeciallyusefulwhenthedatasourcecontainsunknown(orfore......
  • 利用函数求一千到两千的闰年
    #include<stdio.h>intis_leap_year(inty){ if(y%4==0&&y%100!=0) return1; else return0; }intmain(){ intyear=0; for(year=1000;year<=2000;year++) { if(1==is_......
  • SQLServer内置函数实现MD5加密与解密
    SQLServer内置函数实现MD5加密⼀、MD5加密HASHBYTES('加密⽅式','待加密的值')加密⽅式=MD2|MD4|MD5|SHA|SHA1返回值类型:varbinary(maximum8000bytes)⼆、MD5......
  • python学习第六周总结
    封装封装:就是将数据和功能'封装'起来隐藏:在类的定义阶段名字前面使用两个下划线表示隐藏。就是将数据和功能隐藏起来不让用户直接调用,而是开发一些接口间接调用,从而可......
  • C语言程序设计· 按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。其中,n由用户从
    按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。其中,n由用户从键盘输入。已知n值不超过10。voidTranspose(int(*a)[N],intn);voidSwap(int*x,int*y);void......
  • PYTHON_排序
    准备分模块积累,此模块为【递推】。编写程序,输入一个包含20个整数的列表,对其中偶数下标的元素进行降序排列,奇数下标的元素不变。输出排序后的列表。(提示:使用切片。)输入样......
  • python-装饰器
    装饰器:装饰器可以用来做什么?作用:可以在不修改功能函数内部代码的情况下,给功能函数进行扩展的新功能(对开放封闭原理)1.装饰器可以给当前的功能进行扩展......
  • Loj 6053 简单的函数 min25筛
    #6053.简单的函数先求g(n,j)目的是为了在求S(n,j)的时候可以快速获取一些质数上的点的值。所以我们只要求g(n,j)的质数处的值正确即可其他值则不需要所以我们可以让g......