练习 37 复习各种符号 Learn Python 3 The
练习 37. 复习各种符号
现在该复习你学过的符号和 python 关键字了,而且在接下来的几节里你还会学到一些新的东西。我已经把所有需要重点掌握的 Python 符号和关键字列出来了。
在这节课中,看到一个关键字,回忆并写下它的作用,然后上网搜它真正的用处。这里可能对你来说有些困难,因为有些内容真的很难收到,但是不管怎么样,还是要试一试。
如果你发现你的记忆有误,就在索引卡片上写下正确的定义,试着将自己的记忆纠正过来。
最后,在一个小的 Python 程序里使用每一个符号和关键字,或者你也可以尽量多写一些程序来练习。我们的目标是要明白各个符号的作用,确认自己没搞错,如果搞错了就纠正过来,然后将其用在程序里,通过这样的方式来巩固自己的记忆。
关键词
| 关键词 | 描述 | 示例 |
|---|---|---|
| and | 逻辑上的“和” | True and False == False |
| as | with-as 语句的一部分 | with X as Y: pass |
| assert | 断言某个表达式为 true(如果为 false,则会触发异常) | assert False. "Error!" |
| break | 立即停止循环 | while True: break |
| continue | 不运行循环的剩余部分,重新开始循环 | while True: continue |
| 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: pass |
| for | 遍历循环集合中的元素 | for X in Y: pass |
| from | 从模块中导入特定部分。 | from X import Y |
| global | 声明一个全局变量 | global X |
| if | if 条件 | if: X; elif: Y; else: J |
| import | 导入一个模块来使用 | import os |
| in | for 循环的一部分。也用于测试 X 是否 在 Y 中. | for X in Y: pass 或 1 in [1] == True |
| is | 相当于 ==,测试相等性 |
1 is 1 == True |
| lambda | 创建一个短的匿名函数 | s = lambda y: y ** y; s(3) 注1 |
| not | 逻辑上的“非” | not True == False |
| or | 逻辑上的“或” | True or False == True |
| pass | 该代码块为空 | def empty(): pass |
| 打印这个字符串 | 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 注2 |
| yield | Pause here and return to caller. | def X(): yield Y; X().next() |
ai酱注:
注1:输入匿名短函数:s = lambda y: y ** y,执行该函数 s(3),输出结果为 27,** 为平方运算。lambda 简化了函数定义的书写形式,使代码更为简洁。
注2:with X as Y,X 是一个要被执行的表达式,Y 是变量,它存储的是表达式执行返回的结果。一般用于文件的读写和存储。
数据类型
针对每一种数据类型,都举出一些例子来,例如对于 string,写下你如何创建一个字符串,对于 number,写出一些不同类型的数字。
| 类型 | 描述 | 示例 |
|---|---|---|
| True | True 布尔值 | True or False == True |
| False | False 布尔值 | False and True == False |
| None | 代表“无”或者“没有”值 | x = None |
| bytes | 存储字节,可以是文本、PNG、文件等 | x = b"hello" |
| strings | 存储文本信息 | x = "hello" |
| numbers | 存储整数 | i = 100 |
| floats | 存储小数 | i = 10.389 |
| lists | 存储一列元素 | j = [1,2,3,4] |
| dicts | 存储一系列“键=值”的元素 | e = {'x': 1, 'y': 2} |
字符串转义序列(Escape Sequences)
对于字符串转义序列,你需要在字符串中应用它们,确保自己清楚地知道它们的功能。
| 转义字符 | 描述 |
|---|---|
| \ | 反斜杠 |
| ' | 单引号 |
| " | 双引号 |
| \a | 响铃 |
| \b | 退格 |
| \f | 换页符 |
| \n | 换行符 |
| \r | 回车符 |
| \t | Tab 制表符 |
| \v | 垂直制表符 |
老式字符串格式化
一样的,在字符串中使用它们,确认它们的功能。
| 转义字符 | 描述 | 示例 |
|---|---|---|
| %d | 十进制整数(不含浮点数) | "%d" % 45 == '45' |
| %i | 同 %d | "%i" % 45 == '45' |
| %o | 八进制数 | "%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 | 同 %g 但是大写 | "%G" % 10.34 == '10.34' |
| %c | 符号格式化 | "%c" % 34 == ' " ' 注1 |
| %r | Repr 格式化(调试格式化) | "%r" % int == '<type 'int'>' 注2 |
| %s | 字符串格式化 | "%s there" % 'hi' == 'hi there' |
| %% | 百分号 | "%g%%" % 10.34 == '10.34%' |
ai酱注:
注1:%c 是把 34 转换为 ASCII 码,其对应的 ASCII 码为 "。
注2:%r 打印时能够重现它所代表的对象。
Python 2 的代码使用这些格式化字符来实现 Python 3 中 f 的功能,你也可以试试这些替代方法。
运算符
有些操作符号你可能还不熟悉,不过还是逐一看过去,研究一下它们的功能,如果你研究不出来也没关系,记录下来日后再去解决。
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加 | 2 + 4 == 6 |
| - | 减 | 2 - 4 == -2 |
| * | 乘 | 2 * 4 == 8 |
| ** | 乘方 | 2 ** 4 == 16 |
| / | 除 | 2 / 4 == 0.5 |
| // | 地板除法(商向下取整) | 2 // 4 = 0 |
| % | 字符串插入符;取模 | 2 % 4 == 2 |
| < | 小于 | 4 < 4 == False |
| > | 大于 | 4 > 4 == False |
| <= | 小于等于 | 4 <= 4 == True |
| >= | 大于等于 | 4 >= 4 == True |
| == | 等于 | 4 == 5 == False |
| != | 不等于 | 4 != 5 == True |
| ( ) | 括号 | len('hi') == 2 |
| [ ] | 列表中括号 | [1,3,4] |
| { } | 字典大括号 | {'x': 5, 'y': 10} |
| @ | At (修饰符) | @classmethod |
| , | 逗号 | range(0, 10) |
| : | 冒号 | def X(): |
| . | 点 | 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 |
ai酱注:x += 2 相当于 x = x + 2,其他同类运算同理。
花一个星期来学习这些东西,如果你能提前完成的话更好。我们的目的是覆盖到所有的符号类型,确认你已经牢牢记住它们。另外很重要的一点是这样可以帮助你发现还没掌握的内容,以便日后学习巩固。
阅读代码
现在去找一些 Python 代码阅读一下。你需要尽可能地阅读你能找到的任何代码,然后从中学习一些东西。目前为止你学到的东西已经足够让你看懂一些代码了,但你可能还无法理解这些代码的功能。这节课我要教给你的是:如何运用你学到的东西去理解别人的代码。
首先把你想要理解的代码打印到纸上。没错,你需要打印出来,因为和屏幕相比,你的眼睛和大脑更习惯于纸质内容。一次最多打印几页就可以了。
然后通读你打印出来的代码并做好标记,标记的内容包括以下几个方面:
- 函数以及函数的功能。
- 每个变量的初始赋值。
- 每个在程序中多次出现的变量。它们以后可能会给你带来麻烦。
- 任何不包含 else 的 if 语句。它们是正确的吗?
- 任何可能没有结束的 while 循环。
- 代码中任何你看不懂的部分。
第三步,你需要用注释向自己解释代码的含义。解释各个函数的使用方法,各个变量的用途,以及任何其它方面的内容,只要能帮助你理解代码即可。
最后,对于代码中比较难的部分,逐行或者逐个函数地去跟踪变量值。你可以再打印一份出来,在空白处写出你要“追踪”的每个变量的值。
一旦你基本理解了代码的功能,回到电脑面前,在屏幕再重读一次,看看能不能找到新的问题点。然后继续找新的代码,用上述方法去阅读和理解,直到你不再需要纸质打印为止。
附加练习
- 研究一下什么是“流程图”(flow chart),并试着画一画。
- 如果你在读代码的时候发现了错误,试着把它们改对,然后把修改内容发给作者。
- 如果不使用纸质打印,你可以使用注解符号
#在程序中加入笔记。这些笔记会对后来的读代码的人有很大的帮助。
常见问题
我如何在网上搜索这些东西? 只要在任何你要搜的内容前面加上 “python3.6” 就行了。比如你要搜 yield,就输入 python3.6 yield。