python基础教程复习笔记5:条件,循环和其他语句

条件,循环和其他语句

5.1 import的更多信息

  • 只有确定要从目标模块导入所有功能时,才应该使用最后的版本
  • 重名可以使用somemodule.somefunction模式导入
  • 可以使用改名import somemodule as sm为导入部分提供别名

5.2 赋值魔法

5.2.1 序列解包

定义

将多个值的序列解开,放到变量的序列中,叫做’序列解包’或者’递归解包’

用法

  • 在函数或者方法(或者其他序列和可迭代对象)时,这个特性尤其有用
  • 对于字典,使用popitem获得项后得到元组后使用序列解包获取键或值
  • 对于python3以后,可以使用*x收集剩余元素:右侧的赋值语句可以使可迭代对象

5.2.2 链式赋值

5.2.3 增量赋值

只要二元运算符本身适合这些数据类型即可

5.3 语句块:缩排的乐趣

定义

  • 语句块是在条件为真的时执行或者执行多次的一组语句,在代码钱放置空格可以创建语句块
  • 使用tab也可以缩进语句块.python将一个tab解释为到下一个tab字符位置的以移动,而一个tab为八个空格,但标准只是用空格.

5.4 条件和条件语句

bool

在Python中,下面的值会看做假:

  • Flase
  • None
  • 0
  • ()
  • []
  • {}

其他的一切都会被解释为真

组成

当然支持嵌套

5.4.6 更复杂的条件

比较运算符

表达式描述
x==yx等于y
xx小于y
x>yx大于y
x>=yx大于等于y
x<=yx小于等于y
x!=yx不等于y
x<>yx不等于y(非当前标准,不建议使用)
x is yx和y是同一个对象
x is not yx和y不是同一个对象
x in yx是y容器的成员
x not in yx不是y容器的成员
  • 3.0以前,理论上,对于相对大小的任意两个对象x和y都是可以用比较运算符比较的,并且都会得到布尔值的结果
  • 只有在x和y类型相近时,比较才有意义
  • 在3.0以后,比较不兼容的类型已经完全不可行
  • python中,支持链式比较
  • 和c/c++一样,对于字符串,比较运算符可以比较他们的编码值

逻辑短路和条件表达式

布尔运算符的有趣特性–只在需要时求值

so

断言

确保条件一定为真,才能让程序运行

5.5 循环

5.5.1 while循环

5.5.2 for循环

for循环用于比如为一个集合(序列或者其他可迭代对象)的每一个元素都执行一个代码块类似的操作

“范围函数”

  • python2.2之前,只能用keys等字典方法获得值
  • 字典元素的顺序通常没有定义,如果这个顺序真的很重要,可以用列表保存一份键的顺序

5.5.4 一些迭代工具

并行迭代

  • zip处理不等长序列可行,但是会在较短的序列结束时结束

按索引迭代

5.5.5 跳出循环

中断

继续

While True/break习语

循环中否则

只在break没有被触发,也就是程序正常进行的情况下引起else子句

5.6 列表推导式:轻量级循环

一个案例及其优化方案

5.7 三人行

5.7.1 什么都没发生

  • pass语句在可以在代码中做占位符使用
  • 空代码在python中是非法的

5.7.2 删除

  • 一般来说,python会删除那些不再使用的对象(因为使用者不会再通过任何变量或者数据结构引用它们)
  • 没有任何名字绑定的变量,就是’漂’着的,没有办法获取和使用它们,所以python解释器会以其魔法的方法进行’垃圾收集’
  • 或者,我们可以使用del语句,他不仅删除一个对象的引用,也删除那个名字本身
  • Python中无法删除值,这个功能由python解释器负责

5.7.3 动态创造Python代码,执行和对其求值

  • 这是”黑暗魔法”,使用务必慎之又慎
  • 这种方法会有很严重的潜在安全漏洞,程序可能失去对代码的控制
  • 在python2中,这些都是语句,而非函数

exec

eval

  • eval用于求值,会执行一系列python语句,计算python表达式,并且返回结果值
  • 和exec一样,也可以提供命名空间,一个全局的,一个局部的.全局的必须是字典,局部的可以是任意映射,设置全局后局部会默认设置为全局
Tagged with:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据