
1. 推导式
- 推导式分为 列表推导式、字典推导式、集合推导式等。在这里我们主要说其中一种也是用的最多列表推导式
- 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表
- 语法
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
- 案例:
# 找出长度大于3的人名
list1 = ['cheney', 'tony', 'jerry', 'amy', '居然']
list2 = [name+'新年好' for name in list1 if len(name) > 3]
print(list2)
# 求1-100之间能被3整除的数
list3 = [i for i in range(2, 100) if i % 3 == 0]
print(list3)
# 求1-100之间能被3整除的数 也能被6整除
list4 = [i for i in range(2, 100) if i % 3 == 0 and i % 6 == 0]
print(list4)
运行结果:
[‘cheney新年好’, ‘tony新年好’, ‘jerry新年好’]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
2. 生成器
背景
通过列表推导式我们可以直接创建出一个列表,但是受到内存的限制,我们不可能创造出一个无限大的列表。而且创建一个有200万个元素的列表,会占用很大的内存空间,而这个时候我们仅仅需要访问列表中几个元素,那么后面的元素就占用着空间就是一种浪费的行为。那么我们可不可以用几个元素就创建出几个元素。这样在一定程度上就优化了内存。那么在Python中有一种一边循环一边计算的机制就是生成器
创建生成器的方式
- 通过列表推导式的方式
g = (x * 3 for x in range(10))
- 通过函数的方式
def fu():
n = 0
while True:
n += 1
yield n
只要在函数中出现yield关键字它就是一个生成器函数
- 案例
def fun():
for i in range(10):
yield i
r = fun()
print(r)
list1 = [i for i in r]
list2 = [i for i in r]
print(list1)
print(list2)
运行结果:
<generator object fun at 0x0000029A8FBD72A0>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
3. 迭代器
关系对应图
- 迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束。
- 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
- 生成器是可迭代的,也是迭代器
- 列表是可迭代的,但不是迭代器
- 通过iter()函数可以将可迭代的变成一个迭代器
- 案例:
list1 = [1, 2, 3, 4, 5]
iterator = iter(list1)
print(type(iterator), iterator)
print(next(iterator))
print(next(iterator))
运行结果:
<class ‘list_iterator’> <list_iterator object at 0x000001DB832364E0>
1
2
4. 面向对象(上)
4.1 面向对象简介
- Python是一门面向对象的编程语言
- 所谓面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的
- 面向过程
- 面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序
- 这种编写方式往往只适用于一个功能,如果要实现别的功能,往往复用性比较低
- 这种编程方式符号人类的思维,编写起来比较容易
- 1.妈妈穿衣服穿鞋出门
- 2.妈妈骑上电动车
- 3.妈妈到超市门口放好电动车
- 4.妈妈买西瓜
- 5.妈妈结账
- 6.妈妈骑电动车回家
- 7.到家孩子吃西瓜
- 面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象一切皆对象
- 以上方式可以用 孩子妈妈给孩子买瓜来解决
- 面向对象的编程思想,将所有功能统一保存到对应的对象中,要使用某个功能,直接找到对应的对象即可
- 这种编码方式比较容易阅读,并且易于维护,容易复用。但是编写的过程中不太符合常规的思维,编写相对麻烦
4.2 类(class)
- 我们目前学习的都是Python的内置对象,但是内置对象并不都能满足我们的需求,所以我们在开发中经常要自定义一些对象
- 类简单理解它就是相当于一个图纸,在程序汇总我们需要根据类来创建对象。
- 类就是对象的图纸
- 我们也称对象是类的实例(instance)
- 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
语法
class 类名([父类]):
pass
- 类也是一个对象,类就是用来创建对象的对象
- 可以像对象中添加变量,对象中的变量称之为属性 语法:对象.属性名 = 属性值
4.3 类的定义
- 类和对象都是对现实生活中事物的抽象
- 事物包含两部分
- 1.数据(属性)
- 2.行为(方法)
- 调用方法 对象.方法名()
- 方便调用和函数调用的区别:如果是函数调用,调用时有几个形参,就会传递几个实参。如果是方法调用,默认传递一个参数,所以方法中至少得有一个形参
- 在类代码块中,我们可以定义变量和函数
- 变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问
- 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名的形式访问
- 案例:
class Person():
name = '刘亦菲' # 数据 (属性)
def speak(w): # 能做什么事情 行为 (方法)
print('我唱歌很好听')
p1 = Person()
p2 = Person()
p1.name = '周慧敏' # 这是给实例对象添加属性的方式
print(p1.name)
print(p2.name)
p1.speak() # 方法的使用
运行结果:
周慧敏
刘亦菲
我唱歌很好听