第五章节:条件与循环,以及其他
关于条件语句,循环语句,以及python独特的列表推导。
函数导入重命名:
如果有多个函数都叫做同一个名字则有歧义 》 使用import .. as ..,例如:
python可以多对多的赋值,python中叫做序列解包、可迭代对象解包。如果函数返回元组或其他可迭代对象,则方便很多(注意需要保持等号左右的目标数相同,否则报错)。
python支持链式赋值:
x = y = some_func()
和
y = some_func()
x = y
等价,
但和
x = some_func()
y = some_func()
不等价。
增强赋值:+=, *=, /=, %=等
python通过缩进来体现代码块。基于代码块,有条件语句、循环语句等。
条件语句:
当用作布尔表达式时,这些值被视为假:False,None,(各种数据类型的,包括浮点、复数等)0,“”,(),[],{},
其他元素被视为真。
注意 虽然[]和""都为假(即bool([]) == bool("") == False),但它们并不相等(即[] != "")
if语句
if else 语句
条件表达式:类似C语言的三目运算符。status = value1 if condition else value2
elif 语句
if语句可以嵌套
if中的条件:
需要注意:
1. 两者是否能比较,以及是否有比较的意义?
2. == 和 is 的异同:is检查两个对象是否相同,==检查两个对象是否相等。两个对象可以相等但不相同,或者两个对象其实是同一个。
3. is不可以用于数字,字符串等不可变基本值,因为结果不可预测,他们并不是变量,没有稳定的分配地址。
in:判断是否在序列/映射中
短路:布尔运算符只执行必要计算。知道就可以,通常不会出什么问题。业务中通常有代码规范,不会允许在条件表达式中夹带任何可以执行的代码私货。
断言:assert,提早推出程序及时止损。
循环:
while,for
字典的迭代:
因为字典没有顺序,如果顺序很重要,可将键或值存储在一个列表中并对列表排序,再进行迭代。
要让映射记住其项的插入顺序,可使用模块collections中的 OrderedDict类
迭代辅助函数:
一个更好用的是zip,把两个序列缝合起来,返回一个由元组组成的序列。
注意当两个序列长度不同的时候,只会选取公共的最短序列长度。
enumerate获取索引:
反向和排序:
break可以提前跳出循环体,相比之下,continue会跳过当前迭代,继续执行循环体。
while True break组合可以成为一个最简单的有限状态机,或工作流。
如果想再循环正常结束时才做某种措施,例如:
或者,更简单的示例:
,因为循环体也有状态布尔值。
简单推导:
加入判断条件:
多个for组合在一起:
使用圆括号在后面介绍生成器。
字典推导:
pass:什么都不做,是个占位符,为了语法需要。注:文档字符串某种程度有pass的功能。
del:思考python的垃圾收集机制:
python中根本没有办法删除值。都是靠垃圾回收机制来自动回收的,del只是删除了名称。类似与C++的智能指针,python的垃圾回收自己会监控这个元素实际的值在后续是否还会被引用,如果没有了,其就会立刻删掉。
exec:将字符串当做代码来执行
eval:类似exec,更弱一些,用来计算输入的python表达式的值。
exec和eval很不安全,不建议采用。
本章小结:
你应该学会了:
1. 打印
2. 导入
3. 赋值
4. 何为代码块
5. 条件语句if以及一些注意事项,例如is和==的区别,布尔变量对哪些值认为是假,is为什么不能用于判断数字、字符串
6. 断言
7. 循环和推导
8. pass,del,exec和eval
两篇笔记基本涵盖了基础知识。下面会整理抽象部分。