Python学习笔记(1)--《think Python》
引言
之前使用过python进行编程,但是没有系统的学习过python的语法及其特性,计划从think Python这本书开始学习。本次笔记包含第一章到第十一章的内容,因为这些内容是之前看过的,也是比较基础的内容,所以只写一些我觉得需要记忆或是比较特别的地方。
C1. 编程的方式
说实话没什么好说的,都是对编程入门者的知识科普吧
写一些需要记的python代码规范好了
- 缩进统一使用4个空格来代替tab,我用的是sublime编辑器,在sublime的设置文件添加即可
"tab_size": 4,
"translate_tabs_to_spaces": true,
- 每行代码长度最多120个字符,建议最多80
- 有关空格:
二元运算符前后加空格
参数列表的 " , " 后要加空格
左括号右和右括号左不加空格
C2. 变量、表达式和语句
python中 ** 是 指数运算, ^ 是位的异或运算
C4. 接口设计
这一章叫做接口设计,其实就是对代码进行封装时函数及其参数的设计,如何设计出适合的函数。
本书给出了一种方法:
- 先实现相对具体的函数,书中的例子是画正方形square函数
def square(t):
for i in range(4):
fd(t, 100)
lt(t)
- 再增加参数,增强泛化能力,书中进行了两步泛化
def square(t, length):
for i in range(4):
fd(t, length)
lt(t)
def polygon(t, n, length):
angle = 360.0 / n
for i in range(n):
fd(t, length)
lt(t, angle)
- 当有新的需求出现时,考虑是否需要封装新的函数进行重构
书中出现了画圆弧的需求,发现有代码重复,提取出polyline函数
def polyline(t, n, length, angle):
for i in range(n):
fd(t, length)
lt(t, angle
用polyline函数重构polygon函数
def polygon(t, n, length):
angle = 360.0 / n
polyline(t, n, length, angle)
下面是一些概念的定义和理解:
封装:将代码打包到一个函数中
泛化:给函数增加一个变量,增强函数的泛化能力
重构:将A函数中的完成相对独立功能或复用较多的代码段封装成函数B后,用新生成的函数B重新实现A
C5. 条件语句和递归
文中给出了我之前写递归程序时总结的一种方法的较为正式的叫法:信心的飞跃。意思是当你编写递归函数时,用递归函数的时候要确信这个函数时可用的,否则总会忍不住进去查看函数的逻辑,从而自己陷入递归之中。
C8. 字符串
文中有一个python的切片的理解感觉挺有意思的,贴上来:
fruit[1:4] 就是index中1到4之间的字符串ana
还有一点,字符串是不可变的,fruit[3] = ‘d’ 是不允许的
字符串和list的互相转化
>>> list('abc')
['a', 'b', 'c']
>>> ''.join(t)
'abc'
>>> 'abc'.split()
['abc']
>>> str(['a','b','c'])
['a','b','c']
C9. 字符串处理
常用的一个字符串处理方法strip( )
str.strip([chars])
strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。chars是字符序列,从开头向后以及结尾向前,去除存在于chars中的字符,直到第一个不在chars中的字符为止。
C10. 列表
常用列表操作:
生成一个新的空列表
t = []
列表添加新元素到队尾
append是将list1作为list的一个元素加进去,extend是将list1的所有元素加到list中。
list.append(list1)
list.extend(list1)
删除列表元素
list.pop(index)
del list[index]
list.remove(value)
列表需要注意的地方
- 列表是按引用传递:作为参数传递给函数的列表若在函数中被改变,调用者会看到改变
- 需要区分调用list内置函数时改变了list的对象;
调用运算符和切片时没有改变原来的list对象,而是生成返回了新的list对象,需要赋值操作符来获取这个新的list对象。
C11. 字典
常用字典操作
d = dict() # 生成空字典
bool_value1 = (x in d) # 检查x是否在d的键值列表中
booL_value2 = (x in d.values()) # 检查x是否在d的值列表中
d = {'a':1, 'b':3}
d.get('b', 0) # 3 get提供一个没有对应键时的缺省值
d.get('c', 0) # 0
文中提到要在函数中给全局变量重新赋值,需要有global关键字的声明
如果全局变量是可变的,修改全局变量时不需要声明