原文链接:
http://learnpythonthehardway.org/book/ex37.html
现在去找一些Python代码来阅读。你应该已经能够阅读任何Python代码了,并且能够试着借鉴你发现的一些好的编程思想。你实际上应该有足够的知识来应付阅读代码了,但是还是有可能无法理解代码做了什么操作。这里我打算给你上一堂实际应用课,教给你怎样去理解别人的代码。
现在是时候回顾复习一下Python中的符号和你目前学过的关键字了,并且在下面这些练习中你还会学到一些新的知识。在这里我会列举出所有需要重点了解的Python符号和关键字。
在这节练习中你每写一个关键字就得立马去回想它到底有什么作用。接着,就去网上搜索它相关的知识看看它真正的作用是什么。这可能有点困难,因为不是所有的这些都有可以在网上搜到资料,但是你还是尽可能的去这样做吧。
如果你记住的关键的作用是错误的话,你应该立即把该关键字的正确定义写在记忆卡片上来矫正自己错误的记忆。如果你压根想不起来的话,那你就先把它写下来,之后再来解决它。
最后,将每一种符号和关键字用在程序里,你可以用一个小程序来做,也可以尽量多写一些程序来巩固记忆。这里的关键是要弄明白每个符号的作用,确保你理解的是正确的,如果不正确就要及时改正,然后通过练习来加强记忆。
关键字:
and
del //用于list列表操作,删除一个或者连续几个元素。
from //在python中用import...from来导入相应的模块。
not
while
as //结合with使用。
elif
global //定义全局变量。
or
with //with实际是一个控制流语句,可以用来简化try-finally语句。它的主要用法是实现一个类__enter__()和__exit__()方法。
assert //断言,用来在运行中检查程序的正确性,和很多其他语言是一样的作用。
else
if
pass //pass的意思是什么都不要做,作用是为了弥补语法和定义上的冲突,我理解他的好处体现在代码的编写过程之中,比如你可以先洗好软件的整个框架,然后 再填好框架内具体函数和class的内容,如果没有pass编译器就会报一堆措施,让整个开发过程很不流畅。
yield //用起来像return ,yield在告诉程序,要求函数返回一个生成器。
break
except
import
print
class //定义类的关键字
exec //动态执行字符串代码片段(也可以是文件)
in
raise //和c++中的throw很类似,都是抛出异常。
continue //用来告诉Python跳过当前循环模块中的剩余语句,然后 继续 进行下一轮循环。
finally //在异常处理的时候添加,有了它,程序始终要执行finally里面的程序代码块。
is //Python中的对象包含三要素:id、type、value。其中id是用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对 象,是通过id来判断的,== 判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
return //return 语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值。
def //定义函数。
for //for...in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目。
lambda //匿名函数,提升了代码的简洁度。
try //我们可以使用try...except语句来处理异常。
数据类型:
针对每一种数据类型,都举出一些例子来,例如针对 string,你可以举出一些字符串,针对 number,你可以举出一些数字。
True
False
None //None是一个特殊的常量。None和False不同。None不是0,也不是空字符串。None和任何其他数据类型比较永远返回False。None有自己的数据类型NoneType。你可以 将None复制给任何变量,但是不能创建其他NoneType对象。
strings
numbers //数值型,可以是整数、浮点数、分数、甚至复数。
floats
lists
字符串转义序列:
对于字符串转义序列,在字符串中使用它们,确保它们的作用和你预期的作用一样。\\
\'
\"
\a //响铃
\b //退格
\f //换页
\n //换行
\r //回车
\t //横向制表符
格式化字符串:
一样的,在字符串中使用它们,确认它们的功能。%d //转成有符号十进制数
%i //转成有符号十进制数
%o //转成八进制数
%u //转成无符号十进制数
%x //转成十六进制数
%X //转成十六进制数
%e //转成指数形式(基底写为e)
%E //转成指数形式(基底写为E)
%f //转成浮点数
%F //转成浮点数
%g //转成指数(e)或浮点数 (根据显示长度)
%G //转成指数(E)或浮点数 (根据显示长度)
%c //单个字符
%r //字符串(采用repr()的显示)
%s //字符串 (采用str()的显示)
%% //输出%
操作符:
一些操作符你可能并不熟悉,但是无论如何你还是应该查阅一下这些你不懂的,弄明白它们是什么作用,如果你还是无法弄明白的话,那就先放着后面再来解决它。+
-
*
** #幂 ,返回x的y次幂 ,如:3 ** 4 得到 3*3*3*3 = 81
/
// #取整除,返回商的整数部分
% #取模,返回除法的余数
<
>
<=
>=
==
!=
<>
( )
[ ]
@
,
:
.
=
;
+=
/=
//=
%=
**=
花大概一个礼拜来完成这个练习,但是如果你能提前完成那必是极好的。我们的目的是覆盖到所有的符号 类型,确认你已经牢牢记住它们。另外很重要的一点是这样你可以找出自己还不知道哪些 东西,为自己日后学习找到一些方向。
阅读代码:
首先,把你想要去理解的代码用纸打印出来。每错,就是把它打印到纸上,因为你的眼睛和大脑阅读纸上的内容比看电脑屏幕上的内容更加有用。保证一次就只打印出几页。
接着,通读打印出来的内容,符合下面的要求做好笔记:
1、函数以及函数的作用。
2、每一个变量被赋初值的地方。
3、程序不同部分任何有同名的变量,这些可能在后面对理解代码会造成麻烦。
4、任何没有带else语句的if语句,是否写的正确呢?
5、任何可能不会终止循环的while循环语句。
6、最后,任何不管什么原因只要是你无法理解的代码部分。
其次,一旦你对上面所有的这些都标记好了的话,试着用你自己的话写下注释来解释他们的作用。解释函数在哪里被调用,什么变量和它有关,以及任何你能弄明白的代码的作用。
最后,在程序所有不同的部分,逐行逐个函数的跟踪每一个变量的值。实际上,对于每个需要跟踪的变量,都应该做另外的打印操作以及将其值写在变量的旁边。
一旦你对代码的作用有了一个很好的理解,就返回电脑上再次阅读程序看看你有没发现一些新的东西。继续找出更多的代码按照上面说的那样做知道你不在需要打印出来就能理解为止。
研究训练:
1、弄明白什么是“流程图”试着画几个流程图。
2、如果你阅读代码时发现代码中的错误的话,试着修复它,并且把你修改的代码发给作者。
3、当你没有使用纸来打印的时候另一个非常的技巧就是在你的代码处用#注释来做好笔记。有时候,这些注释,能够帮助到下一个阅读这份代码的人。
学生遇见的常见问题:
%d 和 %i 两种格式化操作有什么不同?
答:本来是没有任何区别的,只是由于历史的原因更多的人员喜欢使用 %d。
我怎样去网上搜索这些东西?
答:只要简单的在你搜索东西的前面加上 "python“就行了。例如,查找 yield 可以搜索 python yield。