zoukankan      html  css  js  c++  java
  • Python第三周之面向对象之深刻学习 (函数。参数 嵌套函数 装饰器 作用域 类和对象 七大原则)

    函数

    名字 

      命名方法(官方方法,驼峰命名法)

      命名原则:1.由数字,下划线和字母组成,且不能由数字开头。

           2.不能命名关键字

           3.区分大小写,大写为常量

    参数 

      默认值

      可变参数   * args

    def say_hello(*args):
        print(args)
    
    
    def main():
        a_list = [1, 2, 3, 4, 5, 'zhangli', 24]
        say_hello(*a_list)
    
    
    if __name__ == '__main__':
        main()

      关键字参数  **kwargs

    def say_hello(**kwargs):
        print(kwargs)
    
    
    def main():
        a_set = {'name': 'zhangli','age': 24, 'sex': 'female'}
        say_hello(**a_set)
    
    
    if __name__ == '__main__':
        main()

      命名关键字参数  *

    def foo(a, b, c, *, name, age):
        print(a+b+c)
        print(name, ':', age)
    
    
    def main():
        foo(1, 2, 3, name='zhang', age=24)
    
    
    if __name__ == '__main__':
        main()

    返回值

      对象

      字符串

      元组

      集合

    嵌套函数

      高阶函数 函数里面再次调用函数

    # 通过向函数中传入函数,可以写出更通用的代码
    # calc函数中的第二个参数是另一个函数,他代表了一个二元运算
    # 所以calc函数变得通用性更强,可以由传入的第二个参数来决定到底做什么
    # 高内聚, 低耦合 high cohesion low coupling
    def calc(my_list, op):
        total = my_list[0]
        for index in range(1, len(my_list)):
            total = op(total, my_list[index])
        return total
    def add(x, y):
        return x + y
    
    
    def mul(x, y):
        return x * y
    
    
    def main():
        my_list = [1, 3, 5, 7, 9]
        print(calc(my_list, add))
        print(calc(my_list, mul))
    
    
    if __name__ == '__main__':
        main()

      # 装饰器

    def record(fn):
        def wrapper(*args, **kwargs):
            print('准备执行%s函数之前...' % fn.__name__)
            print(args)
            print(kwargs)
            # 此行代码在执行被装饰的函数
            # 在这行代码的前后我们可以附加其他的代码
            # 这些代码可以让我们在执行函数时做一些额外的工作
            val = fn(*args, **kwargs)
            print('%s函数执行完成' % fn.__name__)
            return val
        return wrapper
    
    
    # 通过修饰器修饰f函数,让f函数在执行时,可以进行更多的操作
    @record  # 合二为一
    def f(n):
        if n == 0 or n == 1:
            return 1
        return n * f(n-1)
    
    
    if __name__ == '__main__':
    
        print(f(5))
    
    # 装饰器 让我们看出函数里面到底发生了什么。

      lambda函数 (匿名函数)-- 此函数极短,故简写,直接写在放参数的括号里

      闭包

      偏函数

      柯里化

    作用域

      局部作用域

      嵌套作用域

      全局作用域

      内置作用域

    标志符 LEGB  local enclose global build_in (nonlocal global)

    类和对象

    类的定义

      1.类是对象的蓝图和模板,有了类就可以定义对象

      2.类最重要的就是数据抽象和行为抽象

      3.数据抽象:抽取对象的共有的静态特征 -- 属性

      4.行为抽象:抽取对象的共有的行为特征 -- 行为

    对象的关系

      use a   依赖关系(作用和反作用)

      have a   关联(普通/ 聚合/合成)(你中有我,我中有你)

      is a  继承关系   从已经有的类创建新类的过程
      # 提供继承信息的称为父类(超类/基类)
      # 得到继承信息的称为子类(派生类/衍生类)
      # 通过继承我们可以将子类中的重复代码,抽取到父类中。
      # 子类通过继承,并复用这些代码,来减少重复代码的编写
      # 将来如果要维护子类的公共代码,只需要在父类中进行操作即可

    七大原则

      单一职责原则

      开闭原则

      依赖倒转原则

      里氏替换原则

      接口隔离原则

      合成聚合复用原则

      迪米特法则

      

  • 相关阅读:
    JVM调优之Tomcat启动加速(二)
    JVM调优(一)
    安装SqlServer的时候性能计数器注册表配置单元一致性失败的解决办法
    VS2013崩溃,无法打开项目的解决方案
    C#实现函数默认值和C#4.0实现默认值
    日志管理
    PXE网络装机服务
    NFS网络共享搭建
    NFS共享
    linux文件系统文件删除并恢复
  • 原文地址:https://www.cnblogs.com/zl666/p/8588009.html
Copyright © 2011-2022 走看看