资源&资料Python学习

生成器、面向对象、构造函数、正则表达式 (regular exp

2021-07-23  本文已影响0人  秋天丢了李姑娘

生成器

生成器是在程序运行时生成数据,与容器不同,它通常不会再内存中保留大量的数据,而是现用现生成。

生成器可以用算法动态的生成数据

生成器有两种

  1. 生成器函数
  2. 生成器表达式

生成器函数

含有yield 语句的函数 是生成器函数,此函数调用回返回一个生成器对象,生成器也是可迭代对象

yield 语句的语法

yield 表达式

生成器函数示例:

# 定义一个生成器函数, 有 yield 的函数调用后回返回生成器对象
def myrange(stop):
    i = 0
    while i < stop:
        yield i    # 为 遍历次生产器的for 语句提供数据
        i += 1

for x in myrange(5):
print('x=', x)

生成器表达式

( 表达式 for 变量 in 可迭代对象 [if 真值表达式])

[] 内容代表可以省略

面向对象编程 Object-Oriented Programming(OOP)

程序 = 数据 + 算法(操作数据的方式可方法)

函数式编程, 数据和行为(函数) 是分开的

Person1 = {
    'name': 'weimingze',
    'age': 35
}
Person2 = {
    'name': 'xiaozhang',
    'age': 18
}
def update_age(person):
    person['age'] += 1

update_age(Person1)
update_age(Person2)
  /-------> BYD  E6(京A.88888)    实例(也叫对象)
车(类)
  \-------> BWM  X5(京B.66666)    实例(也叫对象)

  /-------> 100    (对象)
int(类)
  \-------> 200    (对象)
  /---> True
bool(类)
  \---> False

int float dict list tuple

class 语句

构造函数

实例属性

每个对象可以有自己的变量,称之为实例属性

属性的使用语法

实例.属性名

遵循变量的赋值规则

删除属性用 del 语句

# 如
del car1.color

实例方法(instance method)

初始化方法(也叫构造器方法)

# 写一个小狗类

class Dog:
    def __init__(self, ...):
        pass

dog1 = Dog('白色', '藏獒')
dog1.eat(1, '羊肉')   # 白色 的 藏獒 吃了 1 斤 羊肉,
dog2 = Dog('灰色', '导盲犬')
dog2.eat(2, '狗粮')   # 灰色 的 导盲犬  吃了 2 斤 狗粮,

dog1.eat(2, '牛肉')   # 白色 的 藏獒 吃了 2 斤 牛肉,
dog1.info()   # 白色 的 藏獒 吃过 ['羊肉', '牛肉']
dog2.info()   # 灰色 的 导盲犬 吃过 ['狗粮']

答案

# 写一个小狗类

class Dog:
    def __init__(self, color, kind):
        self.color = color
        self.kind = kind
        self.foods = []  # 用来记录吃过的食物

    def eat(self, weight, food):
        print(self.color, '的', self.kind, '吃了', weight, '斤', food)
        self.foods.append(food)  # 追加到 foods 列表里

    def info(self):
        print(self.color, '的', self.kind, '吃过', self.foods)

dog1 = Dog('白色', '藏獒')
dog1.eat(1, '羊肉')  # 白色 的 藏獒 吃了 1 斤 羊肉,
dog2 = Dog('灰色', '导盲犬')
dog2.eat(2, '狗粮')  # 灰色 的 导盲犬  吃了 2 斤 狗粮,

dog1.eat(2, '牛肉')  # 白色 的 藏獒 吃了 2 斤 牛肉,
dog1.info()  # 白色 的 藏獒 吃过 ['羊肉', '牛肉']
dog2.info()  # 灰色 的 导盲犬 吃过 ['狗粮']

继承(inheritance)和派生(derived)

继承是从已经有的类中派生出新类,新类具有父类的属性和行为,并能扩展新的能力

派生是从已经有的类中衍生出新类,在新类的基础上可以添加属性和行为

# 继承的示例
# Human 类派生出 Student 类

class Human:  # 定义一个人类
 def say(self, what):
 '说'
 print("说:", what)

 def walk(self, distance):
 '走路'
 print('走了', distance, '公里')

class Student(Human):  # 定义一个学生了
 def study(self, subject):
 print('学习', subject)

class Teacher(Human):
 def teach(self, language):
 print('教', language)

h1 = Human()
h1.say('天气真好')
h1.walk(5)

s1 = Student()
s1.walk(4)
s1.say('有点累')
s1.study('面向对象')

t1 = Teacher()
t1.teach('Python')
t1.say('今天周四')
t1.walk(6)

覆盖

覆盖是指在有继承关系的类中,子类中实现了与父类中同名的方法,在子类实例调用该方法时,实际调用的是子类中的覆盖版本,这种现象叫覆盖

组合

class MyList:
    def __init__(self):
        self.data = []
        def append(self, n):
        self.data.append(n)
    def insert_head(self, n):
        self.data.insert(0, n)

L1 = MyList()   # MyList 类型的对象中包含一个 list 类型的对象,这种叫组合
L1.append(100)
L1.insert_head(0)

继承

class MyList(list):
    def insert_head(self, n):
        self.insert(0, n)

L1 = MyList()   # MyList 类型的对象中包含一个 list 类型的对象,这种叫组合
L1.append(100)
L1.insert_head(0)
print(L1)

多继承

多继承是指一个子类由两个或两个以上的父类(基类)

class 类名(基类1,基类2, ...):
语句块

多继承可能会带来程序运行的不确定性,谨慎使用

>>> class A:
...     def m(self):
...          print('A')
... 
>>> class B:
...     def m(self):
...         print("B")
... 
>>> class C(A, B):
...      pass
... 
>>> c = C()
>>> c.m()
A
>>> class D(B, A):
...     pass
... 
>>> d = D()
>>> d.m()
B

三个魔法方法

class Book:
    def __init__(self, title, author):
    '''初始化方法,在实例化时自动调用'''
        self.title = title  # 标题
        self.author = author  # 作者

    def __str__(self):                                   # 课间休息: 17:10 回来
    '''将对象转成字符的时候会调用'''
        return "《%s》" % self.title

    def __call__(self):
    '''将实例当成函数来调用,执行此函数内的代码'''
        print('《%s》是%s 编著的' % (self.title, self.author))

if __name__ == '__main__':
    b1 = Book('Linux 运维之道', '丁明一')
    print(b1)
    b1()

正则表达式 (regular express)

正则表达式是表示 文字的排列规则的一个字符串, 使用来匹配文字的匹配模式.

元字符

类别 元字符
匹配字符 . [...] [^...] \d \D \w \W \s \S
匹配重复 * + ? {n} {m,n}
匹配位置 ^ $ \b \B
其他 `

算出 100 ~ 999 的水仙花数
水仙花数是 指百位的3次方 + 十位的3次方 + 各位的3次方 等于原数的数
打印出所有的 水仙花数
例如: 153=1^3+5^3+3^3

打印 九九 乘法表
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
....
1x9=9 ........ 9x9=81

上一篇 下一篇

猜你喜欢

热点阅读