python l1 python L1 编程_迭代

之前讲了python基本数据类型和组合数据类型
is操作符可以判断类型的不太之处
对象有很多标识,当作内存地址,就是唯一标识符

python l1 python L1 编程_迭代_02


id看l4第0个元素
number1也是同一个元素
虽然是两个不同的变量,但是可以引用一个元素

python l1 python L1 编程_python l1_03


**is判断是否同一元素

下面的比较是l1和l3是否同一个对象,并不是比较值是否相同 **

python l1 python L1 编程_迭代_04


但是l1[0]和l3[0]是同一个对象

python l1 python L1 编程_python l1_05


不是同一个对象,但是可以引用内部的同一个对象,因为123不可变,节约空间可以这么玩

python l1 python L1 编程_python_06


比较l1和l3的值是否一样,对象是不一样的

python l1 python L1 编程_python_07


type l1和l3都是列表
是类型比较
对象比较 使用is,对象类型比较 使用type is,对象值比较使用 ==,

python l1 python L1 编程_迭代器_08


is
引用的比较:
l1 == l2 :对象值的比较
l1 is l2 : 是否为同一个对象
type(l1) is type(l2 ):两个对象的类型是否相同

python l1 python L1 编程_迭代器_09


**python 一个编程语言最基本的组成片段是表达式,组成的语句,表达式通常是一个或多个操作数,0个以上操作符组成的序列

算术表达式,比较表达式 ,赋值表达式

**表达式操作符:
+,-,*,/
&,|,^ and 或 异或
and,or,not 逻辑与或非
* * 次方,%取模,//真除法,
[i:j:k]步进的
()
x.attr 取属性,指明属性引用
()元组定义
[]列表定义
{}字典定义
表达式有优先级,最后三个优先级最高,然后是切片,

python l1 python L1 编程_迭代器_10


**整个程序是语句+表达式组成,控制流类似bash,选择执行 if ,循环执行 while for **

python l1 python L1 编程_python_11


python l1 python L1 编程_迭代_12


等值比较和身份判定

python l1 python L1 编程_python_13

python l1 python L1 编程_迭代器_14


按照abcd这样 的次序

python l1 python L1 编程_python_15


先排序,排序后按键值进行比较,有的键i相同就比较值

python l1 python L1 编程_python l1_16

python l1 python L1 编程_python l1_17


链接多个条件无非就是与或非

python l1 python L1 编程_迭代器_18


一定要记得缩进4个字符,同一级别下,缩进字符必须相同

python l1 python L1 编程_python_19


l1和l2的确相同

python l1 python L1 编程_python_20


如果不小心缩进字符有问题,就会报错 indentationerror缩进语法错误

python l1 python L1 编程_迭代_21


这就是if语句
if语句的基本语法结构
if boolexpr1: 双分支
suite1
else
suite2

if boolexpr1: 单分支
suite1
if boolexpr1: 双分支
suite1
elif
suite2
。。。
else:
suiten

python l1 python L1 编程_迭代器_22


还有三元表达式
expression1 if boolexpr else expression2
如果条件为真执行 expression1 否则 执行 expression2

python l1 python L1 编程_python l1_23

python l1 python L1 编程_迭代器_24

python l1 python L1 编程_迭代_25


for经常遍历字符串,元组列表,以及其他任何内置可迭代对象

python l1 python L1 编程_迭代_26

python l1 python L1 编程_迭代_27


隐性迭代

python l1 python L1 编程_python l1_28

python l1 python L1 编程_python l1_29


else只是在循环中止,条件测试为假时,执行一次,用于做收尾工作

python l1 python L1 编程_迭代_30

python l1 python L1 编程_python l1_31


else之后的语句在循环退出了才执行,
如果从来没循环呢

python l1 python L1 编程_python_32


while也支持这么几个独特的语句

python l1 python L1 编程_迭代器_33

python l1 python L1 编程_迭代_34

python l1 python L1 编程_python l1_35


只有条件满足时才break,或者continue
如果是break,else是不会执行的,有语法错误,else也不会执行

python l1 python L1 编程_python l1_36


iterable表示可以迭代对象,通过遍历完成循环

python l1 python L1 编程_python_37


这个列表有4个元组组成,循环的时候
a=1,b=2循环一次a=3,b=4
每一个序列都是一个可迭代对象

python l1 python L1 编程_迭代器_38


list强行把字符串转换成列表元素

