列表推导式
-
推导式分为 列表推导式、字典推导式、集合推导式等。在这里我们主要说其中一种也是用的最多列表推导式
-
列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表
-
列表推导式两种表达方式:
1、[表达式 for 变量 in 旧列表]
2、[表达式 for 变量 in 旧列表 if 条件]
- 实例1:
list1 = ['cheney', 'tony', 'jerry', 'amy', '居然']
list2=[name+'新年好' for name in list1 if len(name)>3]
print(list2)
- 实例2:
# 求1-100之间能被3整除的数
list3 = [i for i in range(2, 100) if i % 3 == 0]
print(list3)
- 实例3:
# 求1-100之间能被3整除的数 也能被6整除
list4 = [i for i in range(2, 100) if i % 3 == 0 and i % 6 == 0]
print(list4)
生成器
背景
通过列表推导式我们可以直接创建出一个列表,但是受到内存的限制,我们不可能创造出一个无限大的列表。而且创建一个有200万个元素的列表,会占用很大的内存空间,而这个时候我们仅仅需要访问列表中几个元素,那么后面的元素就占用着空间就是一种浪费的行为。那么我们可不可以用几个元素就创建出几个元素。这样在一定程度上就优化了内存。那么在Python中有一种一边循环一边计算的机制就是生成器(阅后即焚)
创建生成器的方式
- 通过列表推导式的方式
g = (x * 3 for x in range(10))
- 通过函数的方式
def fu():
n = 0
while True:
n += 1
yield n
- 生成器的特征:生成一个生成器,一旦数据取完了,那么数据就不存在了(阅后即焚)
def fun():
for i in range(10):
yield i
r = fun()
print(next(r))
print(next(r))
list1=[i for i in r]
print(list1)
迭代器
迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,指导所有元素被访问完结束。
可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
生成器是可迭代的,也是迭代器
列表是可迭代的,但不是迭代器
通过iter()函数可以将可迭代的变成一个迭代器
生成器是迭代器的一种形式。
迭代器特点-------->阅后即焚
- 关系对应图
- 说明列表非迭代器
list2=[1,2,3,4,5,6]
list3=[i for i in list2]
print(list2)
print(list3)
字典和元祖以及其他都可以使用这种方式去辨别。
面向对象简介
概念
Python是一门面向对象的编程语言
• 所谓面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的
面向过程
• 面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序
• 这种编写方式往往只适用于一个功能,如果要实现别的功能,往往复用性比较低
• 这种编程方式符号人类的思维,编写起来比较容易
例如
• 1.妈妈穿衣服穿鞋出门
• 2.妈妈骑上电动车
• 3.妈妈到超市门口放好电动车
• 4.妈妈买西瓜
• 5.妈妈结账
• 6.妈妈骑电动车回家
• 7.到家孩子吃西瓜
• 面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象一切皆对象
• 以上方式可以用 孩子妈妈给孩子买瓜来解决
• 面向对象的编程思想,将所有功能统一保存到对应的对象中,要使用某个功能,直接找到对应的对象即可
• 这种编码方式比较容易阅读,并且易于维护,容易复用。但是编写的过程中不太符合常规的思维,编写相对麻烦
面向过程是关注的每一个过程,每一个细节
面向对象关注的是这个事情的结果
类的简介
我们目前学习的都是Python的内置对象,但是内置对象并不都能满足我们的需求,所以我们在开发中经常要自定义一些对象
类简单理解它就是相当于一个图纸,在程序汇总我们需要根据类来创建对象。
类就是对象的图纸
我们也称对象是类的实例(instance)
如果多个对象是通过一个类创建的,我们称这些对象是一类对象
# 语法
class 类名([父类]):
pass
类也是一个对象,类就是用来创建对象的对象
可以像对象中添加变量,对象中的变量称之为属性 语法:对象.属性名 = 属性值
# MyClass 是类的名称 MyClass()是类的实例化 创建类的对象
class MyClass():
pass
mc = MyClass() # 创建对象也称呼为类的实例化
mc1 = MyClass() # 创建对象也称呼为类的实例化
mc2 = MyClass() # 创建对象也称呼为类的实例化
mc3 = MyClass() # 创建对象也称呼为类的实例化
# isinstance 检测一个对象是不是这个类的对象
r = isinstance(mc, MyClass)
print(r)
类的使用
• 类和对象都是对现实生活中事物的抽象
• 事物包含两部分
• 1. 数据(属性)
• 2. 行为(方法)
• 调用方法 对象.方法名()
• 方便调用和函数调用的区别:如果是函数调用,调用时有几个形参,就会传递几个实参。如果是方法调用,默认传递一个参数,所以方法中至少得有一个形参
• 在类代码块中,我们可以定义变量和函数
• 变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问
• 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名的形式访问
class Person():
name='刘德华'# 数据 (1、属性)
def speak(self): # 能做什么事情 行为 (2、方法)
print('%s唱歌很好听'%self.name)
p1=Person() # 实例化对象
p2=Person() # 实例化对象
p1.name='张学友'
p2.name='郭富城'
p1.speak()
p2.speak()
拓展:lambda用法
链接: link
- 在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。
- ambda是函数
语法:
- lambda与map结合例子:map(fun,iterable)—>返回包含每次 function 函数返回值的新列表
a=list(map(lambda x: x*x,[y for y in range(10)]))
执行结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- filter与map结合例子:filter(fun,iterable)—>每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
a=list(filter(lambda x:x%2==0,(i for i in range(10))))
print(a)
执行结果:
[0, 2, 4, 6, 8]