文章目录
一、高级编程
1.可迭代对象
- 我们已经知道可以对list、tuple、dict、set、str等类型的数据使⽤for…in…的循环语法从其中依次拿到数据进⾏使⽤,我们把这样的过程称为遍历,也叫迭代。
- 把可以通过for…in…这类语句迭代读取⼀条数据供我们使⽤的对象称之为可迭代对象(Iterable)。
2. 推导式
2.1 推导式
推导式分为 列表推导式、字典推导式、集合推导式等。在这⾥我们主要说其中⼀种也是⽤的最多列表推导式
列表推导式是Python构建列表(list)的⼀种快捷⽅式,可以使⽤简洁的代码就创建出⼀个列表简单理解就是由⼀个旧的列表来构建出⼀个新的列表
2.1.1 语法
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
# 语法
# [表达式 for 变量 in 旧列表]
# [表达式 for 变量 in 旧列表 if 条件]
list1=['zZk','海滨居士', '活在仁心']
def fun(lst):
new_list = []
for i in lst:
if len(i) > 3:
new_list.append(i)
return new_list
print(fun(list1))
#输出结果为:
['海滨居士', '活在仁心']
# 用推导式
list2 = [i for i in list1 if len(i) > 3]
print(list2)
#输出结果为:
['海滨居士', '活在仁心']
list2 = [i + '1' for i in list1 if len(i) > 3]
print(list2)
#输出结果为:
['海滨居士1', '活在仁心1']
# 需求:1-100之间能被3和5整除的数
list3 = [i for i in range(1,100) if i %3 == 0 and i % 5 == 0]
print(list3)
#输出结果为:
[15, 30, 45, 60, 75, 90]
3. 生成器
3.1 生成器
3.1.1 背景
通过列表推导式我们可以直接创建出⼀个列表,但是受到内存的限制,我们不可能创造出⼀个⽆限⼤的列表。⽽且创建⼀个有200万个元素的列表,会占⽤很⼤的内存空间,⽽这个时候我们仅仅需要访问列表中⼏个元素,那么后⾯的元素就占⽤着空间就是⼀种浪费的⾏为。那么我们可不可以⽤⼏个元素就创建出⼏个元素。这样在⼀定程度上就优化了内存。那么在Python中有⼀种⼀边循环⼀边计算的机制就是⽣成器
# 需求:取1-10000000000之间所有符贪整除3的数
list1 = (i for i in range(1,10000000000) if i % 3 == 0)
print(list1)
#结果要么算不出来,要么算得太久,因为太占用内存了
3.1.2 创建⽣成器的⽅式
3.1.2.1 通过列表推导式的⽅式
gen = (i for i in range(1,10) if i % 3 == 0)
print(gen)
#输出结果为:
<generator object <genexpr> at 0x000002BA0A11CEB0> #生成器对象
print(gen.__next__())
#输出结果为:
3
print(gen.__next__())
#输出结果为:
6
print(gen.__next__())
#输出结果为:
9
print(gen.__next__())
#输出结果为:
出现StopIteration(停止迭代)报错,超出生成器停止迭代次数
#也可以用如下方法
print(next(gen)) #跟gen.__next__()是一样的
3.1.2.2 通过函数的⽅式
def fun(): #一但使用了yield,fun就是一个生成器了
i = 0
while True:
i += 1
yield i
只要在函数中出现yield关键字它就是⼀个⽣成器函数
4. 迭代器
关系对应图
4.1 迭代器
迭代器是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历位置的对象。
迭代器对象从集合的第⼀个元素开始访问,直到所有元素被访问完结束。
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器Iterator
⽣成器是可迭代的,也是迭代器
列表是可迭代的,但不是迭代器
通过iter()函数可以将可迭代的变成⼀个迭代器
二、⾯向对象
1. ⾯向对象简介
- Python是⼀⻔⾯向对象的编程语⾔
- 所谓⾯向对象的语⾔,简单理解就是语⾔中的所有操作都是通过对象来进⾏的
- ⾯向过程
- ⾯向过程指将我们的程序分解为⼀个⼀个步骤,通过对每个步骤的抽象来完成程序
- 这种编写⽅式往往只适⽤于⼀个功能,如果要实现别的功能,往往复⽤性⽐较低
- 这种编程⽅式符号⼈类的思维,编写起来⽐较容易
- 1.妈妈穿⾐服穿鞋出⻔
- 2.妈妈骑上电动⻋
- 3.妈妈到超市⻔⼝放好电动⻋
- 4.妈妈买⻄⽠
- 5.妈妈结账
- 6.妈妈骑电动⻋回家
- 7.到家孩⼦吃⻄⽠
- ⾯向对象的编程语⾔,关注的是对象,⽽不注重过程,对于⾯向对象⼀切皆对象
- 以上⽅式可以⽤ 孩⼦妈妈给孩⼦买⽠来解决
- ⾯向对象的编程思想,将所有功能统⼀保存到对应的对象中,要使⽤某个功能,直接找到对应的对象即可
- 这种编码⽅式⽐较容易阅读,并且易于维护,容易复⽤。但是编写的过程中不太符合常规的思维,编写相对麻烦
2. 类(class)
-
我们⽬前学习的都是Python的内置对象,但是内置对象并不都能满⾜我们的需求,所以我们在开发中经常要⾃定义⼀些对象
-
类简单理解它就是相当于⼀个图纸,在程序汇总我们需要根据类来创建对象。
-
类就是对象的图纸
-
我们也称对象是类的实例(instance)
-
如果多个对象是通过⼀个类创建的,我们称这些对象是⼀类对象
#语法 class 类名([父类]): pass
-
类也是⼀个对象,类就是⽤来创建对象的对象
-
可以像对象中添加变量,对象中的变量称之为属性 语法:对象.属性名 = 属性值
3. 类的定义
-
类和对象都是对现实⽣活中事物的抽象
-
事物包含两部分
-
1.数据(属性)
-
2.行为(方法)
-
-
调⽤⽅法 对象.⽅法名()
class MyClass: #定义类(是一个对象) 是用来创建对象的对象 #方法 def fun(self): #方法是具休怎么去实现的 print(1111) #属性 pass mc = MyClass() #创建实例 mc.fun() #输出结果为: 1111 #可以创建N个实例,并且id地址不同 mc1 = MyClass() mc2 = MyClass() mc3 = MyClass() # 检查一个对象是不是一个类的实例 print(type(mc)) #输出结果为: <class '__main__.MyClass'> print(isinstance(mc, MyClass)) #输出结果为: True """ MyClass 类对象 mc 实例对象,是通过类来创建的 mc = MyClass() 1.类怎么创建? class 类名(): 括号可以可不加 pass 2.类是什么(作用是干嘛)? 实现功能、创建实例对象 3.实例怎么去创建? 实例名称=类名() 比如mc = MyClass() 4.实例是什么? 具现化功能,调用(使用、展示) 方法(功能) """
-
⽅便调⽤和函数调⽤的区别:如果是函数调⽤,调⽤时有⼏个形参,就会传递⼏个实参。如果是⽅法调⽤,默认传递⼀个参数,所以⽅法中⾄少得有⼀个形参
-
在类代码块中,我们可以定义变量和函数
- 变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问
- 函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象.⽅法名的形式访问