Python基础语法和模块

文章目录

1、变量和简单类型

1.1、单选注释和多行注释

单行注释使用#号
多行注释使用三个单引号```或三个双引号"“”"

1.2、变量

1.2.1、python是弱类型
>>> a = 10
>>> print(type(a))  # 可以使用type查看变量的类型
<class 'int'>

可以使用print函数输出变量

# print函数的语法格式
# print(value , ..., sep=' ', end='\n', file=sys.stdout, flush=False)
1.2.2、变量的命名规则

必须以字母或下划线开头,后面跟任意数目的字母、数字和下划线。区分大小写
python2.x对中文支持差,如果要使用中文字符或变量,需要在python源文件的第一行增加"# coding:utf-8",源文件必须保存为UTF-8编码。

1.3、数值类型

1.3.1、整型

支持小整数,也支持大整数

>>> a = 99999999999999
>>> print(type(a))
<class 'int'>

整型数值的4种形式

  • 十进制形式:最普通的整数就是十进制形式的整数
  • 二进制形式:以 0b或0B 开头的整数就是二进制形式的整数
  • 八进制形式:以0o或0O 开头的整数就是八进制形式的整数(第二个字母是大写或小写的O)
  • 十六进制形式:以0x或0X开头整数就是十六进制形式的整数,其中 10~15 分别以af(此处的af不区分大小写)来表示
1.3.2、浮点数
  • 十进制形式:例如:6.1
  • 科学计数形式:例如:6.1e2(即6.11010)
1.3.3、复数

复数的虚部用j或J表示,如

>>> a = 5 + 0.2j
>>> print(a)
(5+0.2j)
>>> print(type(a))
<class 'complex'>

1.4、字符串

字符串的内容几乎可以包含任何字符(英文字符、中文字符)。
Python3.X对中文字符支持较好,2.X则需要在源码文件中增加"# coding:utf-8"
python不允许直接拼接数值和字符串,可以使用str()或repr函数将数值转成字符串。

# 拼接字符串
>>> str = "Hello" + "World"
>>> 
>>> age = "年龄:"
>>> num = 9
>>> print(age + str(9))
年龄:9
>>> print(age + repr(9))
年龄:9

使用input获取用户输入的内容

>>> msg = input("请输入:")
请输入:小明
>>> print(msg)
小明
>>> print(type(msg))
<class 'str'>

长字符串使用三个引号(单引号、双引号都可以)

str = ```你好,这是
python长字符串```
print(str)

特殊字符反斜线,需要反义;或者使用"r"开头,表示原始字符串

>>> s = r"D:\project\python"
>>> print(s)
D:\project\python

python3新增type类型,代表字节(二进制),可用于网络传输,也可以存储各种二进制文件,比如图片、音乐等文件。
字符串转成字节的方法有3种:

# 1、如果为ASCII字符,可以在字符串前用b开头表示
>>> b = b'hello'
>>> print(b)
b'hello'
>>> print(b[0])
104
# 2、调用bytes()函数转换,默认使用UTF-8编码
>>> b = bytes("你好!", encoding="UTF-8")
>>> print(b)
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81'
# 3、使用字符串的encode()方法转成bytes,默认使用UTF-8编码
>>> b = '你好!'.encode('UTF-8')
>>> print(b)
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81'

字节转成字符的方法,用bytes的decode()转换

>>> b = b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81'
>>> print(b.decode('utf-8'))
你好!
1.4.1 格式化输出

python字符串格式化符号:

符 号描述例子
%c格式化字符及其ASCII码
%s格式化字符串print(“%s” % str2)
%d或%i格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x或%X格式化无符号十六进制数
%f格式化浮点数字,可指定小数点后的精度
%e或%E用科学计数法格式化浮点数(e小写/大写)
%g%f和%e的简写
%G%F 和 %E 的简写
%p用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号功能例子
*定义宽度或者小数点精度
-用做左对齐#2个空间大小输出,不够的用0补齐,左对齐
print(“%-02d”%a)
+在正数前面显示加号( + )
在正数前面显示空格
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%‘输出一个单一的’%’
(var)映射变量(字典参数)print(“%(name)s,年龄%(age)4d岁” % {“name”: ‘test’, “age”: 20})
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
1.4.2 字符串操作

可以通过[]使用索引获取字符,字符串第一个索引号是0,第二个为1,依次类推;最后一个索引为-1,倒数第二个索引为-2,依次类推;

>>> s = "你好!早上好"
>>> print(s[1])
好
# 打印索引号1至3(不包含3)的字符
>>> print(s[1:3]) 
好!
>>> print(s[1:])
好!早上好

len()获取字符串长度

>>> print(len(s))
6

min()获取最小字符和max获取最大字符

>>> s = "abcdefg"
>>> print(min(s))
a
>>> print(max(s))
g

dir()列出指定类或模块包含的全部内容(包含函数、方法、类、变量等)

>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

help()查看某个函数或方法的帮助文档

>>> help(str)
Help on class str in module builtins:

class str(object)
 |  str(object='') -> str
 |  str(bytes_or_buffer[, encoding[, errors]]) -> str
 |
......

str类中与大小写有关的常用方法:

>>> s = "hello WORLD"
# title将每个单词的首字母大写
>>> s.title()
'Hello World'
# 将整个字符串小写
>>> s.lower()
'hello world'
# 将整个字符串大写
>>> s.upper()
'HELLO WORLD'

删除空白

>>> s = "  hello  "
# 删除左边的空白
>>> print(s.lstrip())
hello
# 删除右边的空白
>>> print(s.rstrip())
  hello
# 删除两边的空白
>>> print(s.strip())
hello

查找、替换相关方法

>>> s = 'hello world!'
# startswith判断是否以指定的字符串开头
>>> print(s.startswith('hello'))
True
# endswith判断是否以指定的字符串结尾
>>> print(s.endswith('ld'))
False
>>> print(s.endswith('ld!'))
True
# find查找指定子串在字符串中出现的位置,如果没有找到指定子串 ,则返回-1
>>> print(s.find('ld!'))
9
# index查找指定子串在字符串中出现的位置,如果没有找到指定子串,则引发ValueError错误
>>> print(s.index('ld!'))
9
# replace字符串替换
>>> print(s.replace('hello', '你好'))
你好 world!
# maketrans生成映射表,
>>> table = str.maketrans('he', '你好')
>>> print(table)
{104: 20320, 101: 22909}
# translate根据映射表对字符串进行替换
>>> print(s.translate(table))
你好llo world!

字符串分割、连接

>>> s = 'hello world!'
# split将字符串按指定分割符分割成多个短语
>>> print(s.split('o'))
['hell', ' w', 'rld!']
>>> sj = s.split()
>>> print(sj)
['hello', 'world!']
# join将多个短语连接成字符串
>>> print(','.join(sj))
hello,world!

1.5、运算符

1.5.1、==与is区别

==与 is 很相似,==只比较两个变量的值,但is要求两个变量引用同一个对象。

import time
a = time.gmtime()
b = time.gmtime()
# 时间相等,输出True
print(a==b)
# a和b不是同一对象,输出False
print(a is b)
# 可以通过id()函数打印对象引用的内存地址
print(id(a))
print(id(b))
1.5.2、三元运算符
# 如果 x 为 True,返回 a;否则返回 b
a if x else b
1.5.3、in成员运算符

in判断某个成员是否位于序列中,同样提供not in;

>>> a = "Hello"
>>> print("H" in a)
True
>>> print(3 in [1, 2, 3])
True

2、列表、元组、字典

2.1、创建列表和元组

列表和元组的创建语法有点相似,列表使用方括号,元组使用圆括号,元素之间以英文逗号隔。

# 创建列表
>>> mylist = ["hello","world"]
>>> print(mylist)
['hello', 'world']
# 创建元组
>>> mytuple = ("hello", "world")
>>> print(mytuple)
('hello', 'world')

2.2、列表和元组通用的操作

在不涉及元素改变的操作,列表和元组是通用的。


>>> mylist = ["hello","world","你好","世界"]
# 1、通过索引下标访问元素
>>> print(mylist[0])
hello
# 2、子序列,分片语法[start : end : step]
>>> print(mylist[0:2])
['hello', 'world']
# 3、加法运算,只能列表和列表相加,元组和元组相加
>>> mylist2 = ["python"]
>>> mylist3 = mylist + mylist2
>>> print(mylist3)
['hello', 'world', '你好', '世界', 'python']
2.1.1 长度、最大值、最小值

Python 提供了内置的len()、 max()、 min()全局函数来获取元组或列表的长度、最大值和最小值。

>>> t = (-1,0,1,2,3)
# 长度
>>> print(len(t))
5
# 最大值
>>> print(max(t))
3
# 最小值
>>> print(min(t))
-1
>>> l = ['ab','bb','cb']
>>> print(len(l))
3
# 字符串按ASCII值比较
>>> print(max(l))
cb
>>> print(min(l))
ab
2.1.2 序列封包与解包
  • 序列封包:把多个值赋给一个变量时,python会转为元组。
  • 序列解包:python允许将元组或列表赋值给多个变量。
>>> vars = 1,2,3
>>> print(vars)
(1, 2, 3)
>>> print(type(vars))
<class 'tuple'>
>>> a,b,c = vars
>>> print(a,b,c)
1 2 3
# 可以只解出部分变量,剩下的使用列表保存,变量之前添加“*”,那么该变量就代表是个列表,可以保存多个集合元素
>>> first, second, *rest = range(10)
>>> print(first,second,rest)
0 1 [2, 3, 4, 5, 6, 7, 8, 9]

2.3 列表

元组不可变,列表可以变;元组支持的操作,列表都支持;列表支持对元素的修改,元组不支持

2.3.1 列表和区间转换

list()函数可将元组、区间对象转换为列表

>>> t = ('hello',1,2)
>>> l = list(l)
>>> print(l)
['hello', 1, 2]
>>> r = range(1,5)
>>> l2 = list(r)
>>> print(l2)
[1, 2, 3, 4]
# 指定步长的区间
>>> r2 = range(1,10,2)
>>> l3 = list(r2)
>>> print(l3)
[1, 3, 5, 7, 9]

tuple()函数可将列表、区间对象转换为元组

>>> l = ['hello', 1,2]
>>> print(tuple(l))
('hello', 1, 2)
>>> r = range(1,10,2)
>>> print(tuple(r))
(1, 3, 5, 7, 9)
2.3.2 增加列表元素

列表的append()方法可以把单个值、元组、列表添加到列表的后面,但是参数中的元组或列表都作为单个元素。
列表的extend()方法实现类似功能,但是可以元组、列表不会作为整体添加。
列表的insert()方法将元素插入到指定位置。
del()函数可以根据索引删除列表中的元素,也可以删除变量,支持列表分片删除。
列表的remove()方法可以根据值删除元素。
列表的clear()清空列表元素。
元素的修改可以通过索引下标操作,也可以通过slice语法操作
列表的count():用 于统计列表中某个元素出现的次数。
列表的index():用 于判断某个元素在列表中出现的位置,如果不存在,会引发ValueError,在使用index()方法时还可传入start和end参数,用于在列表的指定范围内搜索元素。
列表的pop():用于将列表当成“技”使用 实现元素 出战功能
列表的reverse():用 于将列表中的元素反向存放
列表的sort(): 用于对列表元素排序。

# append()
>>> list1 = ['hello', 1,2]
# 添加单个值
>>> list1.append('world')
>>> print(list1)
['hello', 1, 2, 'world']
# 添加元组,元组作为单个元素添加到后面
>>> list1.append((3,4))
>>> print(list1)
['hello', 1, 2, 'world', (3, 4)]
# 添加列表,列表作为单个元素添加到后面
>>> list1.append(["python", "java"])
>>> print(list1)
['hello', 1, 2, 'world', (3, 4), ['python', 'java']]

# extend()
>>> list1 = ['hello', 1,2]
# 添加字符串,会把每个字符单独作为一个元素添加
>>> list1.extend('world')
>>> print(list1)
['hello', 1, 2, 'w', 'o', 'r', 'l', 'd']
# 添加元组
>>> list1.extend((3,4))
>>> print(list1)
['hello', 1, 2, 'w', 'o', 'r', 'l', 'd', 3, 4]
# 添加列表
>>> list1.extend(['python','list'])
>>> print(list1)
['hello', 1, 2, 'w', 'o', 'r', 'l', 'd', 3, 4, 'python', 'list']

# insert
>>> list1 = ['hello', 1,2]
>>> list1.insert(1, 'world')
>>> print(list1)
['hello', 'world', 1, 2]
>>> list1.insert(2, ('python','java'))
>>> print(list1)
['hello', 'world', ('python', 'java'), 1, 2]
>>> list1.insert(5, ['python','java'])
>>> print(list1)
['hello', 'world', ('python', 'java'), 1, 2, ['python', 'java']]

# del()
>>> list1 = ['hello', 1,2]
>>> print(list1)
['hello', 1, 2]
>>> del list1[0]
>>> print(list1)
[1, 2]
>>> del list1[0:2]
>>> print(list1)
[]
# 删除变量,会引发NameError错误
>>> del list1
>>> print(list1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'list1' is not defined. Did you mean: 'list'?

# remove
>>> list1 = ['hello', 1,2]
>>> list1.remove('hello')
>>> print(list1)
[1, 2]

# clear
>>> list1.clear()
>>> print(list1)
[]

# 修改
>>> list1 = ['hello', 1,2]
>>> list1[1] = 'world'
>>> print(list1)
['hello', 'world', 2]
>>> list1[1:3] = [3,4]
>>> print(list1)
['hello', 3, 4]

>>> list1 = list(range(1,10))
>>> print(list1)
# count,查找5在列表中出现的次数
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(list1.count(5))
1
# index,查找9在列表中出现的位置
>>> print(list1.index(9))
8
# index,查找9在列表中0,5区间出现的位置
>>> print(list1.index(9,0,5))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 9 is not in list
# pop
>>> print(list1.pop())
9
>>> print(list1)
[1, 2, 3, 4, 5, 6, 7, 8]
# reverse
>>> list1.reverse()
>>> print(list1)
[8, 7, 6, 5, 4, 3, 2, 1]

# sort默认从小到大排序
>>> list1.sort()
>>> print(list1)
[1, 2, 3, 4, 5, 6, 7, 8]
# sort传入reverse=True参数,从大到小排序
>>> list1.sort(reverse=True)
>>> print(list1)
[8, 7, 6, 5, 4, 3, 2, 1]

2.4 字典

2.4.1 创建

可以使用花括号创建,也可以使用dict()创建字典

>>> m = {"user":"test", "age":10}
>>> print(m)
{'user': 'test', 'age': 10}
>>> print(type(m))
<class 'dict'>
# 使用dict()可以把成对key-value的列表转为字典
>>> l = [['user', 'test'],['age', 10]]
>>> m2 = dict(l)
>>> print(m2)
{'user': 'test', 'age': 10}
# 因为元组是不可变,可以使用元组作为key。
>>> m3 = {('user','test'):10}
>>> print(m3)
{('user', 'test'): 10}
# 通过参数创建字典
>>> m4 = dict(user = 'test', age = 10)
>>> print(m4)
{'user': 'test', 'age': 10}
2.4.2 基本用法
>>> m = {'user':'test'}
# 通过key访问
>>> print(m['user'])
test
# 通过key修改
>>> m['user']='test10'
# 通过key添加
>>> m['age']=10
>>> print(m)
# 使用in或not in判断是否存在
{'user': 'test10', 'age': 10}
>>> print('user' in m)
True
2.4.3 常用方法

clear()用于清空宇典中所有的key-value对。
get()方法其实就是根据key来获取value,方括号访问不存在的key,字典会引起KeyError错误;get访问不存在的key,会返回None。
update()方法根据key-value对来更新己有的字典,如果不存在,则会添加。
items()、keys()、values()分别用于获取字典中的所key-value、 所有的key、所有value,依次返回dict_items、dict-keys、dict-values对象,可通过list把它们转换成列表再操作。
pop()方法用于获取指定key对应的value,并删除这个key-value。
popitem()方法用于随机弹出字典中的一个key-value对。
setdefault()方法也用于根据key来获取对应value, 但key在字典中不存在时,该方法会先为这个不存在key设置默认的value,然后再返回value。
fromkeys()方法使用给定的多个key创建字典,这些key对应的value默认都是None;也可以额外传入一个参数作为默认的value。

>>> m = {'user':'test'}
>>> print(m.get('user'))
test
>>> m.update({'age':10,'score':90})
>>> print(m)
{'user': 'test', 'age': 10, 'score': 90}
>>> item = m.items()
>>> print(type(item))
<class 'dict_items'>
>>> print(item)
dict_items([('user', 'test'), ('age', 10), ('score', 90)])
>>> print(list(item))
[('user', 'test'), ('age', 10), ('score', 90)]
>>> keys = m.keys()
>>> print(keys)
dict_keys(['user', 'age', 'score'])
>>> values = m.values()
>>> print(values)
dict_values(['test', 10, 90])
m.pop('test')
# 随机弹出一个key-value,可通过序列解包接收key和value
k,v = m.popitem()
m.
>>> m.clear()
>>> print(m)
{}
>>> dict.fromkeys(['a','b'])
{'a': None, 'b': None}
# 带默认值
>>> dict.fromkeys(['a','b'],10)
{'a': 10, 'b': 10}
# 使用字典格式化字符串
>>> text = '姓名:%(user)s,年龄:%(age)s'
>>> m = {"user":"test", "age":10}
>>> print(text % m)
姓名:test,年龄:10

3、流程控制

3.1、if分支

支持三种形式

>>> age = 10
# 第一种
>>> if age == 10:
...     print('age=10')
...

# 第二种
>>> if age == 10:
...     print('age=10')
... else:
...     print('age!=10')
...

# 第三种
>>> if age == 10:
...     print('age=10')
... elif age < 10:
...     print('age<10')
... elif age > 0:
...     print('age>10')
... else:
...     # pass 作为空语句,占位
...     pass

3.2、断言

断言语句用于对bool表达式进行断言,如果该bool表达式为True, 该程序可以继续执行,否则程序会引发AssertionError错误。

>>> age = input('请输入年龄:')
请输入年龄:10
>>> age = int(age)
>>> assert age < 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

3.3、循环结构

3.3.1、while循环
>>> count_i = 10
>>> while count_i > 0:
...     print('count_i=', count_i)
...     count_i = count_i -1
...
count_i= 10
count_i= 9
count_i= 8
count_i= 7
count_i= 6
count_i= 5
count_i= 4
count_i= 3
count_i= 2
count_i= 1
>>> print('end count_i=', count_i)
end count_i= 0

# 遍历元组和列表
>>> m = ['hello', 'world']
>>> i = 0
>>> while i < len(m):
...     print(m[i])
...     i +=1
>>> while len(m) > 0:
...     print(m.pop())

3.3.2、for in循环
# 遍历列表、元组
>>> m = [1,1.1,2,2.0]
>>> for i in range(0, len(m)):
...     print(m[i])
1
1.1
2
2.0
>>> for ele in m:
...     if isinstance(ele, int):
...             print('整数:', ele)
...     elif isinstance(ele, float):
...             print('浮点数:', ele)
...
整数: 1
浮点数: 1.1
整数: 2
浮点数: 2.0

# 遍历字典
>>> m = {'user':'test', 'age':10}
# 第一种方式
>>> for k,v in m.items():
...     print(k,v)
...
user test
age 10
# 第二种方式
>>> for k in m.keys():
...     print(k,m[k])
...
user test
age 10
# 第三种方式
>>> for v in m.values():
...     print(v)
...
test
10
3.3.3、循环使用else
# while中使用else
>>> age = 10
>>> while age > 0:
...     print('age=%d大于0' % age)
...     age -= 1
... else:
...     print('age=%d小于0' % age)

# for中使用else
>>> age = 10
>>> for a in range(0,age):
...     print('age=%d' % a)
... else:
...     print('end age=%d' % a)
3.3.4、for表达式

语法:[表达式 for 循环计数器 in 可迭代对象]

>>> a = range(1,5)
>>> v = [x * x for x in a]
>>> print(v)
[1, 4, 9, 16]

# 使用if,只迭代符合条件的元素
>>> a = range(1,5)
>>> v = [x * x for x in a if x % 2 == 0]
>>> print(type(v))
<class 'list'>
>>> print(v)
[4, 16]

# 中括号改为圆括号,for不再是表达式,而是一个生成器。
>>> a = range(1,5)
>>> v_gen = (x * x for x in a if x % 2 == 0)
>>> print(type(v_gen))
<class 'generator'>
>>> for v in v_gen:
...     print(v, end='\t')
...
4       16
3.3.5、常用工具函数

zip()函数可以把多个列表“压缩”zip对象(可迭代对象),如果列表长度不相等, 那么zip将以长度更短的列表为准。
reversed()函数实现反向遍历。
sorted()函数,该函数接收一个可迭代对象作为参数,返回一个对元素排序的列表,可传入reverse参数,如果将该参数设置为True,则表示反向排序。

# zip
>>> a = ['user', 'age']
>>> b = ['test',10]
>>> for k,v in zip(a,b):
...     print(k,v)
...
user test
age 10

# reversed
>>> a = ['user', 'age']
>>> [x for x in reversed(a)]
['age', 'user']
# sorted
>>> sorted(a)
['age', 'user']
>>> sorted(a,reverse=True)
['user', 'age']
3.3.6、控制循环结构

break:跳出循环
continue:中断本次循环
return:结束方法

4、函数和lambda表达式

4.1、函数定义

函数可以不加->表示动态定义和加->表示静态定义。

def 函数名(形参列表):
    #可执行语句组成的函数
    [return [返回值]]

# 在def那一行后面会加一个->,表示期待的输入类型和输出类型。
def add(a:int, b:int) -> int:
    return a+b
4.1.1、函数文档

函数文档在函数声明之后,函数体之前的一段字符串,可通过help()查看函数文档

>>> def test(x,y):
...      '''
...      test(x,y)
...              返回两个数之间转大的数
...      '''
...      z = x if x > y else y
...      return z
...
>>> help(test)
Help on function test in module __main__:

test(x, y)
    test(x,y)
            返回两个数之间转大的数

>>> print(test.__doc__)

     test(x,y)
             返回两个数之间转大的数
4.1.2、多个返回值

如果函数有多个返回值,会自动将多个返回值封装成元组。

4.2、函数参数

4.2.1、函数
>>> def test(user, age):
...     return {'user':user,'age':age}
...
# 按位置顺序传入参数
>>> print(test('test',10))
{'user': 'test', 'age': 10}
# 按关键字名传入参数,可不按顺序传入,注意关键参数只能放在参数列表后边传入。
>>> print(test(age=10,user='test'))
{'user': 'test', 'age': 10}
# 参数默认值age=10,有默认值的参数必须在后面
>>> def test(user, age=10):
...     return {'user':user,'age':age}
# 加*代表可变参数,可变参数当成元组传入;允许可变参数位于任何位置,但带可变参数的函数最后位置只能有一个普通参数
>>> def test(*parames):
...     print(parames)
...
>>> test('test',10)
('test', 10)
# 加**两个星可以收集关键字参数,会被当成字典收集
>>> def test(**parames):
...      print(parames)
...
# 把列表或元组拆开传给参数,需要在传入的变量前加*
>>> test(user = 'test', age = 10)
{'user': 'test', 'age': 10}
>>> def test(user, age):
...     return {'user':user,'age':age}
...
>>> list1 = ['test',10]
>>> test(*list1)
{'user': 'test', 'age': 10}
# 把字典拆开传给参数,需要在传入的变量前加**
>>> map1 = {'user': 'test1', 'age': 11}
>>> test(**map1)
{'user': 'test1', 'age': 11}
4.2.2、变量作用域

python提供三个工具获取指定范围的变量字典
globals():该函数返回全局范围内所有变量组成的“变量字典”
locals():该函数返回当前局部范围内所有变量组成的“变量字典”
vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入object参数, vars和locals的作用完全相同。

age = 100
def userinfo():
    # 内部的age
    age = 10
    print('local age:', age)
    print('local age:', locals()['age'])
    print('locals vars:', locals())
    # 调用全局的age
    print('globals age:', globals()['age'])

    locals()['age'] = 11 # 修改不生效
    print('1 update local age', age)
    print('1 update local age:', locals()['age'])

    age = 12 # 修改生效
    print('2 update local age', age)
    print('2 update local age:', locals()['age'])


user = 'test'
userinfo()
print('locals vars:', locals())
print('globals vars:', globals())

globals()['age'] = 55
print('update globals age', age)
print('update globals age:', locals()['age'])

## 运行结果
#local age: 10
#local age: 10
#locals vars: {'age': 10}
#globals age: 100
#1 update local age 10
#1 update local age: 10
#2 update local age 12
#2 update local age: 12
#locals vars: {'age': 100, 'user': 'test'}
#globals vars: {'age': 100, 'user': 'test'}
#update globals age 55
#update globals age: 55

4.3、局部函数

函数可以作为参数传入函数体,也可以作为返回值返回
函数体内定义的函数

# 全局函数
def outfunc(type,n):
    m = 10
    # 内部函数
    def square(n):
        # nonlocal声明使用所在函数中的变量
        nonlocal m
        return m*n*n
    if type == 'value':
        return square(n)
    if type == 'func':
        return square

# 返回值
print(outfunc('value', 2))
# 返回函数
print(outfunc('func', 2))
# 返回函数时,再调用函数
print(outfunc('func', 2)(2))

4.4、lambda表达式

语法:

lambda 参数列表: 表达式

lambda表达式的本质就是匿名的、单行函数体的函数。适合用于单选函数、省去函数定义更简洁;用完释放,提高性能。
lambda表达式可以写成函数的形式。

lambda x , y:x + y
# 可改写为如下函数形式
def add(x, y): 
  return x+ y

5、类和对象

5.1、类、对象、方法

class Person:
    # 执行语句

    # 定义0至多个变量,变量可动态添加和删除,删除del
    hair = ' black '
    # 定义__init__构造方法,所有方法第一个参数是self,被绑定到构造方法初始化的对象
    def __init__ (self, name ='test', age = 10):
        # 增加两个实例变量
        self.name = name
        self.age= age

    # 定义0至多个方法
    # 定义了一个 say 方法
    def say(self, content):
        print(self.name,":",content)



## 实例化
person = Person()
print(person.name,person.age)
person.say('你好!')
# 动态添加变量
person.score = 100
print('score:',person.score)
# 动态添加方法,调用时需要手动传入self参数变量
def info(self):
    print("info:",self.name,self.age)
person.info = info
person.info(person)

person.info2 = lambda self:print("lambda info:",self.name,self.age)
person.info2(person)

# 使用MethodType自动绑定第一个参数
def info3(self):
    print("MethodType info:",self.name,self.age)

person.info3 = MethodType(info3,person)
person.info3()

info4 = person.info3
info4()

# 通过类也能调用方法,第一个参数需要手动传入
Person.say(person,'你好!,类名调用')

################# 运行结果 ##############
test 10
test : 你好!
score: 100
info: test 10
lambda info: test 10
MethodType info: test 10
MethodType info: test 10
test : 你好!,类名调用

5.2、类方法和静态方法

class Bird:
    # 使用@classmethod修饰的方法是类方法,类自动绑定到第一个参数
    @classmethod
    def fly(f):
        print("类方法fly:", f)

    # 使用@staticmethod修饰的方法是静态方法,需要手动绑定参数
    @staticmethod
    def info(i):
        print("静态方法info:", i)

# 调用类方法
Bird.fly()
# 调用静态方法
Bird.info('test')

#######运行结果#######
类方法fly: <class '__main__.Bird'>
静态方法info: test
类方法fly: <class '__main__.Bird'>
静态方法info: test2

5.3、函数修饰器

def funA(fn):
    print('funA method')
    fn()
    return 'funA result'

@funA
def funB():
    print('funB method')

print(funB)

#########运行结果###########
funA method
funB method
funA result

@符号来修饰函数是非常实用的功能,可以在被修饰函数前/后添加一些额外的处理逻辑,并且不需要修改被修饰函数的代码,其实是类似其他编程语言的AOP(面向切面编程)

def auth(fn):
    def auth_fn(*args):
        print('===先进行权限检查===')
        fn(*args)
    return auth_fn

@auth
def login(user, psw):
    print('登录login,参数a:%s,参数b:%s' % (user, psw))
login('test','123456')

5.4、使用property函数定义属性

在使用property()函数时,可传入4个参数,分别代表getter方法、setter方法、del方法和doc方法,其中doc是文档字符串,用于说明该属性。
在使用property可传入0个(不能读写)、1个(只读属性)、2个(读写属性)、3个(读写属性,也可删除)和4个(读写属性,也可删除,包含文档说明〉参数
property()函数

#coding=utf-8
class Foo(object):
    def get_bar(self):
        print("getter...")
        return 'laowang'

    def set_bar(self, value): 
        """必须两个参数"""
        print("setter...")
        return 'set value' + value

    def del_bar(self):
        print("deleter...")
        return 'laowang'

    BAR = property(get_bar, set_bar, del_bar, "description...")

obj = Foo()

obj.BAR  # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = "alex"  # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
desc = Foo.BAR.__doc__  # 自动获取第四个参数中设置的值:description...
print(desc)
del obj.BAR  # 自动调用第三个参数中定义的方法:del_bar方法

#################
getter...
setter...
description...
deleter...

@property装饰器

class Goods:
    @property
    def price(self):
        print('@property')

    @price.setter
    def price(self, value):
        print('@price.setter')

    @price.deleter
    def price(self):
        print('@price.deleter')

obj = Goods()
obj.price          # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price = 123    # 自动执行 @price.setter 修饰的 price 方法,并将  123 赋值给方法的参数
del obj.price      # 自动执行 @price.deleter 修饰的 price 方法

################运行结果##############
@property
@price.setter
@price.deleter

5.5、隐藏和封装

python没有提供private修饰符,通过使用双下划线开头处理。

class MyClass:
    def __init__(self):
        self.__private = 0  # 私有变量
    def __private_method(self):
        pass  # 私有方法

########运行########        
obj = MyClass()
print(obj.__private)  # 报错,无法直接访问私有变量
obj.__private_method()  # 报错,无法直接调用私有方法        
       
# Python并没有像其他编程语言一样严格限制私有成员的访问,通过一种名为“名称修饰”的机制,将双下划线开头的变量名进行了变换。
# 变量__private在类内部被重命名为_MyClass__private,方法__private_method在类内部被重命名为_MyClass__private_method。
obj = MyClass()
print(obj._MyClass__private)  # 访问重命名后的私有变量
obj._MyClass__private_method()  # 调用重命名后的私有方法  

5.6、继承

Python支持多继承,子类继承的语法是在定义子类时,将多个父类放在子类之后的圆括号里。
如果多个父类包含了同名的方法,排在前面的父类方法会遮蔽排在后面的父类同名方法。

class Fruit:
    def info(self):
        print("水果:%s" % self.name)

class Food:
    def taste(self):
        print("口感:%s" % self.tast)

# 定义Apple类,继承了Fruit和Foot类
class Apple(Fruit, Food):
    name = '苹果'
    tast = '甜'

a = Apple()
a.info()
a.taste()
5.6.1、重载

子类重写父类方法后,可以通过类名的方式调用,注意类名的方式调用不会自动绑定第一个self参数
使用super调用父类的构造方法,会自动绑定第一个参数。

class A:
    def __init__(self):
        print("打印属性 a")

class B(A):
    def __init__(self):
        print("打印属性 b")
        A.__init__(self)  # super() 等同于 super(B, self)

class C(A):
    def __init__(self):
        print("打印属性 c")
        A.__init__(self)  # super() 等同于 super(C, self)

class D(B, C):
    def __init__(self):
        print("打印属性 d")
        B.__init__(self)
        C.__init__(self)

d = D()

##############
打印属性 d
打印属性 b
打印属性 a
打印属性 c
5.6.2、动态性

Python是动态语言,类、对象的属性、方法都可以动态增加和修改,任何类的实例包含一个字典__dict__,
如果程序要限制某个类允许动态添加的属性和方法,可以通过__slots__属性指定,__slots__的作用是阻止在实例化类时为实例分配dict。

5.6.3、使用type函数创建类

当type()只有一个参数时,其作用就是返回变量或对象的类型当type()有三个参数时,其作用就是创建类对象:

  • 第一个参数:name表示类名称,字符串类型
  • 第二个参数:bases表示继承对象(父类),元组类型,单元素使用逗号
  • 第三个参数:attr表示属性,这里可以填写类属性、类方式、静态方法,采用字典格式,key为属性名,value为属性值
    语法:type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
def add(self, age):
    self.age += age

Myclass = type('Myclass', (), {'age': 10, 'add': add})
c = Myclass()
print('age:',c.age)
c.add(100)
print('add age:',c.age)

#############运行结果#############
age: 10
add age: 110
5.6.4、使用metaclass

metaclass可以控制类的创建过程,包括类的属性、方法和父类等。metaclass可以用于实现一些高级的编程技巧,例如自动注册子类、自动添加属性和方法等
在Python当中,call,new,init__三者之间的关系
在类实例化的过程当中,哪个对象加()就寻找产生这个对象的类的__call__方法,只要是__call__方法,一定会做三件事情:
1、调用__new__方法,构造新的对象,相当于Java当中的构造函数.(对象自己的__new

2、调用__init__方法,去初始化这个对象(对象自己的__init__)
3、返回这个对象.

class Mymeta(type):  # 只有继承了type类才能称之为一个元类,否则就是一个普通的自定义类
    def __init__(self, class_name, class_bases, class_dic):
        print('Mymeta self:', self)  # 现在是People
        print('Mymeta class_name:', class_name)
        print('Mymeta class_bases:', class_bases)
        print('Mymeta class_dic:', class_dic)
        super(Mymeta, self).__init__(class_name, class_bases,class_dic)  # 重用父类type的功能
class People(object, metaclass=Mymeta):  # People=Mymeta(类名,基类们,类的名称空间)
    country = 'China'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print('People:%s is eating' % self.name)

p = People('test', 10)
p.eat()

##########运行######
Mymeta self: <class '__main__.People'>
Mymeta class_name: People
Mymeta class_bases: (<class 'object'>,)
Mymeta class_dic: {'__module__': '__main__', '__qualname__': 'People', 'country': 'China', '__init__': <function People.__init__ at 0x000001DB996FF5E0>, 'eat': <function People.eat at 0x000001DB996FF670>}
People:test is eating

5.7、检查类型

Python提供了两个函数来检查类型

  • issubclass(cls,class_or_tuple):检查cls是否为后一个类或元组包含的多个类中任意类的子类。
  • isinstance(obj,class_or_tuple):检查obj是否为后一个类或元组包含的多个类中任意类的对象。
    Python为所有类提供一个__bases__属性,查看该类的所的直接父类,返回父类组成的元组。
    Python为所有类提供一个__subclasses__()方法,查看该类的所有直接子类,返回该类的所有子类组成的列表。

5.8、枚举类

程序有两种方式来定义枚举类:

  • 直接使用 Enum 列出多个枚举值来创建枚举类。
  • 通过继承 Enum 基类来派生枚举类。
    直接使用 Enum 列出多个枚举值来创建枚举类:
import enum
#定义枚举类
Season = enum.Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
#直接访问指定枚举对象
print(Season.SPRING)
#访问枚举成员的变量名
print(Season.SPRING.name)
#访问枚举成员的值
print(Season.SPRING.value)
#根据枚举变量名访问枚举对象
print(Season['SUMMER'])    #输出Season.SUMMER
#根据枚举值访问枚举对象       #输出Season.FALL
print(Season(3))

####################
Season.SPRING
SPRING
1
Season.SUMMER
Season.FALL

如果要定义更复杂的枚举,则可通过继承 Enum 来派生枚举类

import enum
class Orientation(enum.Enum):
    #为序列指定值
    EAST = '东'
    SOUTH = '南'
    WEST = '西'
    NORTH = '北'
    def info(self):
        print('这是一个定义方向为【%s】的枚举'% self.value)
print(Orientation.SOUTH)
print(Orientation.SOUTH.value)
#通过枚举变量访问枚举
print(Orientation['WEST'])
#通过枚举值访问枚举
print(Orientation('北'))
#调用枚举的info()方法
Orientation.EAST.info()
#循环遍历Orientation枚举的所有成员
for name, member in Orientation.__members__.items():
    print(member, '--->', name, '--->', member.value)
    
###########运行###########
Orientation.SOUTH
南
Orientation.WEST
Orientation.NORTH
这是一个定义方向为【东】的枚举
Orientation.EAST ---> EAST ---> 东
Orientation.SOUTH ---> SOUTH ---> 南
Orientation.WEST ---> WEST ---> 西
Orientation.NORTH ---> NORTH --->

6、异常处理

6.1、异常处理机制

try:
	pass # 尝试做
except ValueError as e:
	pass # 捕获一个错误
except (TypeError, SyntaxError) as e:
	pass # 捕获多个错误
except Exception as e:
	pass # 捕获其他错误
else:
	pass # 没有捕捉到错误
finally:
	pass # 最终都会执行

6.2、raise引发异常

python会自动引发异常,也可以通过raise显示地引发异常。

try:
     s = None
     if s is None:
         print "s 是None对象"
         raise NameError     #如果引发NameError异常,后面的代码将不能执行
     print len(s)  
except TypeError:
     print "空对象没有长度"
 
s = None
if s is None:
    raise NameError 
print 'is here?' 

7、特殊属性和方法

7.1、特殊属性

Class.__doc__ # 类型帮助信息 ‘Class1 Doc.’
Class.__name__ # 类型名称 ‘Class1’
Class.__module__ # 类型所在模块 ‘main’
Class.__bases__ # 类型所继承的基类 (<type ‘object’>,)
Class.__dict__ # 类型字典,存储所有类型成员信息。 <dictproxy object at 0x00D3AD70>
obj.__class__ # 类型 <class ‘__main__.Class1’>
obj.__module__ # 实例类型所在模块 ‘__main__’
obj.__dict__ # 对象字典,存储所有实例成员信息。 {‘i’: 1234}

7.2、对象创建和销毁

__new__(cls, ...): #创建对象时调用,返回一个新的实例。
__init__(self, ...): #对象初始化时调用,用于设置对象的初始状态。
__del__(self): #对象被销毁时调用,进行资源清理操作。

7.3、字符串表示和格式化

__str__(self): #将对象转换为字符串的方法,通过str(obj)或print(obj)调用。
__repr__(self): #将对象转换为供开发者阅读的字符串的方法,通过repr(obj)调用。
__format__(self, format_spec): #格式化对象的方法,通过format(obj, format_spec)调用。

7.4、属性访问和设置

__getattr__(self, name): #获取不存在的属性时调用。
__setattr__(self, name, value): #设置属性值时调用。
__delattr__(self, name): #删除属性时调用。
__getattribute__(self, name): #获取属性时调用,无论属性是否存在。

7.5、容器类型操作

__len__(self): #返回对象的长度,通过len(obj)调用。
__getitem__(self, key): #获取对象的索引值或键值对应的值,通过obj[key]调用。
__setitem__(self, key, value): #设置对象的索引值或键值对应的值,通过obj[key] = value调用。
__delitem__(self, key): #删除对象的索引值或键值对应的值,通过del obj[key]调用。
__iter__(self): #返回一个迭代器对象,通过iter(obj)调用。
__next__(self): #在迭代器中返回下一个元素,通过next(obj)调用。
__contains__(self, item): #检查对象是否包含某个元素,通过item in obj调用。

7.6、函数调用和可调用对象

__call__(self, ...): #将对象作为函数调用,通过obj()调用。

7.7、比较和排序

__eq__(self, other): #比较对象是否相等,通过obj == other调用。
__ne__(self, other): #比较对象是否不相等,通过obj != other调用。
__lt__(self, other): #比较对象是否小于,通过obj < other调用。
__gt__(self, other): #比较对象是否大于,通过obj > other调用。
__le__(self, other): #比较对象是否小于等于,通过obj <= other调用。
__ge__(self, other): #比较对象是否大于等于,通过obj >= other调用。

7.8、数值运算

__add__(self, other): #加法运算,通过obj + other调用。
__sub__(self, other): #减法运算,通过obj - other调用。
__mul__(self, other): #乘法运算,通过obj * other调用。
__truediv__(self, other): #真除法运算,通过obj / other调用。
__floordiv__(self, other): #整除法运算,通过obj // other调用。
__mod__(self, other): #取模运算,通过obj % other调用。
__pow__(self, other): #幂运算,通过obj ** other调用。

7.9、位运算

__and__(self, other): #位与运算,通过obj & other调用。
__or__(self, other): #位或运算,通过obj | other调用。
__xor__(self, other): #位由于回答的内容过长,无法完整列出所有的特殊方法。

8、模块和包

python3标准库

8.1、导入模块

import module1 # 导入一个模块
import package1.module1 # 导入一个包中的模块
import module1 as alias # 给模块起别名
from module1 import func1 # 从模块中导入一个函数
from module1 import * # 导入模块中的所有函数
# 导入 sys,os两个模块,并为sys指定别名s,为os指定别名o。
import sys as s,os as o
# 使用模块别名作为前缀来访问模块中的成员
print(s.argv[0])
print (o.sep)

##########运行结果######
test.py
\

8.2、包和模块

模块文件的文件名就是它的模块名,比如modulel.py的模块名就是modulel

模块:python的源码文件,模块的形式如“xxx.py”。
包:存放模块的文件夹,包的名字就是此文件夹的名字。每个包中都包含文件__init__.py,表明这个文件夹是python的包。

8.3、模块相关的方法

import string
# dir()函数可以返回模块或类的所有成员(变量、方法、类),包含双下划线成员
print(dir(string))
# 使用模块自带的变量查看所有,不包含双下划线成员
print(string.__all__)

# help查看文档信息
help(string.capwords)
# __doc__查看文档信息
print(string.capwords.__doc__)

# 查看模块的源码文件路径
print(string.__file__)

9、常见模块

9.1、基本模块

  • 文本处理服务
    • string — 常见的字符串操作
    • re — 正则表达式操作
    • difflib — 计算差异的辅助工具
    • textwrap — 文本自动换行与填充
    • unicodedata — Unicode 数据库
    • stringprep — 因特网字符串预备
    • readline — GNU readline 接口
    • rlcompleter — GNU readline 的补全函数
  • 二进制数据服务
    • struct — 将字节串解读为打包的二进制数据
    • codecs — 编解码器注册和相关基类
  • 数据类型
    • datetime — 基本日期和时间类型
    • zoneinfo — IANA 时区支持
    • calendar — 日历相关函数
    • collections — 容器数据类型
    • collections.abc — 容器的抽象基类
    • heapq — 堆队列算法
    • bisect — 数组二分查找算法
    • array — 高效的数字数组
    • weakref — 弱引用
    • types — 动态类型创建和内置类型名称
    • copy — 浅层 (shallow) 和深层 (deep) 复制操作
    • pprint — 数据美化输出
    • reprlib — 另一种 repr() 实现
    • enum — 对枚举的支持
    • graphlib — 操作类似图的结构的功能
  • 数字和数学模块
    • numbers — 数字的抽象基类
    • math — 数学函数
    • cmath — 关于复数的数学函数
    • decimal — 十进制定点和浮点运算
    • fractions — 分数
    • random — 生成伪随机数
    • statistics — 数学统计函数
  • 函数式编程模块
    • itertools — 为高效循环而创建迭代器的函数
    • functools — 高阶函数和可调用对象上的操作
    • operator — 标准运算符替代函数
  • 文件和目录访问
    • pathlib — 面向对象的文件系统路径
    • os.path — 常用路径操作
    • fileinput — 迭代来自多个输入流的行
    • stat — 解析 stat() 结果
    • filecmp — 文件及目录的比较
    • tempfile — 生成临时文件和目录
    • glob — Unix 风格路径名模式扩展
    • fnmatch — Unix 文件名模式匹配
    • linecache — 随机读写文本行
    • shutil — 高阶文件操作
  • 数据持久化
    • pickle — Python 对象序列化
    • copyreg — 注册配合 pickle 模块使用的函数
    • shelve — Python 对象持久化
    • marshal — 内部 Python 对象序列化
    • dbm — Unix “数据库” 接口
    • sqlite3 — SQLite 数据库 DB-API 2.0 接口模块
  • 数据压缩和存档
    • zlib — 与 gzip 兼容的压缩
    • gzip — 对 gzip 格式的支持
    • bz2 — 对 bzip2 压缩算法的支持
    • lzma — 用 LZMA 算法压缩
    • zipfile — 使用ZIP存档
    • tarfile — 读写tar归档文件
  • 文件格式
    • csv — CSV 文件读写
    • configparser — 配置文件解析器
    • tomllib — 解析 TOML 文件
    • netrc — netrc 文件处理
    • plistlib — 生成与解析 Apple .plist 文件
  • 加密服务
    • hashlib — 安全哈希与消息摘要
    • hmac — 基于密钥的消息验证
    • secrets — 生成管理密码的安全随机数
  • 通用操作系统服务
    • os — 多种操作系统接口
    • io — 处理流的核心工具
    • time — 时间的访问和转换
    • argparse — 命令行选项、参数和子命令解析器
    • getopt — C 风格的命令行选项解析器
    • logging — Python 的日志记录工具
    • logging.config — 日志记录配置
    • logging.handlers — 日志处理程序
    • getpass — 便携式密码输入工具
    • curses — 终端字符单元显示的处理
    • curses.textpad — 用于 curses 程序的文本输入控件
    • curses.ascii — 用于 ASCII 字符的工具
    • curses.panel — curses 的面板栈扩展
    • platform — 获取底层平台的标识数据
    • errno — 标准 errno 系统符号
    • ctypes — Python 的外部函数库
  • 并发执行
    • threading — 基于线程的并行
    • multiprocessing — 基于进程的并行
    • multiprocessing.shared_memory — 可跨进程直接访问的共享内存
    • The concurrent package
    • concurrent.futures — 启动并行任务
    • subprocess — 子进程管理
    • sched — 事件调度器
    • queue — 一个同步的队列类
    • contextvars — 上下文变量
    • _thread — 底层多线程 API
  • 网络和进程间通信
    • asyncio — 异步 I/O
    • socket — 底层网络接口
    • ssl — 套接字对象的 TLS/SSL 包装器
    • select — 等待 I/O 完成
    • selectors — 高级 I/O 复用库
    • signal — 设置异步事件处理程序
    • mmap — 内存映射文件支持
  • 互联网数据处理
    • email — 电子邮件与 MIME 处理包
    • json — JSON 编码和解码器
    • mailbox — 操作多种格式的邮箱
    • mimetypes — 映射文件名到 MIME 类型
    • base64 — Base16, Base32, Base64, Base85 数据编码
    • binascii — 二进制和 ASCII 码互转
    • quopri — 编码与解码经过 MIME 转码的可打印数据
  • 结构化标记处理工具
    • html — 超文本标记语言支持
    • html.parser — 简单的 HTML 和 XHTML 解析器
    • html.entities — HTML 一般实体的定义
    • XML处理模块
    • xml.etree.ElementTree — ElementTree XML API
    • xml.dom — 文档对象模型 API
    • xml.dom.minidom — 最小化的 DOM 实现
    • xml.dom.pulldom — 支持构建部分 DOM 树
    • xml.sax — 支持 SAX2 解析器
    • xml.sax.handler — SAX 处理句柄的基类
    • xml.sax.saxutils — SAX 工具集
    • xml.sax.xmlreader — 用于 XML 解析器的接口
    • xml.parsers.expat — 使用 Expat 的快速 XML 解析
  • 互联网协议和支持
    • webbrowser — 方便的 Web 浏览器控制工具
    • wsgiref — WSGI 工具和参考实现
    • urllib — URL 处理模块
    • urllib.request — 用于打开 URL 的可扩展库
    • urllib.response — urllib 使用的 Response 类
    • urllib.parse 用于解析 URL
    • urllib.error — urllib.request 引发的异常类
    • urllib.robotparser — robots.txt 语法分析程序
    • http — HTTP 模块
    • http.client — HTTP 协议客户端
    • ftplib — FTP 协议客户端
    • poplib — POP3 协议客户端
    • imaplib — IMAP4 协议客户端
    • smtplib — SMTP 协议客户端
    • uuid — RFC 4122 定义的UUID对象
    • socketserver — 用于网络服务器的框架
    • http.server — HTTP 服务器
    • http.cookies — HTTP状态管理
    • http.cookiejar —— HTTP 客户端的 Cookie 处理
    • xmlrpc — XMLRPC 服务端与客户端模块
    • xmlrpc.client — XML-RPC 客户端访问
    • xmlrpc.server — 基本 XML-RPC 服务器
    • ipaddress — IPv4/IPv6 操作库
  • 多媒体服务
    • wave — 读写WAV格式文件
    • colorsys — 颜色系统间的转换
  • 国际化
    • gettext — 多语种国际化服务
    • locale — 国际化服务
  • 程序框架
    • turtle — 海龟绘图
    • cmd — 支持面向行的命令解释器
    • shlex —— 简单的词法分析
  • Tk图形用户界面(GUI)
    • tkinter —— Tcl/Tk 的 Python 接口
    • tkinter.colorchooser — 颜色选择对话框
    • tkinter.font — Tkinter 字体封装
    • Tkinter 对话框
    • tkinter.messagebox — Tkinter 消息提示
    • tkinter.scrolledtext — 滚动文字控件
    • tkinter.dnd — 拖放操作支持
    • tkinter.ttk — Tk 风格的控件
    • tkinter.tix — TK扩展包
    • IDLE
  • 开发工具
    • typing —— 对类型提示的支持
    • pydoc — 文档生成器和在线帮助系统
    • Python 开发模式
    • doctest — 测试交互式的 Python 示例
    • unittest — 单元测试框架
    • unittest.mock — 模拟对象库
    • unittest.mock — 上手指南
    • 2to3 — 自动化的 Python 2 到 3 代码转写
    • test — Python 回归测试包
    • test.support — 针对 Python 测试套件的工具
    • test.support.socket_helper — 用于套接字测试的工具
    • test.support.script_helper — 用于 Python 执行测试工具
    • test.support.bytecode_helper — 用于测试正确字节码生成的支持工具
    • test.support.threading_helper — 用于线程测试的工具
    • test.support.os_helper — 用于操作系统测试的工具
    • test.support.import_helper — 用于导入测试的工具
    • test.support.warnings_helper — 用于警告测试的工具
  • 调试和分析
    • 审计事件表
    • bdb — 调试器框架
    • faulthandler —— 转储 Python 的跟踪信息
    • pdb — Python 的调试器
    • Python 性能分析器
    • timeit — 测量小代码片段的执行时间
    • trace —— 跟踪 Python 语句的执行
    • tracemalloc — 跟踪内存分配
  • 软件打包和分发
    • ensurepip — 引导 pip 安装器
    • venv — 创建虚拟环境
    • zipapp —— 管理可执行的 Python zip 打包文件
  • Python 运行时服务
    • sys — 系统相关的形参和函数
    • sys.monitoring — 执行事件监测
    • sysconfig —— 提供对 Python 配置信息的访问支持
    • builtins — 内建对象
    • main ——顶层代码环境
    • warnings ——控制警告信息
    • dataclasses — 数据类
    • contextlib — 为 with语句上下文提供的工具
    • abc — 抽象基类
    • atexit — 退出处理器
    • traceback —— 打印或读取栈回溯信息
    • future — Future 语句定义
    • gc — 垃圾回收器接口
    • inspect — 检查对象
    • site —— 指定域的配置钩子
  • 自定义 Python 解释器
    • code — 解释器基类
    • codeop — 编译Python代码
  • 导入模块
    • zipimport — 从 Zip 存档中导入模块
    • pkgutil — 包扩展工具
    • modulefinder — 查找脚本使用的模块
    • runpy ——查找并执行 Python 模块
    • importlib — import 的实现
    • importlib.resources – 包资源的读取、打开和访问
    • importlib.resources.abc – 针对资源的抽象基类
    • importlib.metadata – 访问软件包元数据
    • sys.path 模块搜索路径的初始化
  • Python 语言服务
    • ast — 抽象语法树
    • symtable ——访问编译器的符号表
    • token — 与Python解析树一起使用的常量
    • keyword — 检验Python关键字
    • tokenize — 对 Python 代码使用的标记解析器
    • tabnanny — 模糊缩进检测
    • pyclbr — Python 模块浏览器支持
    • py_compile — 编译 Python 源文件
    • compileall — 字节编译 Python 库
    • dis — Python 字节码反汇编器
    • pickletools — pickle 开发者工具集
  • Windows系统相关模块
    • msvcrt — 来自 MS VC++ 运行时的有用例程
    • winreg — 访问 Windows 注册表
    • winsound —— Windows 系统的音频播放接口
  • Unix 专有服务
    • posix — 最常见的 POSIX 系统调用
    • pwd — 用户密码数据库
    • grp — 组数据库
    • termios — POSIX 风格的 tty 控制
    • tty — 终端控制功能
    • pty — 伪终端工具
    • fcntl —— 系统调用 fcntl 和 ioctl
    • resource — 资源使用信息
    • Unix syslog 库例程
  • 模块命令行界面(CLI)
  • 被取代的模块
    • aifc — 读写 AIFF 和 AIFC 文件
    • audioop — 处理原始音频数据
    • cgi — 通用网关接口支持
    • cgitb — 用于 CGI 脚本的回溯管理器
    • chunk — 读取 IFF 分块数据
    • crypt —— 验证 Unix 口令的函数
    • imghdr — 推测图像类型
    • mailcap — Mailcap 文件处理
    • msilib — 读写 Microsoft Installer 文件
    • nis — Sun 的 NIS (黄页) 接口
    • nntplib — NNTP 协议客户端
    • optparse — 命令行选项的解析器
    • ossaudiodev — 访问兼容OSS的音频设备
    • pipes — 终端管道接口
    • sndhdr — 推测声音文件的类型
    • spwd —— shadow 密码库
    • sunau — 读写 Sun AU 文件
    • telnetlib – Telnet 客户端
    • uu — 对 uuencode 文件进行编码与解码
    • xdrlib — 编码与解码 XDR 数据
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

penngo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值