# 5.1 print 和 import 的更多信息
## 5.1.1 使用逗号输出

## 5.1.2 把某件事作为另一件事导入

# 5.2 赋值魔法
## 5.2.1 序列解包



## 5.5.2 链式赋值
链式赋值(chained assignment)是将同一个值赋给多个变量的捷径。
~~~
x = y = somefunction()
x = somefunction()
x = y
x = somefunction()
y = somefunction()
# 注上下两个赋值不一定是等价的
~~~
## 5.2.3 增量赋值

# 5.3 语句块:缩排的乐趣

# 5.4 条件和条件语句
## 5.4.1 这就是布尔变量的作用

## 5.4.2 条件执行和if语句

## 5.4.3 else子句

## 5.4.4 elif子句

## 5.4.5 嵌套代码块

## 5.4.6 更复杂的条件
1.比较运算符
x == y
x < y
x > y
x >= y
x <= y
x != y
x is y x 和 y 是同一个对象
x is not y x 和 y 是不同的对象
x in y x 是 y 容器(例如,序列)的成员
x not in y x 不是 y 容器(例如,序列)的成员
2.相等运算符

3.is:同一性运算符


4.in:成员资格运算符

5.字符串和序列比较

6.布尔运算符

## 5.4.7 断言(assert)

# 5.5 循环
## 5.5.1 while循环

## 5.5.2 for循环

## 5.5.3 循环遍历字典元素

## 5.5.4 一些迭代工具
1.并行迭代

2.编号迭代
enumerate(strings):这个函数可以在提供索引的地方迭代索引-值对。
3.翻转和排序迭代
reversed 和 sorted。它们同列表 reverse 和 sort 方法类似。

## 5.5.5 跳出循环
1.break

2.continue
3. while True/break 习语
## 5.5.6 循环中else子句
当在循环内使用break 语句时,通常是因为‘找到’了某物或者因为某事“发生”了。在跳出时做一些事情是很简单的(比如print n),但是有些时候想要在没有跳出之前做些事情。那么怎么判断呢?可以使用布尔变量,在循环前设定为False,跳出后设定为True。然后再使用if语句查看 循环是否跳出了:
~~~
borke_out = False
for x in seq:
do_somthing(x)
if condition(x):
broke_out = True
break
do_something_else(x)
if not broke_out:
print "I didn't break out!"
~~~
上面方法太复杂了,换成:

# 5.6 列表推导式----轻量级循环
列表推导式(list comprehension)是利用其它列表创建新列表。

# 5.7 三人行
pass、del 和 exec
## 5.71 什么都没发生
有的时候,程序什么事情都不用做。这种情况不多,但是一旦出现,就应该让 pass 语句出马。

## 5.7.2 使用 del 删除

## 5.7.3 使用 exec 和 eval 执行和求值字符串
有些时候可能会需要动态地创造Python代码,然后将其作为语句执行或作为表达式计算,这可能近似于“黑暗魔法”----在此之前,一定要慎之又慎,仔细考虑。
1.exec
执行一个字符串的语句


潜在的破坏性代码并不会覆盖sqrt函数,原来的函数能正常工作,而通过exec赋值的变量sqrt只在它的作用域内有效。

注意,如果需要将scope 打印出来的话,会看到其中包含很多东西,因为内建的 __builtins__ 字典自动包含所有的内建函数和值。
2.eval
eval(用于“求值”)是类似于exec的内建函数。exec 语句会执行一系列 Python 语句,而 eval 会计算 Python 表达式(以字符串形式书写),并且返回结果值,(exec 语句并不返回任何对象,因为它本身就是语句)


eval(raw_input) 《===》 input()
# 5.8 总结
* chr(n):当传入序号n时,返回n所代表的包含一个字符的字符串,(0=< n < 256)
* eval(source[, globals[, locals]]):将字符串作为表达式计算,并且返回值
* enumerate(seq):产生用于迭代的(索引,值)对
* ord(c):返回单字符字符串的int值
* range([start,] stop[, step]):创建整数的列表
* reversed(seq):产生seq中值的反向版本,用于迭代
* sorted(seq[, cmp][, key][, reverse]):返回seq中值排序后的列表
* xrange([start,] stop[, step]):创造xrange对象用于迭代
* zip(seq1, seq2...):创造用于并行迭代的新序列