-QuQ-
Articles10
Tags4
Categories0

Archive

Python基础

Python基础

Python基础

这是一个Python基础合集。适合那些已经学习过一门编程语言的人入门Python。

对象与内存

对象

在python中,万物皆对象。对象有两种;

  • 不可变对象:操作后返回副本
    • int
    • float
    • complex
    • bool
    • str
    • tuple
    • frozenset
  • 可变对象:操作后改变自身
    • list
    • dict
    • set
    • 用户定义类

内存

  • GC收集方式:引用计数
  1. del()
    1. 删除对象的引用
    2. 删除可变序列的元素
  2. id(object) 返回变量内存地址

运算

  1. 除法 /总是返回浮点数
  2. 幂指数 a**5a的五次方
  3. 绝对值 abs(num)
  4. 取整 round(num) 四舍五入
  5. 最值 max(num) min(num)
  6. 类型转换 type(original)
  7. 不同进制表示0b 0o 0x binary octal hexadecimal
  8. 链式比较 m < x <= n

序列(sequence)

  • 元素的有序集合,能够通过索引访问元素
  • 包括列表(list),元组(tuple),字符串(str),字节串(bytes),生成器
  • Python3.7之后,字典是有序的

操作

  1. 索引 seq[index] index可以为负。-1表示序列最后一个元素
  2. 切片 seq[start:end:step]
    1. [start, end)左闭右开
    2. 缺省:start=0, end=lastIndex, step=1
    3. 逆序:step取负
  3. 解包 p1, p2, p3 = seq
    1. * 解包,** 字典解包
    2. _:一个变量名
  4. 加法 seq1 + seq2
  5. 乘法 seq * repeatNTimes
  6. 成员检查 element in seq
  7. 长度 len(seq)
  8. 最值 min(seq) max(seq)
  9. 求和 sum(seq)
  10. 排序 sorted(seq)
  11. 计数 seq.count(element)
  12. 索引定位 seq.index(element)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
miku = "Hatsune Miku"

print(miku[0])
print(miku[6:0:-2]) # 左闭右开+步长
s1, s2, s3, *_ = miku # *扩展解包
print(s1, s2, s3)
print(miku + " " +  miku)
print(miku * 3)
print(len(miku))
print(f"min: \"{min(miku)}\", max: \"{max(miku)}\"")
# print(sum(miku))      TYPE ERROR!!
print(sorted(miku)) # sorted()不改变原数据
print(miku)
print(miku.index("u")) # c++ str.find("u")

列表(list)

  • 不定长可变序列

创建

  1. 方括号创建 [element1, element2, element3]
  2. list()创建 list(sequene)

操作

  1. 由于list是可变对象,可以对其进行修改
  2. 尾接 l.append(object) l.extend(list) append可以是一个列表,整体作为一个元素插入。extend作用相当于list的+=
  3. 插入 l.insert(index, object) 在索引插入
  4. 删除 l.remove(object) 删除第一个匹配到的元素。不在列表中会报错
  5. 弹出 l.pop(index) 删除并返回索引元素
  6. 排序 l.sort()
  7. 逆序 l.reverse()

元组(tuple)

  • 定长不可变序列

创建

  1. 圆括号创建 (element1, element2, element3),(element,)
  2. 1的简化形式:逗号分隔 element1, element2, element3
  3. 使用tuple()将任意序列转换 tuple(sequence)
1
2
3
4
5
6
7
8
9
10
# parentheses
utahime = ("Miku", "Lin", "Len")
single = (1,)

# comma
RGB = 0x39, 0xc5, 0xbb

# tuple
string = "Hatsune Miku"
miku = tuple(string)

操作

字符串(str)

  • 不可变字符序列
  • 人畜无害的Unicode字符串

创建

  1. 引号创建 "string" 'string'
  2. 强制转换 str(object) repr(pbject) string与representation
    1. 数字转字符串hex(255) oct(255) bin(255)
  3. 格式化字符串 "{} {}".format("a", "b")
1
2
miku = "Hatsune Miku"
color = "{R}, {G}, {B}".format(R="39", G="C5", B="BB")

操作

  1. 分割 s.split(separator) 缺省为空白字符(\n \t)
  2. 连接 connector.join(elements)
  3. 替换 s.replace(old, new) 会匹配所有能替换的old,不改变原字符串
  4. 大小写转换 s.upper() s.lower() 全大写/全小写
  5. 去除首尾空格 s.strip() s.lstrip() s.rstrip() 撕开
1
2
3
4
5
6
7
8
9
10
11
12
13
miku = "Hatsune Miku"
s = ["Hatsune", "Miku", "suki"]
connector = "♡"

print(miku.split())
print(connector.join(s))
print(miku.replace("u", "uchan"))
print(miku.upper(), miku.lower())

ugly = "    This is an ugly str  "
print(ugly.strip(), "end")
print(ugly.lstrip(), "end")
print(ugly.rstrip(), "end")

字典(dict)

  • 可变键值对集合(Python3.7及更高版本中,字典是有序的,但不能通过下标访问)
    • 键必须是不可变类型

创建

  1. 大括号创建 {key1: value1, key2: value2} {}是空字典
  2. dict()创建

操作

  1. 访问与修改值 d[key] 如果没有会报错
  2. 获取值 d.get(key, default) default默认为Node,可以自行更改
  3. 删除键值对
    1. d.pop(key, defualt=None) 删除并返回值,没有这个键则返回默认
    2. del(d["key"])
  4. 更新 d.update(newD) (其实是合并)
  5. 获取键值
    1. 键列表 d.keys()
    2. 值列表 d.values()
    3. 键值对元组列表 d.items()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mikuInfo = {"name": "HatsuneMiku"
            , "age": 16
            , "songs": ("千本桜", "愛言葉")}

mikuBackup = dict(mikuInfo) # 复制

print(mikuInfo["name"])
print(mikuInfo.get("123"))

# 删除
mikuInfo.pop("age")
del(mikuInfo["songs"])
print(mikuInfo)

# 更新
mikuInfo.update(mikuBackup)
print(mikuInfo)

print(mikuInfo.keys())
print(mikuInfo.values())
print(mikuInfo.items())

集合(set)

  • 无序可变不重复
  • 集合的元素必须是不可变(且可哈希)的

创建

  1. 大括号创建 {element1, element2, element3}
  2. set()创建 空集合必须用set()创建。因为{}是空字典

操作

  1. a.intersection(b)a & b
  2. a.union(b)a | b
  3. a.difference(b)a - b 只在a,不在b
  4. 对称差 a.symmetric_difference(b)a ^ b 在a并b中,但不在a交b中
  5. 判断子集 b.issubset(a)b <= a
  6. 判断超集 a.issuperset(b)a >= b
  7. 真子集 a < a
  8. 添加 s.add(a)
  9. 更新
    1. s.update(newS)
    2. s.difference_update(b) 从a中去除属于b的元素
  10. 删除
    1. s.remove(object) 删除指定元素,没有会报错
    2. descard(object) 没有不会报错
    3. pop() 删除并返回任意元素,没有元素会报错

文件IO

  1. 打开 open(file, mode='r')
  2. 读取全部 f.read()
  3. 按行读取 f.readlines() 返回行列表
  4. 关闭 f.close()

内置函数与语法糖

range()

列表推导式

  • 一种简洁的创建列表的方式
    • 操作
    • 过滤

[expression for item in iterable if condition]

1
evenNums = [x for x in range(1, 101) if x %2 == 0] # 1-100的偶数

Author:-QuQ-
Link:http://172.207.131.165/2024/07/01/Python%E5%9F%BA%E7%A1%80/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可