Learn Python the Hard Way 中文版

exercise37.复习符号

现在该复习你学过的符号和python关键字了,而且你在本节还会学到一些新的东西。我在这里所作的是将所有的Python符号和关键字列出来,这些都是值得掌握的重点。

在这节课中,你需要复习每一个关键字,回想它的作用并且写下来,接着上网搜索它真正的功能。有些内容可能是难以搜索的,所以这对你可能有些难度,不过无论如何,你都要尝试一下。

如果你发现记忆中的内容有误,就在索引卡片上写下正确的定义,试着将自己的记忆纠正过来。

最后,将每一种符号和关键字用在程序里,你可以用一个小程序来做,也可以尽量多写一些程序来巩固记忆。这里的关键点是明白各个符号的作用,确认自己没搞错,如果搞错了就纠正过来,然后将其用在程序里,并且通过这样的方式加深自己的记忆。

关键字

KEYWORD DESCRIPTION EXAMPLE
and 逻辑与 True and False == False
as with-as语句的一部分 with X as Y: pass
assert 声明 assert False, "Error!"
break 停止整个循环 while True: break
class 定义一个类 class Person(object)
continue 停止这一次循环,但继续下一次循环 while True: continuev
def 定义一个函数 def X(): pass
del 从字典中删除 del X[Y]
elif Else if 条件 if: X; elif: Y; else: J
else Else 条件 if: X; elif: Y; else: J
except 如果捕获异常,执行该代码块 except ValueError, e: print e
exec 将字符串作为Python代码执行 exec 'print "hello"'
finally 不管是否有异常,finally代码块都执行 finally: pass
for for循环 for X in Y: pass
from 从某一模块中引入特定部分 import X from Y
global 定义一个全局变量 global X
if If 条件 if: X; elif: Y; else: J
import 引入一个模块到当前模块 import os
in for循环的一部分/ 测试X in Y. for X in Y: pass / 1 in [1] == True
is 类似==,判断相等 1 is 1 == True
lambda 创建一个无名函数 s = lambda y: y ** y; s(3)
not 逻辑非 not True == False
or 逻辑或 True or False == True
pass 该代码块为空 def empty(): pass
print 打印一个字符串 print 'this string'
raise 代码出错时,抛出一个异常 raise ValueError("No")
return 退出函数并返回一个返回值 def X(): return Y
try 尝试代签代码块,有异常则进入except代码块 try: pass
while While循环 while X: pass
with 一个变量的别名 with X as Y: pass
yield 暂停, 返回给调用者 def X(): yield Y; X().next()

数据类型

针对每一种数据类型,都举出一些例子来,例如针对string,你可以举出一些字符串,针对 number,你可以举出一些数字。

TYPE DESCRIPTION EXAMPLE
True True 布尔值. True or False == True
False False 布尔值. False and True == False
None 表示 "nothing" 或者"no value". x = None
strings 字符串,储存文本信息 x = "hello"
numbers 储存整数 i = 100
floats 储存小数 i = 10.389
lists 储存某种东西的列表 j = [1,2,3,4]
dicts 储存某些东西的键值对 e = {'x': 1, 'y': 2}

字符串转义序列

对于字符串转义序列,你需要在字符串中应用它们,确认自己清楚地知道它们的功能。

ESCAPE DESCRIPTION
\\ 斜线
\' 单引号
\" 双引号
\a Bell
\b 退格
\f Formfeed
\n 换行
\r Carriage
\t Tab键
\v 垂直的tab

字符串格式化

ESCAPE DESCRIPTION EXAMPLE
%d 格式化整数 (不包含浮点数). "%d" % 45 == '45'
%i 与%d相同 "%i" % 45 == '45'
%o 8进制数字 "%o" % 1000 == '1750'
%u 负数 "%u" % -1000 == '-1000'
%x 小写的十六进制数字 "%x" % 1000 == '3e8'
%X 大写的十六进制数字 "%X" % 1000 == '3E8'
%e 小写 'e'的指数标记 "%e" % 1000 == '1.000000e+03'
%E 大写 'e'的指数标记 "%E" % 1000 == '1.000000E+03'
%f 浮点数 "%f" % 10.34 == '10.340000'
%F 与%f相同 "%F" % 10.34 == '10.340000'
%g %f 或者 %e中较短的一个 "%g" % 10.34 == '10.34'
%G %F 或者 %E中较短的一个 "%G" % 10.34 == '10.34'
%c 字符格式化 "%c" % 34 == '"'
%r 类型格式化 "%r" % int == "<type 'int'>"
%s 字符串格式 "%s there" % 'hi' == 'hi there'
%% 表示百分号% "%g%%" % 10.34 == '10.34%'

