Python 基础
1.标准数据类型
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
其中
- 不可变数据:Number(数字)、String(字符串)、Tuple(元组)
- 可变数据:List(列表)、Dictionary(字典)、Set(集合)
1.1 Number(数字)
Python3 支持 int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
内置的 type() 函数可以用来查询变量所指的对象类型。
或者使用 isinstance(a, int)
isinstance 和 type 的区别在于:
- type()不会认为子类是一种父类类型。
- isinstance()会认为子类是一种父类类型
1.2 String(字符串)
Python中的字符串用单引号 ‘ 或双引号 “ 括起来,同时使用反斜杠 \ 转义特殊字符。
变量[头下标:尾下标] 左闭合区间
索引值以 0 为开始值,-1 为从末尾的开始位置。
str = 'Runoob'
print (str) # 输出字符串
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符
print (str[0]) # 输出字符串第一个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次
print (str + "TEST") # 连接字符串
Runoob
Runoo
R
noo
noob
RunoobRunoob
RunoobTEST
Python 使用反斜杠()转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串
>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob
>>>
注意:
- 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
- 字符串可以用+运算符连接在一起,用*运算符重复。
- Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
- Python中的字符串不能改变。
1.3 List(列表)
列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
变量[头下标:尾下标] 左闭合区间
索引值以 0 为开始值,-1 为从末尾的开始位置。
注意:
- List写在方括号之间,元素用逗号隔开。
- 和字符串一样,list可以被索引和切片。
- List可以使用 + 操作符进行拼接。
- List中的元素是可以改变的。
- 截取时可以接收第三个参数,作用是截取的步长
1 | r1 = [] |
1.4 Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
其实,可以把字符串看作一种特殊的元组。
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
注意:
- 与字符串一样,元组的元素不能修改。
- 元组也可以被索引和切片,方法一样。
- 注意构造包含 0 或 1 个元素的元组的特殊语法规则。
- 元组也可以使用+操作符进行拼接。
1.5 Dict (字典)
1 | r2 = {} |
1.6 Set(集合)
2.数字和字符串拼接
id = 1
session_key = str(id) + '_user'
3. if 条件
3.1 短路原则
条件判断遵循短路原则,第一个条件判断之后如果能确定整个 if 表达式的值,那就不再判断下一个了
1 | a = 0 |
3.2 三元表达式
1 | res = true if 1 > 0 else false |
3.3 汉诺塔
1 | a b c 三个位置分别对应 开始位置、中间借助的位置、最终位置 |
3. 正则
1 | import re |
3.1 查找一项
- search: 查找任意位置的匹配项
- match: 从字符串开头匹配,如果开头第一个字符就不配,返回 None
- fullmatch: 整个字符串和正则完全匹配才行,否则返回 None
3.2 查找多个匹配项
- findall: 从字符串任意位置查找,返回一个列表
- finditer: 从字符串任意位置查找,返回一个迭代器
列表是一次性生成在内存中,而迭代器是需要使用时一点一点生成出来的,内存使用更优。所以如果存在大量的匹配项,使用 finditer 更好一点。
3.3 分割
re.split(pattern, string, maxsplit=0, flags=0)
函数:用 pattern 分开 string,maxsplit表示最多进行分割次数,flags表示模式,比如 re.IGNORECASE
在 不需要正则支持 且 数据量和数次不多 的情况下使用 str.split 函数更合适,反之则使用 re.split 函数。
3.4 替换
- sub: 替换掉字符串中被正则匹配到的字符,返回替换后的字符串
- subn: 替换掉字符串中被正则匹配到的字符,返回替换后的字符串和替换次数
3.5 其他
- re.escape(pattern): 如果 pattern 中存在特殊字符,通过该方法可自动转义。但是可能存在转义错误问题,所以还是手动转义更安全。
- re.purge(): 清除正则缓存