# 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...):創造用于并行迭代的新序列