最近在图书馆发现了一本书《Think Python:How to Think Like a Computer Scientist》,看起来还不错的样子,于是就拿来看了,是一本蛮适合入门Python的书,还能查漏补缺,个人还是蛮推荐的。可以尝试看完廖雪峰的python教程然后看这本。

程序之道

  • 操作符**表示进行指数运算。
    1
    2
    >>> 6**2+6
    42

在其他一些语言中,指数操作用^符号表示,但在Python中^已经被用来表示二进制按位运算XOR了。

1
2
>>> 6^2
4

变量、表达式和语句

  • 一般来说,字符串不能进行数学操作,但*和+例外。

函数

  • 单引号和双引号的作用相同。大部分情况下人们都使用单引号。
  • 函数定义必须在函数被调用之前先运行。

案例研究:接口设计

  • 封装:将一组语句转换成函数定义的过程。
  • 泛化:将一些不必要的具体值替换为合适的通用参数式变量的过程。
  • 重构:修改代码并改善函数的接口以及代码质量的过程。

条件和递归

  • 递归:在当前函数调用自己的进程。

有返回值的函数

  • 增量开发:一个程序开发计划,通过每次只增加少量代码并加以测试的步骤来减少调试。

迭代

  • 迭代:使用递归函数调用或循环来重复执行一段语句。

字符串

  • 切片
  • 字符串是不可变的,也就是说,不能修改一个已存在的字符串,最多新建一个字符串。

案例分析:文字游戏

列表

  • 当一个对象有多个引用,并且引用不同的名程时,我们说这个对象有别名。如果有别名的对象是可变的,则对一个别名的修改会影响另一个。

    1
    2
    3
    4
    5
    6
    7
    >>>a = [1,2,3]
    >>>b=a
    >>>b is a
    True
    >>>b[0]=3
    >>>a
    [3,2,3]
  • 通过复制来避免别名

    1
    2
    t=[2,3,5]
    t2 = t[:]

字典

元组

  • zip是一个内置函数,接收两个或多个序列并返回一个元组序列。
  • 字典有items方法返回一个元组序列,每个元组是一个键值对。反之,可以用一个元组列表来初始化一个新字典,dict()。

案例研究:选择数据结构

  • 伪随机:看起来是随机的,但实际上是由带着确定性的程序生成的一序列数。

文件

类和对象

类和函数

  • 纯函数:不修改任何形参对象的函数。大部分纯函数都有返回值。
  • 修改器:修改一个或多个形参对象的函数。大部分修改器都没有返回值,也就是返回None。
  • 总的来说,推荐只要合理的时候都尽量编写纯函数,而只有在具有绝对说服力的时候使用修改器。这种方法可以称作函数式编程风格。

类和方法

继承

Python拾珍

  • 收集关键词参数
1
2
def print(*args):
print(args)

星号操作符并不会收集关键词实参,要收集关键词实参,采用**操作符:

1
2
def printall(*args,**kwargs):
print(args+kwargs)

调试

算法分析