二级Python

基本语法/概念

  • .format

是一个字符串的方法,用于将变量值插入到字符串中,是一种构建动态字符串的方法。语法:formatted_string="字符串{},字符串{}".format(value1, value2),参数的数量要与占位符的数量相等。要按图片上的顺序依次设置

对于类型:b代表二进制,o代表八进制,d十进制,x十六进制,X表示大写的十六进制。如果格式化输出使用`"`填充,为避免与其他引号冲突,需要将引号转义,即`\"`

字符串前面加上小写字母r时,表示原始字符串raw string,不会对反斜杠\进行转义处理,而是被视为普通字符,用途:文件路径、正则表达式,如:

1
2
normal_string = "C:\\Users\\Username\\Documents"
raw_string = r"C:\Users\Username\Documents"

在常规字符串中,反斜杠需要双写以表示正确路径

  • 保留字

也称为关键字,被编程语言所保留,不能用作变量名

  • 序列sequence

字符串、列表、元组都是序列,可以进行索引和切片的操作,索引可以用负数表示,最后一位从-1开始;切片语法如[2:4],需要指定两个位置,也可以用负数表示。如果要切前几个或者后几个元素,可以省略一个索引,如[2:]。列表和字典的元素可以通过赋值语句改变,但元组和字符串不行。定义元组的时候可以不加圆括号(默认是元组),如果元组只有一个元素,需要带上逗号。

切片的语法:sequence[start:stop:step],step值默认为1。每隔三个取出一个元素组成子序列:[::3];若step为负值,表示反向遍历,倒序输出字符串:[::-1]

sequence支持in的语法,比如用于判断某个元素在不在此序列中;字典也可以用in,用Key进行判断,而不是Value

列表的sort函数:将列表进行重新排序,两个参数:key参数是一个函数,指定了排序的依据,使用lambda函数lambda x: x[1]表示根据每个元素的第二个元素来进行;reserve参数是一个布尔值,True降序,反之升序。ls.sort(key=lambda x:x[1], reserve=True)

  • 字典

每个元素都是一个键值对:Key:Value,Value可以是任何类型的对象(可以是另一个字典),而Key必须是可以进行哈希计算的对象,通常是数字或者字符串。字典可以根据键去查找值,如m={‘account’:111},可通过print(m['account'])进行查找。特点就是速度快。同一字典中Key必须唯一,如果不唯一,后者会覆盖前者

操作元素:m={} m["aaa"]=111,若aaa不存在,则添加;若存在,则修改。删除元素:pop方法,如var=m.pop('aaa')返回aaa对应的值,即var=111。clear方法用于清空字典

如果字典想用循环,可以使用items方法,会返回一个类似列表的对象,即for key, value in m.items()用两个变量依次赋值。字典的合并:update方法,m1.update(m2)

keys方法将每个Key构成一个类似列表的对象,print(m.keys());类似的,values就是取出所有value值构成类似列表,都可以用于循环。

如果对字典使用max函数,则只判断键

关于类似列表,都可以使用list方法将其转化为列表,每个键值对将会被转化为元组作为列表元素储存

考点:get方法,用于查找键,和dic[“name”]作用相同,对于后者,如果找不到,会返回KeyError异常,而get可避免此情况,会返回默认值None,可设置,dic.get(“no”, “default”)。细品:d[m]=d.get(m, 0)+1查找m键,若没有,则进行添加,且值设为1,若进行迭代,再查找m,找到一次,值就加1

  • 列表生成式
1
ls = [x**2 for x in range(5)]
  • eval()

执行包含有效python表达式的字符串,并返回表达式的结果。如print(eval("2+3"))输出结果为5。也可理解为把字符串类型转化为int类型

  • chr()

将整数型参数按照Unicode编码转换为对应字符

  • ord()将字符型按照Unicode编码转化为整数型
1
print(ord('A')) # 输出:65
  • complex()用于创建一个复数对象
1
2
3
4
5
6
7
8
z1 = complex(3, 2)
print(z1) # 输出: (3+2j)
z2 = complex(5)
print(z2) # 输出: (5+0j)
z3 = complex(imag=4)
print(z3) # 输出: 4j
z4 = complex()
print(z4) # 输出: 0j
  • split()

将字符串切割为子字符串,并返回列表,默认分隔符是空格

  • divmod()
