python学习交流

Python 关键知识1

2018-12-05  本文已影响0人  水之心

总结自:www.sigai.cn 的『AI领域的Python核心编程』。下文我们仅仅讨论 Python3。

Python 关键知识

  1. 学习 Python 的正确姿势:不是非常系统的全面学习,也不是直接用一个个的小项目去动手练习。从学习目的出发,找到一个最小的学习范围,并把这个范围系统性的学习到非常扎实的程度,其余的知识,看到了或者需要用了,交给 Google 来碎片化的补充学习即可。

  2. Python 是一门解释型语言(先翻译,在执行)。(计算机执行的是机器代码。人类写出来的代码需要被翻译成机器代码。)Python 的翻译基于虚拟机:先编译,后解释(PyCodeObject 与 pyc 文件)。

1 输入与输出

2 基本数据类型

3 常量

在 Python 中通常用全部大写的变量名表示常量。如 PI = 3.141592653589793

4 基本运算

+(加法)、-(减法)、*(乘法)、/(除法)%(求余)与数学完全一致。不过,/ 的结果一律是浮点数。考虑到浮点数并不是那么精确,所以只要涉及到浮点数的这些运算的输出一律是浮点数。

//(向下取整)对应于数学中数轴往左取的整数。

在 Python 中,你可以通过内置函数 round() 来实现四舍五入,而 int() 仅仅是截断整数部分。

5 变量

下面列出一些 Python 的基本数据类型:

可变类型 不可变类型
list, bytearray, dict str, tuple, frozenset, bytes, 整数, 浮点数, 布尔值, None

在 Python 中,我们可以通过 id 函数查看对象所在内存地址。下面我们看几个例子来深入理解变量。

a = 'Tom'

id(a)
2156557306376
a1 = 'tom'
id(a1)
2156557306264

由于 str 是不可变对象,所以 aa1id 不同。

a2 = a
a = 'T'

id(a2), id(a)
(2156557306376, 2156518162648)

a2a(改变前)引用同一个对象,a(改变后)则 a 的引用对象发生改变,而 a2 并没有改变。下面我们看看 list

b = ['a1', 'a2']
id(b)
2156557293448
b.append('a3')
id(b)
2156557293448

对可变类型对象的赋值,传递的是引用,类似于 C 语言的指针。

c = b
b, c
(['a1', 'a2', 'a3'], ['a1', 'a2', 'a3'])
id(b) == id(c)
True
b[0] = 45
c, b
([45, 'a2', 'a3'], [45, 'a2', 'a3'])

如果不想传递引用,需要使用 copy 的方式:

b.append([2, 3])
d = b[:]
id(b) == id(d)
False
b, d
([45, 'a2', 'a3', [2, 3]], [45, 'a2', 'a3', [2, 3]])

不过,这种方式仅仅是浅层 copy:

b.pop(0)
b, d
(['a2', 'a3', [2, 3]], [45, 'a2', 'a3', [2, 3]])
b[-1][0] = 0
b, d
(['a2', 'a3', [0, 3]], [45, 'a2', 'a3', [0, 3]])

如果你想要完全复制,则需要:

import copy

e = copy.deepcopy(b)
b[-1][0] = 111
b, e
(['a2', 'a3', [111, 3]], ['a2', 'a3', [0, 3]])

6 序列

在 Python 中,有序列(有序):list & tuple, set & frozenset, 字符串。

序列通用方法有:

注意:切片中的负步长的负号仅仅指的是往左方向进行切片

下面我们看看它们除了这些通用方法,还有什么特殊方法:

6.1 list

List的内置⽅方法及其时间空间复杂度

L = ['a12', 'a2', 'a31']
sorted(L)  # 复制并排序
['a12', 'a2', 'a31']
L.sort()  # 排序
L
['a12', 'a2', 'a31']
L.append(67)  # 添加元素
L
['a12', 'a2', 'a31', 67]
L.pop()  # 移除并返回最后一个元素
67
L
['a12', 'a2', 'a31']
L = [2] * 4 + [5] * 6 + [4, 5, 7, 9]
L.count(5)  # 统计元素出现的个数
7

6.2 字符串

字符串一般可以划分为:str, bytes, 转义字符, raw string, bytearray。具体内容可参考:字符串

字符编码常见工作模式

内存中默认的字符串是 str 类型,以 Unicode 编码存储或传输时用字节为单位的 bytes 类型:

s = ''.join(L)  # 拼接
s
'a12a2a31'
s1 = s.replace('a', 'A')  # 复制并替换
s
'a12a2a31'

6.3 set

setdictkey 的集合。

由于 key 是 hashable,因此 set 中无重复元素。

7 字典

dict 是可变类型对象,形式为:{key: value},特点:查找速度极快

用空间换时间的策略,消耗内存大。

更多详细内容见 容器(列表 & 元组 & 字典 & 集合)

8 条件判断

andor 是惰性求值的。

9 循环

10 包管理工具 pip

还有一个需要注意:sys.path 是 Python 解释器默认搜索路径列表

上一篇 下一篇

猜你喜欢

热点阅读