人生苦短,我用Python

年薪40W大佬Python学习笔记-《think Python》

2018-10-12  本文已影响25人  宇哥聊AI

引言

之前使用过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)

下面是一些概念的定义和理解:

如果需要Python方面的入门知识可以点击这个链接获取入门资料

封装:将代码打包到一个函数中

泛化:给函数增加一个变量,增强函数的泛化能力

重构:将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关键字的声明

如果全局变量是可变的,修改全局变量时不需要声明

上一篇下一篇

猜你喜欢

热点阅读