1
2
3
# 对10除以3,返回整除结果和余数
result = divmod(10, 3)
print(result) # 输出: (3, 1)元组
  • id()获取对象的唯一标识符,可以视为该对象在内存中的地址或指针,一般情况不用
1
2
3
4
# 创建一个列表对象
my_list = [1, 2, 3]
identity = id(my_list)
print(identity) # 输出: 140726270963648
  • str.center()用于将字符串的输出居中
1
2
3
4
5
6
text = "Python"
# 居中对齐并在两侧填充空格,总宽度为10
centered_text = text.center(10)
print(centered_text) # 输出: " Python "# 使用自定义填充字符 '@',总宽度为15
custom_centered_text = text.center(15, '@')
print(custom_centered_text) # 输出: "@@@Python@@@@"
  • round()将一个数值进行四舍五入
1
2
3
4
5
6
# 四舍五入到最接近的整数
result = round(3.14159)
print(result) # 输出: 3
# 保留两位小数
result = round(3.14159, 2)
print(result) # 输出: 3.14
  • 函数参数
1
2
3
4
5
6
7
8
# a是普通参数,*b是一个可变参数,允许接受任意数量的额外参数,并作为元组传递给函数
def fun(a, *b):
print("普通参数 a:", a)
print("可变参数 b:", b)
# 调用函数,传递一个普通参数和多个可变参数
fun(1, 2, 3, 4, 5)
'''输出普通参数 a: 1
可变参数 b: (2, 3, 4, 5)'''

可变参数时函数更加灵活,可以在函数内部使用循环来处理元组中的值

  • .join()

需要一个可迭代对象作为参数,并在该对象的每个元素之间插入指定字符串,然后把所有元素连接为一个字符串。这里的元素必须也是字符串

1
2
3
4
5
6
7
8
9
10
my_list = ["apple", "banana", "cherry"]
# 使用空字符串将列表中的元素连接成一个字符串
result = "".join(my_list)
print(result) # 输出: "applebananacherry"
# 使用空格将列表中的元素连接成一个字符串
result = " ".join(my_list)
print(result) # 输出: "apple banana cherry"
# 使用逗号和空格将列表中的元素连接成一个字符串
result = ", ".join(my_list)
print(result) # 输出: "apple, banana, cherry"
  • repalce()

用于字符串的替换操作,语法是.repalce(old, new, count)。应用:将输入的123转化为一二三

  • strip()

用于删除字符串开头和结尾的空白字符(空格、制表符、换行符)用于清理字符串,也可以指定参数,如str.strip("#")删除指定字符(位于中间的#删不掉)

  • range()

返回值是一个可迭代对象,可通过list函数将其转换为列表。列表有append方法,向列表末尾添加单个元素;extend方法添加多个元素(列表);insert用于向指定位置(索引)添加元素,语法是insert(index, element)

  • 三次方的表示方法:
    • n*n*n
    • n**3
    • pow(n, 3)
  • 文件读写:

内置open函数,常用的三个参数:file,mode,encoding。mode有三个值:r表示只读,可以使用read函数进行所有内容的读取(如果内容太多,可以指定size参数,表示每次读取的字符串个数,此处涉及到文件指针的概念,再读时会接着往下而不是从头开始读);w写入,然后可以使用write函数写入文本内容(覆盖 重写)如果要把写入的文件存在指定位置,那么这个位置必须要提前存在,此函数只能新建文件,并不能新建文件夹;a追加模式,在已有txt文件的末尾进行补充。encoding默认是系统的编码方式UTF-8。每次使用open函数之后都要使用close关闭

当for循环遍历一个文本文件时。每次迭代会处理一行文本,因为txt文件默认按行进行分割,且字符串包含\n换行符

库及考点

jieba

jieba(结巴)是一个中文文本处理库,用于中文分词,对中文自然语言处理非常重要

运行pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple指定清华源进行安装

函数:jieba.lcut() 精确模式,返回一个列表,用len函数得到列表元数

random

  • seed指定种子
  • sample(list, k)从list列表中随机选取k个元素,并以列表形式返回
  • randint(a, b)生成一个(a, b)范围内的整数

所遇问题

  • AttributeError: partially initialized module 'jieba' has no attribute 'cut' (most likely due to a circular import)循环导入的问题所导致,不要命名为jieba.py,因为会与库的名称冲突
  • print连续输出不换行:因为print的end参数默认为’\n’,想要不换行那就print(i, end=’’)