Python学习笔记(1)--《think Python》

引言

之前使用过python进行编程,但是没有系统的学习过python的语法及其特性,计划从think Python这本书开始学习。本次笔记包含第一章到第十一章的内容,因为这些内容是之前看过的,也是比较基础的内容,所以只写一些我觉得需要记忆或是比较特别的地方。

C1. 编程的方式

说实话没什么好说的,都是对编程入门者的知识科普吧
写一些需要记的python代码规范好了

  1. 缩进统一使用4个空格来代替tab,我用的是sublime编辑器,在sublime的设置文件添加即可
	"tab_size": 4,
	"translate_tabs_to_spaces": true,
  1. 每行代码长度最多120个字符,建议最多80
  2. 有关空格:
    二元运算符前后加空格
    参数列表的 " , " 后要加空格
    左括号右和右括号左不加空格

C2. 变量、表达式和语句

python中 **指数运算^ 是位的异或运算

C4. 接口设计

这一章叫做接口设计,其实就是对代码进行封装时函数及其参数的设计,如何设计出适合的函数。
本书给出了一种方法:

  1. 先实现相对具体的函数,书中的例子是画正方形square函数
def square(t):
    for i in range(4):
        fd(t, 100)
        lt(t)
  1. 再增加参数,增强泛化能力,书中进行了两步泛化
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)
  1. 当有新的需求出现时,考虑是否需要封装新的函数进行重构
    书中出现了画圆弧的需求,发现有代码重复,提取出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)

列表需要注意的地方

  1. 列表是按引用传递:作为参数传递给函数的列表若在函数中被改变,调用者会看到改变
  2. 需要区分调用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关键字的声明
如果全局变量是可变的,修改全局变量时不需要声明

猜你喜欢

转载自blog.csdn.net/LeonShaw_zh/article/details/83005222