第四章——Python代码结构
!!!个人主页:个人主页
!!!推荐一款模拟面试、刷题神器,从基础到大厂面试题:点击此处进入牛客网注册学习吧
!!!今日的努力,明日的未来
语法和句法
-
注释:
#
单行注释 -
语句分行:当一行代码够长时,可以用
\
来分开连接多行 -
使用
:
将代码的头和身体分开 -
同一行写多个语句,可以用
;
分开 -
if-elif-else
语句 -
条件表达式(三元操作符)
语法:
X if C else Y
-
多重比较:如果想同时进行多重比较判断,可使用布尔操作符and、or、not连接来决定最终表达式的布尔取值。布尔操作符的优先级没有比较表达式的代码较高,即,表达式要先计算后再比较
-
真值、假值
假值:布尔 False null类型 None
整型 0
浮点型 0.0
空字符串 ''
空列表 []
空元组 ()
空字典 {}
空集合 set()
除此之外,都是True
-
迭代器和iter()函数
-
迭代器:用来表示一连串数据流的对象。迭代器提供了一种遍历类序列对象的方法。对于一般序列类型,可以利用索引从0一直迭代到序列的最后一个元素;对于字典、文件、自定义对象类型等,可以自定义迭代放大,从而实现对这些对象类型的遍历
-
如何迭代:
迭代器有一个__next__()
方法,重复调用这个方法将逐渐返回流中的项。在循环中,如果要获得下一个对象,迭代器子集调用__next__()
方法或将其传给内置函数next()
。当遍历结束后(集合中再无访问的项)会遇到异常,从而结束循环。迭代器必须有__iter__()
方法用来返回该迭代器本身,因此迭代器必定也是可迭代对象,可被用于其他可迭代对象适用的大部分场景迭代器有一些限制,只能向前迭代,不能后退,即迭代是单向的,只能访问next(),当然,可以独立创建一个反向的迭代器。迭代器不能复制,一旦需要重新迭代某个对象,必须重新创建一个该对象的迭代器。(用
reversed()
返回一个序列对象的逆序迭代器,enumerate()
也可以返回迭代器) -
在for循环中使用可迭代对象,是用iter将该对象变为可迭代对象
-
!!!!:在迭代一个对象的过程中最好不要去修改对象本身,否则会发生难以预料的迭代异常,使得代码具有潜在的缺陷
-
-
iter()函数
iter(obj)
如果obj
是一个序列类型,那么可以根据其索引从0开始迭代iter(callable, sentinel)
每次迭代调用callable
,直至迭代的下一个值返回sentinel
- 并不是所有的可迭代的对象都是iterabal的子集,那么我们可以通过iter()来检查
-
判断一个对象是否是该类型:
isinstence(it_s,lteration)
issubcalss() 该方法用于判断参数class是否是类型参数classinfo的子集 -
推导式
推导式是从一个或多个迭代器快速简洁地创建数据结构地一种方法-
列表推导(解析)
[expr for item_var in iterable]
改语法地核心是for循环:print([x**2 for x in range(9)]) print([ss[::-1] for ss in('green', 'red', 'blued')]) #[0, 1, 4, 9, 16, 25, 36, 49, 64] #['neerg', 'der', 'eulb']
-
字典推导
{key_expr:value_expr for expr in iterable}
类似于列表推导,字典推导也有if条件判断以及多个for循环迭代语句word = 'letters' letter_counts = {letter: word.count(letter) for letter in set(word)} letter_counts #{'s': 1, 'r': 1, 'l': 1, 'e': 2, 't': 2}
-
集合推导
与上面列表推导式: -
生成器表达式:
生成器表达式是对列表解析地拓展,列表解析有一个不足,它一次性生成所有数据,用于创建列表,这样在数据量很大,内存很有限地时候造成地问题。生成器表达式解决了这个问题,他一次生成一个数据,然后暂停,当下一次使用时,生产出下一个数据,工作地过程就像迭代器一样
语法:(expr for item_var in iterable if cond_expr)
生成器只能运行一次,其只在运行中产生值,不会被存下来,所以不能重新使用或备份一个生成器
-