
Python基础
Python基础
这是一个Python基础合集。适合那些已经学习过一门编程语言的人入门Python。
对象与内存
对象
在python中,万物皆对象。对象有两种;
- 不可变对象:操作后返回副本
- int
- float
- complex
- bool
- str
- tuple
- frozenset
- 可变对象:操作后改变自身
- list
- dict
- set
- 用户定义类
内存
- GC收集方式:引用计数
del()
- 删除对象的引用
- 删除可变序列的元素
id(object)
返回变量内存地址
运算
- 除法
/
总是返回浮点数 - 幂指数
a**5
a的五次方 - 绝对值
abs(num)
- 取整
round(num)
四舍五入 - 最值
max(num) min(num)
- 类型转换
type(original)
- 不同进制表示
0b 0o 0x
binary octal hexadecimal - 链式比较
m < x <= n
序列(sequence)
- 元素的有序集合,能够通过索引访问元素
- 包括
列表(list)
,元组(tuple)
,字符串(str)
,字节串(bytes)
,生成器
等 - Python3.7之后,字典是有序的
操作
- 索引
seq[index]
index可以为负。-1表示序列最后一个元素 - 切片
seq[start:end:step]
- [start, end)左闭右开
- 缺省:start=0, end=lastIndex, step=1
- 逆序:step取负
- 解包
p1, p2, p3 = seq
*
解包,**
字典解包- _:一个变量名
- 加法
seq1 + seq2
- 乘法
seq * repeatNTimes
- 成员检查
element in seq
- 长度
len(seq)
- 最值
min(seq) max(seq)
- 求和
sum(seq)
- 排序
sorted(seq)
- 计数
seq.count(element)
- 索引定位
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)
- 不定长可变序列
创建
- 方括号创建
[element1, element2, element3]
- list()创建
list(sequene)
操作
- 由于list是可变对象,可以对其进行修改
- 尾接
l.append(object)
l.extend(list)
append可以是一个列表,整体作为一个元素插入。extend作用相当于list的+= - 插入
l.insert(index, object)
在索引处插入 - 删除
l.remove(object)
删除第一个匹配到的元素。不在列表中会报错 - 弹出
l.pop(index)
删除并返回索引元素 - 排序
l.sort()
- 逆序
l.reverse()
元组(tuple)
- 定长不可变序列
创建
- 圆括号创建
(element1, element2, element3)
,(element,)
- 1的简化形式:逗号分隔
element1, element2, element3
- 使用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字符串
创建
- 引号创建
"string" 'string'
- 强制转换
str(object) repr(pbject)
string与representation- 数字转字符串
hex(255)
oct(255)
bin(255)
- 数字转字符串
- 格式化字符串
"{} {}".format("a", "b")
1
2
miku = "Hatsune Miku"
color = "{R}, {G}, {B}".format(R="39", G="C5", B="BB")
操作
- 分割
s.split(separator)
缺省为空白字符(\n \t) - 连接
connector.join(elements)
- 替换
s.replace(old, new)
会匹配所有能替换的old,不改变原字符串 - 大小写转换
s.upper() s.lower()
全大写/全小写 - 去除首尾空格
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及更高版本中,字典是有序的,但不能通过下标访问)
- 键必须是不可变类型
创建
- 大括号创建
{key1: value1, key2: value2}
{}
是空字典 - dict()创建
操作
- 访问与修改值
d[key]
如果没有会报错 - 获取值
d.get(key, default)
default默认为Node,可以自行更改 - 删除键值对
d.pop(key, defualt=None)
删除并返回值,没有这个键则返回默认del(d["key"])
- 更新
d.update(newD)
(其实是合并) - 获取键值
- 键列表
d.keys()
- 值列表
d.values()
- 键值对元组列表
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)
- 无序可变不重复
- 集合的元素必须是不可变(且可哈希)的
创建
- 大括号创建
{element1, element2, element3}
- set()创建 空集合必须用set()创建。因为
{}
是空字典
操作
- 交
a.intersection(b)
或a & b
- 并
a.union(b)
或a | b
- 差
a.difference(b)
或a - b
只在a,不在b - 对称差
a.symmetric_difference(b)
或a ^ b
在a并b中,但不在a交b中 - 判断子集
b.issubset(a)
或b <= a
- 判断超集
a.issuperset(b)
或a >= b
- 真子集
a < a
- 添加
s.add(a)
- 更新
s.update(newS)
s.difference_update(b)
从a中去除属于b的元素
- 删除
s.remove(object)
删除指定元素,没有会报错- descard(object) 没有不会报错
- pop() 删除并返回任意元素,没有元素会报错
文件IO
- 打开
open(file, mode='r')
- 读取全部
f.read()
- 按行读取
f.readlines()
返回行列表 - 关闭
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的偶数