Python学习

下面用列表的形式,来记录一些适合我本人的Python的笔记。内容主要来自于Python的官方文档,以及Codex询问。由于不同的人具有不同的编程基础和世界观,所以本文仅适用于此时此刻的博主。欢迎在评论区留言讨论。

注意事项:

  • 不可以在列表的开头使用格式化代码;

  1. 可以在命令行中,直接输入「python」来启动一个命令行中的python程序,直接在命令行中进行一些基本的计算;
  2. python的一个特点是「动态变量」,即给对象赋值的之前,不必提前指定对象的类型。比如
1
2
s=41
s='Hello world!'
  1. 在python中,字符串(string)可以用单引号「’abc’」或双引号「“abc”」来包裹。特别地,如果希望输入引号,可以用反斜线进行转义。
  2. 字符串s='abc\n123',则在命令行中输入s的输出结果是'abc\n123'。在命令行中输入print(s)的结果则是
1
2
3
>>>print(s)
abc
123

即特殊字符在print函数中才会改写。如果不希望被字符串在print的时候被转写,可以使用print(r'123\n')
5. 可以对字符串进行如下操作

  • 重复*:3 * 'abc'='abcabcabc'
  • 合并+:'abc'+'def'='abcdef'
  1. 对于字面值,可以不加+号来粘合;
  2. 不可以对变量或表达式来省略+号粘合;
  3. 字符串可以用方括号索引,排序从0开始,即word[5]表示取第6个字符。索引还支持负数,含义是「倒数第几个」,比如word[-1]表示倒数第1个字符,负数索引从-1开始。
  4. 切片索引:word[:5]表示从头取到第6个字符,但第6个不取;word[-2:]表示从倒数第2个开始取,且包含倒数第2个。总之是一个左闭右开区间,不写就是正负无穷。
  5. 切片会自动处理越界索引;
  6. 长度函数返回列表长度: len()
  7. 列表支持合并和重复,另外列表是「mutable可变类型」,而字符串是「不可变类型」,即列表支持修改某个元素,比如
1
2
3
4
>>> s=[1,2,3]
>>> s[2]=5
>>> s
[1, 2, 5]
  1. 函数 list.append 可以在列表后增加元素;
  2. 列表的赋值不会复制对象,而是创建一个指向这个对象的指针。当你修改原对象的时候,新对象也会随之改变。如果要复制,需要用list.copy函数,进行「浅拷贝」。实质上,浅拷贝是一个这样的过程
    • a=[指针1,指针2]
    • b=[指针3,指针4]
    • 其中指针1和指针3的指向相同,指针2和指针4的指向相同;
    • 如果赋值b[0]=[3,4,5],则改变了b[0]这个指针的指向,后续b[0].append(6)不会改变print(a[0])的输出结果;
    • 如果进行b[0].append(3),则先找到了指针1所指的对象,然后为这个对象添加了新元素3,这样一来,print(a[0])的值也发生了变化。
  3. 当然,不是所有类型都有append方法。对于不可变类型(比如str, int),进行合并操作实际上是改变了指针所指的地址,并不是改变了当前地址的值;
  4. 还有函数参数也不会,函数参数在传入的时候,本质上是创建了一个局部的指针,这个指针
1
2
3
4
5
6
7
8
9
def f(lst):
lst.append(4) # 穿越引用去改对象 —— 外面能看到

def g(lst):
lst = [9, 9] # 只是让局部变量指向新对象 —— 外面看不到

a = [1, 2]
f(a); print(a) # [1, 2, 4]
g(a); print(a) # [1, 2, 4] 没变!

  1. 多重赋值:a,b=0,1
  2. while循环:用缩进来组织循环体
1
2
3
4
while a<10:
print(a)
a,b = b,a+b
print('这部分内容在循环体之外')
  1. print函数可以输出给定参数的值,print('the value of i is',i),在打印时会自动给参数i前面添加空格。实际操作如下:
1
2
3
4
>>> i = 256*256
>>> j= 16*16
>>> print('the value of i is ',i,'and the value of j is',j)
the value of i is 65536 and the value of j is 256
  1. 关键字参数 end 可以取消输出后面的换行, 使得你可以在这个字符串后面继续编辑,或用另一个字符串结尾.
1
2
3
4
5
6
>>> a, b = 0, 1
... while a < 1000:
... print(a, end=',')
... a, b = b, a+b
...
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,>>>
  1. 字段 elif 是python中的else if;
  2. 对于一个字典users,假设Hans是其中的一个key,则 pop('Hans') 可以删掉旧键并返回它的值;
  3. 字段 range(2,n) 取的是 [2, 3, 4, ... , n-1],依旧左闭右开。
  4. 在 for 循环中,else 子句会在循环结束其最后一次迭代之后,即未执行 break 的情况下被执行;
  5. 在 while 循环中,else 子句会在循环条件变为false之后执行;
  6. pass语句
    • 不执行任何操作;
    • pass可以作为占位符,当你需要实现一个东西,但是暂时还没思路的时候,可以先pass掉,注释上,后面再来写;
  7. match-case语句:多值选择,
    • 注意缩进,最后使用_作为通配符必定成功
    • 可以用|组合多个字面值
    1
    2
    3
    4
    5
    6
    7
    match status: 
    case 400:
    return "Bad request"
    case 411:
    return "Hahaha"
    case _:
    return "I don\'t know what is wrong"
  8. 未完待续