操作符

有些操作符号你可能还不熟悉,不过还是一一看过去,研究一下它们的功能,如果你研究不出来也没关系,记录下来日后解决。

OPERATOR DESCRIPTION EXAMPLE
+ 2 + 4 == 6
- 2 - 4 == -2
* 2 * 4 == 8
** 幂乘 2 ** 4 == 16
/ 2 / 4.0 == 0.5
// 整除,得到除法的商。 2 // 4.0 == 0.0
% 模除,返回除法的余数。 2 % 4 == 2
< 小于 4 < 4 == False
> 大于 4 > 4 == False
<= 小于等于 4 <= 4 == True
>= 大于等于 4 >= 4 == True
== 等于,比较操作对象是否相等。 4 == 5 == False
!= 不等于 4 != 5 == True
<> 不等于 4 <> 5 == True
( ) 括号 len('hi') == 2
[ ] 列表括号 [1,3,4]
{ } 字典括号 {'x': 5, 'y': 10}
@ 装饰符 @classmethod
, 逗号 range(0, 10)
: 冒号 def X():
. Dot self.x = 10
= 赋值等于 x = 10
; 分号 print "hi"; print "there"
+= 加等于 x = 1; x += 2
-= 减等于 x = 1; x -= 2
*= 乘等于 x = 1; x *= 2
/= 除等于 x = 1; x /= 2
//= 整除等于 x = 1; x //= 2
%= 模除等于 x = 1; x %= 2
**= 幂乘等于 x = 1; x **= 2

花一个星期学习这些东西,如果你能提前完成就更好了。我们的目的是覆盖到所有的符号 类型,确认你已经牢牢记住它们。另外很重要的一点是这样你可以找出自己还不知道哪些 东西,为自己日后学习找到一些方向。

读代码

找一些python的代码读读试试。你可以读任何的python代码,并且可以借鉴其中的一些思想。你已经具备足够的知识去阅读代码,但是你可能还不能完全明白代码实现了什么功能。这节练习就是教给你如何用你学过的知识弄明白别人的代码。

首先,把你找到的代码打印出来,是的,你需要把它们打印出来,因为相比电脑屏幕,你的大脑和眼睛更容易看清楚纸上的内容。

接下来,通读你打印的代码,按照下面说的做一些笔记:

  1. 找出所有的函数,以及它们的功能。
  2. 每一个变量在哪里被赋予初始值。
  3. 代码的不同地方有没有相同名字的变量,这可能会带来隐患。
  4. 有没有if语句没有else代码块的,这么写对吗?
  5. 有没有无终止的while循环
  6. 标记出不管任何原因,你看不懂的代码部分。

第三步,当你做完上面内容之后,尝试给自己解释一下自己写的注释。说明这些函数是如何应用的,包含哪些变量,以及你想弄明白的其他事情。

最后,在所有难以理解的部分,逐行、逐个函数的跟踪每个变量的值。你也可以在准备一份打印的代码,在空白处写下你要跟踪的每个变量的值。

当你弄明白这段代码是做什么的之后,回到电脑上再读一遍代码,看看能不能找到一些新的东西。多找一些代码练习,直到你能不需要打印代码就能弄懂它们的功能为止。

附加题

  1. 弄明白“流程图”是什么,试着画几个出来
  2. 读代码的过程,如果发现了什么错误,尝试着改正它,并将你修改后的结果发给代码的作者。
  3. 另一个技巧是用#给你正在读的代码加注释,有时候,你的这些注释会帮到后面来读代码的人哦。

常见问题

Q: %d%i有什么区别?

没有区别,只不过由于历史原因,人们更喜欢用%d

Q: 我们怎么在网上搜索这些符号和关键字?

只要把“python”放在你要搜索的内容之前就可以了,比如,你想搜索yield,那么就输入python yield