Python 关键知识1

作者: 水之心 | 来源:发表于2018-12-05 11:24 被阅读0次

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

Python 关键知识

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

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

1 输入与输出

  • print():输出
  • input():通过外设输入

2 基本数据类型

  • 整数:与数学上的写法完全一样,可以处理任意大小的整数
  • 浮点数:由于内部存储方式的不同,整数计算永远精确,浮点数则不是
  • 字符串""'' 中的任意文本
  • 布尔值TrueFalse;可进行 andornot 运算
  • 空值None

3 常量

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

4 基本运算

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

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

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

5 变量

  • 由于 Python 是动态类型语言,所以变量可以是任意数据类型
  • 使用变量之前必须先赋值
  • 变量无类型,对象有类型
  • 对象是内存中存储数据的实体,变量则是指向对象的指针
  • 变量指向一个对象,而对象有可变与不可变之分

下面列出一些 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, 字符串。

序列通用方法有:

  • 浅层 copy:切片、+*
  • 长度:len

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

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

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。具体内容可参考:字符串

  • ASCII 编码省空间,但容易出现乱码
  • Unicode 通用了各种语言的编码,但可能存在大量空间冗余
  • UTF-8:可变长的 Unicode 编码,ASCII 可被认为是 UTF-8 的一部分
字符编码常见工作模式
  • 内存中:Unicode
  • 存储时:UTF-8
  • 传输时:UTF-8

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

  • encode:转换为 bytes
  • decode:转换为 str
s = ''.join(L)  # 拼接
s
'a12a2a31'
s1 = s.replace('a', 'A')  # 复制并替换
s
'a12a2a31'

6.3 set

setdictkey 的集合。

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

7 字典

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

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

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

8 条件判断

  • ==, !=, >, <, >=, <=:计算用数值,结果用布尔
  • not:计算用布尔,返回是布尔
  • is 不计算,只判断
  • 链式判断大小关系:结果与数学上保持一致
  • and:从左往右查找 0False, 找到则立即返回,未找到则返回最后一个
  • or:从左往右查找 非 0 数字 或 True, 找到则立即返回,未找到则返回最后一个

andor 是惰性求值的。

9 循环

  • for:逐个取出
  • while:按条件进行循环
  • break 语句:满足条件则跳出循环
  • continue 语句:满足条件则直接进入下个循环

10 包管理工具 pip

  • pip -V:查看版本
  • pip install --upgrade pip:安装(升级)
  • pip install 包名称 (-U/ --user):安装包

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

相关文章

网友评论

    本文标题:Python 关键知识1

    本文链接:https://www.haomeiwen.com/subject/sqyicqtx.html