由于我本身有 Golang, NodeJS 经验, Python 也写过一些项目, 这里基础语法只快速写一些和其他语言略有不同的习惯.
数据类型
数据类型参考: https://www.geeksforgeeks.org/python-data-types/?ref=lbp
基础数据类型包括:
- 数字(int, float)
- 布尔 bool
- 序列(字符串 str, list
[], tuple()) - map
{k:v} - set
{} - binary
类型判断:
type() 判断类型
isinstance() 判断类型是否属于指定类型
id() 判断底层是否是一个目标
hash() 计算哈希值
dir(obj) 查看类型支持的方法
类型转化:
数据类型转换, 参考: https://cloud.tencent.com/developer/article/1945472
- 数字-字符串: int(), float(), bool(), str()
- 数字-字符: chr(), unichr(), ord(), hex(), oct()
- 元组-列表: tuple(), list()
- 字典: dict()
- 集合: set(), frozenset()
输出格式化:
类型格式化符号, 参考: https://python-course.eu/python-tutorial/formatted-output.php
使用 print("字符串" % (变量tuple)) 格式化 %[flags][width][.precision]type
d或i整型f浮点c字符r或s字符串
数字 Numeric
参考: https://www.runoob.com/python3/python3-number.html
Int 整型
1000 以下的整型数字, 是不基于引用计数销毁的, 所有 1000 以下数字的变量都指向相同目标
运算有 +, -, *, /除, //整除, %取余, **求幂(与 pow 函数相同)
除法不判断 0 会有 ZeroDivisionError 问题
整型有无限长度, 限制是电脑支持的上限
Float 浮点
- round(x, dec) 遇到5是奇上偶下
Bool 布尔
与 NodeJS 类似, or 都是懒惰判断
- 1 and 2 => 2 (最后一个值)
- 1 or 0 => 1 (第一个真值或最后一个值)
本质上 True => 1, False => 0
反过来判断为 False 的有 0, 0.0, "", [], {}, ()
Python允许连续判断: a<b<c, 连续赋值 a=b=c=1
优先级 not > and > or
序列 Sequence
- 链接
+, 重复* - 判断子字符串:
in,not in - 取下标
[] - 截取
[:] - 长度
len()
Str 字符串
参考: https://www.runoob.com/python3/python3-string.html
Unicode 编码的不可变序列
单引号, 双引号, 三引号均可. 三引号可以编写跨行字符串, 注释.
- 拼接:
"_".join(["a","b","c"]) - 分割:
"xx".split(" ")
List 列表 []
参考: https://www.runoob.com/python3/python3-list.html
类型不统一的可变序列
- 增:
L.append(item) - 删:
del L[id]或L.remove(v) - 改:
L[id] = v - 查:
L[id] - 排序:
L.sort(reverse=False)inline正序,sorted(L)不影响原列表返回排序好的新列表
Tuple 元组 ()
参考: https://www.runoob.com/python3/python3-tuple.html
类型不统一的不可变序列, 只允许查询.
字典 Map
参考: https://www.runoob.com/python3/python3-dictionary.html
字典: {k:v} 结构的无序可变键值对, k 必须是不可变对象(可hash哈希的): str, bool, int, float, tuple.
可以使用 map() 将 [[k,v], ...], [(k,v), ...], ["kv", ...] 转化为字典
增/改:
d[k] = v删:
del d[k]或v = d.pop(k)查:
d[k]清空:
d.clear(), 字典还在变成空字典删除:
del d, 字典删除不存在了键:
d.keys()值:
d.values()键值对:
d.items()
集合 Set
参考: https://www.runoob.com/python3/python3-set.html
集合: {} 无序数据集. 支持交并差补.
可变集合 Set:
增:
s.add(x)删:
s.remove(x)不存在报错,s.discard(x)不存在不报错,s.pop()随机删除改:
s.update(x, y)清空:
d.clear(), 字典还在变成空字典成员关系:
in,not in判断元素是否在集合中集合关系:
==,!=,>,>=,<,<=判断是否是子集交集
&,&=并且并集
|,|=或差集
-,-=减补集
^,^=异或
不可变集合 FrozenSet: 不能做增删修改操作