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

七大原则

  单一职责原则

  开闭原则

  依赖倒转原则

  里氏替换原则

  接口隔离原则

  合成聚合复用原则

  迪米特法则

  

原文地址:https://www.cnblogs.com/zl666/p/8588009.html

时间: 2024-10-07 04:29:53

Python第三周之面向对象之深刻学习的相关文章

Python第三周习题集(一)

# 工资结算系统 1. 部门经理 1.5万元/月 2. 程序员 工作时间 150元/小时 3.销售员 1200底薪,+ %5销售额的提成 # 给你员工,得出工资. 员工类,父类 下面3类子类.#我写的 class Staff(object): def __init__(self, name, age): self._name = name self._age = age @property def name(self): return self._name @property def age(s

python第三周学习内容

1.集合: 集合的创建: list_1 = set([1,2,3,4,5]) list_2 = set([2,3,44,7,8]) 集合的特性:集合是无序的,集合可以去掉重复的元素 集合的操作:求交集: print(list_1.intersection(list_2)) #{2,3} print(list_l & list_2) #求交集,{2,3} 求并集: print(list_1.union(list_2)) #{1,2,3,4,5,7,8,44} print(list_l | list

python第三周基本数据类型,字符,字符串,time库,format()

目录 整数类型: 浮点数类型: 复数类型: 数值运算函数: 字符串类型及操作: 1,字符串是字符的有序数列,可对其内的字符进行索引: 2.字符串操作符:{<参数序号>:<格式控制标记>} time库的使用:time库是python中处理时间的标准库 整数类型: 没有取数范围限制, 二进制以0b或0B开头:八进制以0o或0O开头:十六进制以0x或0X开头 浮点数类型: 取值范围数量级约为-10^308至10^308,精度数量为10^-16. 浮点数运算存在不确定位数,不是BUG,因为

python第三周

一.字符串的 name = "My \tname is {name} and {age}" print(name.capitalize()) #首字母大小 capita首都的意思print(name.count("r")) #count 查找字符串中某个字符的数量print(name.casefold()) #没什么用处print(name.center(50,"-")) #在字符未达到所要求的数量后,用后面的字符补全 内容在中间.print(n

python第三周文件处理和函数

#默认参数的值是在一开始定义的时候就传给了函数, # 在后来的修改中不会被修改. #默认参数的值必须放到位置形参参数的最后面 #默认参数使用的场景是一个参数不经常变得场景,所以参数一般是不可变类型.字符串 元祖 数字 res=1 def foo(x,y=res): print(x,y) res=10 foo("aaa")#结果是aaa 1 def foo(x,y,*t): print(x,y) print(*t) #(3, 4, 5) foo(1,2,3,4,5)#结果是:3 4 5

Python第三周 学习笔记(1)

字典 key-value键值对的数据的集合 可变的.无序的.key不重复 初始化: d = dict() d = {} d = dict(**kwargs) 如:d = dict(a=1,b=2) dict(iterable, **kwarg) 使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构 dict(mapping, **kwarg) dict.fromkeys(iterable, value) 字典元素的访问 d[key] 返回key对应的值value

王之泰201771010131《面向对象程序设计(java)》第三周学习总结

王之泰201771010131<面向对象程序设计(java)>第三周学习总结 第一部分:理论知识复习部分 第一章 回顾了Java"白皮书"的关键性语句,再次理解了以前未理解的句子.对Java语言的十多种特性又有了更深刻的理解和不同角度的体会. 第二章 继续使用eclipse实验开发程序,在jdk源文件中仔细欣赏体会了标准代码的范例,以此来规范自己的编写风格. 第三章 第三章中复习了Java的基本语法,着重复习了运算符的使用和文件的输入输出,深刻理解了例如:控制流程语句等五种

杨其菊201771010134《面向对象程序设计(Java)》第三周学习总结

<面向对象程序设计(Java)>第三周学习总结 第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语言按程序的方式可以分为两种:编译型和解释型 编译型:C,C++,Objective-C,Pascal等: 解释型:Ruby,Python, 半编译型:Visual Basic, java:既是编译型语言又是解释型语言. 2.classpath 环境变量的设置:如果使用1.5以上的版本,完全可以不用设置这个环境

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0