Loading

Python基础

date: 2019-12-14 08:47:49
updated: 2020-04-01 14:00:00

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
>>>  

注意:

  1. 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
  2. 字符串可以用+运算符连接在一起,用*运算符重复。
  3. Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
  4. Python中的字符串不能改变。

1.3 List(列表)

列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号 [] 之间、用逗号分隔开的元素列表。

变量[头下标:尾下标] 左闭合区间

索引值以 0 为开始值,-1 为从末尾的开始位置。

注意:

  1. List写在方括号之间,元素用逗号隔开。
  2. 和字符串一样,list可以被索引和切片。
  3. List可以使用 + 操作符进行拼接。
  4. List中的元素是可以改变的。
  5. 截取时可以接收第三个参数,作用是截取的步长
r1 = []
r1.append(1)

1.4 Tuple(元组)

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。

其实,可以把字符串看作一种特殊的元组。

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。

构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

注意:

  1. 与字符串一样,元组的元素不能修改。
  2. 元组也可以被索引和切片,方法一样。
  3. 注意构造包含 0 或 1 个元素的元组的特殊语法规则。
  4. 元组也可以使用+操作符进行拼接。

1.5 Dict (字典)

r2 = {}
r2["k1"] = "v1"

1.6 Set(集合)

2.数字和字符串拼接

id = 1
session_key = str(id) + '_user'

3. if 条件

3.1 短路原则

条件判断遵循短路原则,第一个条件判断之后如果能确定整个 if 表达式的值,那就不再判断下一个了

a = 0
b = 1
if (a > 0) and (b / a > 2):
    print("yes")
else:
    print("no")
结果:no

if (a > 0) or (b / a > 2):
    print("yes")
else:
    print("no")
结果:报除零错

3.2 三元表达式

res = true if 1 > 0 else false

3.3 汉诺塔

a b c 三个位置分别对应 开始位置、中间借助的位置、最终位置

def hano(n, a, b, c):
    if n == 1:
        print(a, "-->", c)
        return None
    hano(n - 1, a, c, b) # 开始位置是 a,借助 c,把除了最后一个都放到 b
    print(a, "-->", c)
    hano(n - 1, b, a, c) # 开始位置是 b,借助 a,把除了最后一个都放到 c


hano(3, "A", "B", "C")

3. 正则

import re

text = "......"
pattern = r"..."
regex = re.compile(pattern, re.IGNORECASE) # 忽略大小写,先进行编译,返回一个正则对象
result = regex.function(text)

3.1 查找一项

  1. search: 查找任意位置的匹配项
  2. match: 从字符串开头匹配,如果开头第一个字符就不配,返回 None
  3. fullmatch: 整个字符串和正则完全匹配才行,否则返回 None

3.2 查找多个匹配项

  1. findall: 从字符串任意位置查找,返回一个列表
  2. finditer: 从字符串任意位置查找,返回一个迭代器

列表是一次性生成在内存中,而迭代器是需要使用时一点一点生成出来的,内存使用更优。所以如果存在大量的匹配项,使用 finditer 更好一点。

3.3 分割

re.split(pattern, string, maxsplit=0, flags=0)
函数:用 pattern 分开 string,maxsplit表示最多进行分割次数,flags表示模式,比如 re.IGNORECASE

在 不需要正则支持 且 数据量和数次不多 的情况下使用 str.split 函数更合适,反之则使用 re.split 函数。

3.4 替换

  1. sub: 替换掉字符串中被正则匹配到的字符,返回替换后的字符串
  2. subn: 替换掉字符串中被正则匹配到的字符,返回替换后的字符串和替换次数

3.5 其他

  1. re.escape(pattern): 如果 pattern 中存在特殊字符,通过该方法可自动转义。但是可能存在转义错误问题,所以还是手动转义更安全。
  2. re.purge(): 清除正则缓存
posted @ 2020-10-22 10:03  猫熊小才天  阅读(50)  评论(0编辑  收藏  举报