python l1 python L1 编程_python l1_39

python l1 python L1 编程_迭代_40

python l1 python L1 编程_迭代_41


python2是两个内置函数,python3是一个,统一到range上,与bash的{1…10}类似

python l1 python L1 编程_python l1_42

python l1 python L1 编程_迭代_43


表示从0开头
help range的用法
支持跟一个数值
也支持从哪开始,到哪结束,三个数值,表示步长

python l1 python L1 编程_迭代_44


100以内的奇数
在python3是一个个给你,节省内存
在python2不是,range是一次给所有列表
xrange才是一次只给一个结果

python l1 python L1 编程_迭代器_45

python l1 python L1 编程_迭代器_46

python l1 python L1 编程_迭代_47

python l1 python L1 编程_python l1_48


zip就是拉链,把两个不相关的内容结合在一起
并行遍历

python l1 python L1 编程_python l1_49


iterable(任何对象)能判定,一次返回一个成员对象,这种称为可迭代对象(对象自己实现了__iter__方法)

python l1 python L1 编程_python_50


所有的序列都可迭代(list,str,tuple元组),

python l1 python L1 编程_python l1_51


iter和getitem方法酒标它是一个可迭代对象
显示了一个列表中可迭代器的一个对象的地址

python l1 python L1 编程_迭代_52


不一样是因为,第一个元素的地址,第二个元素的地址

python l1 python L1 编程_迭代_53


**这是基于元素地址的方式来实现的

getitem和iter都是一次迭代一个

s是可迭代对象

a就不是

**

python l1 python L1 编程_python l1_54

python l1 python L1 编程_迭代器_55

python l1 python L1 编程_python l1_56


游标可以想象成有多个元素,文件有多行,当我们引用这个文件的行时,第一次没定义话的,就指向第一个,依次往下,游动的指针,游动的标记
迭代器又称游标,它是一种可在容器物件(列表就是容器物件)上实现元素遍历的接口

python l1 python L1 编程_python l1_57


所以迭代器指的是你的容器物件之上的游标,支持游标机制的称为可迭代对象迭代协议就是一次返回一个,不想那么复杂

python l1 python L1 编程_python_58

任何对象使用iter方法可以生成一个迭代器,变量可以引用这个地址的对象
myiter就是一个可迭代对象,调用myiter的next的方法,一次可以返回一个值,以知道最后异常中止

python l1 python L1 编程_迭代器_59


直接写l1.__next不行,因为只是一个可迭代对象,不是迭代器,就需要赋值给变量,来迭代,其中包含__next
在python2不要下划线

python l1 python L1 编程_迭代器_60

python l1 python L1 编程_迭代器_61


for循环隐含了一个迭代对象帮你生成一个迭代器的

python l1 python L1 编程_迭代_62

python l1 python L1 编程_python_63


根据一个表达式生成一个列表,叫列表解析
比如生成一个100以内所有偶数生成的列表

python l1 python L1 编程_迭代器_64


可以把这个表达式直接放在中括号里,不加print和for,会自动给你生成一个列表

python l1 python L1 编程_python_65


0-8的每个平方所构成的列表

python l1 python L1 编程_迭代器_66


用一个表达式来生成列表的操作叫列表解析

python l1 python L1 编程_迭代器_67


本身就是一个可迭代对象,遍历所有元素之后所生成的结果1到11的,求立方

python l1 python L1 编程_python_68


列表解析还可以加if语句,只有符合条件的才能进入元素

python l1 python L1 编程_python l1_69

求100以内的奇数可以这么写,只有符合条件的才能进入列表解析中去,否则不予进入

python l1 python L1 编程_python_70

python l1 python L1 编程_python_71

python l1 python L1 编程_python l1_72

python l1 python L1 编程_迭代_73

python l1 python L1 编程_python l1_74


**如果只想一次用一个,可以定义生成器而不是迭代器,迭代器基于列表解析生成的结果是整个列表,它将始终放在内存中,如果一次只使用一个,生成器就是一次只生成一个,这样就比较节省内存,

所以生成器并不真正创建列表,而是返回一个生成器对象,而后一次做一次生成,就跟迭代器的next方法一样,next方法是一次只取一个而已,对象是在的

**

python l1 python L1 编程_迭代器_75


生成器是放在小括号里的,会返回一个生成器对象
生成了一个对象,就是要加.点

python l1 python L1 编程_迭代器_76