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

 

七大原则

  单一职责原则

  开闭原则

  依赖倒转原则

  里氏替换原则

  接口隔离原则

  合成聚合复用原则

  迪米特法则

  

 

posted @ 2018-03-17 10:39  摇还是不摇  阅读(191)  评论(0编辑  收藏  举报