python标准库学习笔记

2020-07-28

python3标准库学习笔记,不断更新。

0 知识

优先级

  • not or and 的优先级是不同的:not > and > or
  • 幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低

序列特点

  • 根据列表、元组和字符串的共同特点,把它们三统称为序列,因为他们有以下共同点:
    1)都可以通过索引得到每一个元素
	2)默认索引值总是从0开始(当然灵活的Python还支持负数索引)
	3)可以通过分片的方法得到一个范围内的元素的集合
	4)有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)

打印函数帮助

使用 FunctionName.__doc__打印帮助

实例:

def function_one():
    """ 这里是函数注释"""
    pass
    
print(function_one.__doc__)

输出:        

     这里是函数注释

lambda匿名函数

实例:

 # lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y
 

>>>lam = lambda x, y: x*y
>>>lam(3,4)
>>>12

id(obj, /)可以查看对象在内存里的地址

实例:

>>>l1 =[1,2,3,4,5]
>>>id(l1)
2650382966216

assert关键字

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出 AssertionError的异常。 什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。 一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

实例:

>>> assert 1 + 1 == 2
>>> assert isinstance('Hello', str)    #  assert后表达式为True时,没有情况发生
>>> assert isinstance('Hello', int)     #  因为'Hello'是一个str,所以 isinstance('Hello', int)返回False
# 当assert后表达式为False时 程序崩溃报错AssertionError
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AssertionError

成员资格运算符 in

Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则 返回 False。

实例:

>>> name = '小金鱼'
>>> '鱼' in name
True
>>> '肥鱼' in name
False

1 python常用函数

取得一个变量的类型,可以使用 type() 和 isinstance()

实例:

>>>type(6)
>>> <class 'int'>
>>>type('python')
>>> <class 'str'>

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True

enumerate() 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 该函数返回 enumerate(枚举) 对象。

实例:

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>>enumerate(seasons)
<enumerate object at 0x000002550C53D558>
>>>list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>>list(enumerate(seasons,start =1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

可迭代对象转换为列表、元组和字符串

list([iterable]) 把可迭代对象转换为列表

tuple([iterable]) 把可迭代对象转换为元组

str(obj) 把对象转换为字符串

实例:

>>> temp = 'I love FishC.com!'
>>> list(temp)
['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm', '!']

filter() 函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数或None,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到迭代器(python3.x)中。

语法:filter(function or None,iterable)

实例1 :

>>>f = filter(None,[1,0,False,None,3])
>>>l = list(f)
>>>print(f)
<filter object at 0x000002555AE5C828>
>>>print(l)
[1, 3]

实例2:

# 过滤出列表的所有奇数
def is_odd(n): 
    return n % 2 == 1 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)

输出:

[1, 3, 5, 7, 9]

map() 函数

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的迭代器(python3.x)。

语法:map(function, *iterables)

实例:

>>>def square(x):
...     return x ** 2
... 
>>>map(square, [1,2,3,4,5]) 
<map object at 0x000002555AE5CC18>
>>>list(map(square, [1,2,3,4,5])) 
[1, 4, 9, 16, 25]

>>>map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
<map object at 0x000002555AE5CCF8>
>>>list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
[3, 7, 11, 15, 19]

2 字符串

字符串格式化符号

符 号 说 明
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%f 格式化定点数,可指定小数点后的精度

split()方法

split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。 语法 :str.split(str="", num=string.count(str)) 实例:

>>>str1 = "a,b,c,d"
>>>str1.split(',')
['a', 'b', 'c', 'd']

若s为字符串,有以下函数可以对字符串作出判断

s.isalnum() 所有字符都是数字或者字母,为真返回 True,否则返回 False。

s.isalpha() 所有字符都是字母,为真返回 True,否则返回 False。

s.isdigit() 所有字符都是数字,为真返回 True,否则返回 False。

s.islower() 所有字符都是小写,为真返回 True,否则返回 False。

s.isupper() 所有字符都是大写,为真返回 True,否则返回 False。

s.istitle() 所有单词都是首字母大写,为真返回 True,否则返回 False。

s.isspace() 所有字符都是空白字符,为真返回 True,否则返回 False。

严格解析:有除了数字或者字母外的符号(空格,分号,etc.)都会False

isalnum()必须是数字和字母的混合 isalpha()不区分大小写

实例:

>>> s = 'HELLOPYTHON'
>>> s.isupper()
>>> True

3列表

向列表增加元素

append() 方法是将参数作为一个元素增加到列表的末尾。 extend() 方法则是将参数作为一个列表去扩展列表的末尾。 insert()方法可以在列表的指定位置插入元素,语法:list.insert(index, obj)

实例:

>>> name = ['F', 'i', 's', 'h']
>>> name.append('C')
>>> name
['F', 'i', 's', 'h', 'C']
>>> name.extend(['.', 'c'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c']
>>> name.append(['o', 'm'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]
>>>name.insert(2,'hi')
>>>name
['F', 'i', 'hi', 's', 'h', 'C', '.', 'c', ['o', 'm']]

4 字典

python中,键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

创建字典的几种方式

# 1
# 传入2维元组或列表 (有一一对应关系)
>>>dict1 = dict((('f',70),('i',105)))
>>>dict1
{'f': 70, 'i': 105}
# 2  
# 注意:键 苹果 和 橙子 不需要引号,创建字典后自动会加引号成为字符串

>>>dict2 = dict( 苹果='apple',橙子='orange')
>>>dict2
{'苹果': 'apple', '橙子': 'orange'}

修改或添加字典项

语法 :dict[key] = value  修改(存在键)或新增(不存在键)的项

实例:

>>>dict2 = {'苹果': 'apple', '橙子': 'orange'}
>>>dict2['苹果'] = 'APPLE' 
>>>dict2['西瓜']= 'watermelon'
>>>dict2
{'苹果': 'APPLE', '橙子': 'orange', '西瓜': 'watermelon'}

fromkeys() 函数

Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。 语法 : dict.fromkeys(seq[, value]) 实例:

>>>dict3 = {}
>>>dict3.fromkeys((1,2,3),"hello")
{1: 'hello', 2: 'hello', 3: 'hello'}
>>>dict4 = {}
>>>dict4.fromkeys((1,2,3),(4,5,6))
{1: (4, 5, 6), 2: (4, 5, 6), 3: (4, 5, 6)}

注意:fromkeys()函数没有修改字典,只是新建了一个字典

访问字典

dict.keys() 返回键 dict.values()返回值 dict.items() 返回项  (元组形式)

实例:

>>>dict5 = {'苹果': 'APPLE', '橙子': 'orange', '西瓜': 'watermelon'}
>>>dict5.keys()
dict_keys(['苹果', '橙子', '西瓜'])
>>>type(dict5.keys())
<class 'dict_keys'>
>>>for key in dict5.keys():
...        print(key)
... 
苹果
橙子
西瓜
>>>dict5.values()
dict_values(['APPLE', 'orange', 'watermelon'])
>>>type(dict5.values())
<class 'dict_values'>
>>>for value in dict5.values():
...        print(value)
...     
APPLE
orange
watermelon

>>>dict5.items()
>>>dict_items([('苹果', 'APPLE'), ('橙子', 'orange'), ('西瓜', 'watermelon')])
>>>for item in dict5.items():
...        print(item)
...     
('苹果', 'APPLE')
('橙子', 'orange')
('西瓜', 'watermelon')

>>>for key,value in dict5.items():
...        print(key,value)
...     
苹果 APPLE
橙子 orange
西瓜 watermelon
>>>for item in dict5.items():
...        for e in item:
...            print(e)
...         
苹果
APPLE
橙子
orange
西瓜
watermelon

可以采用dict[key] 或者 dict.get(key)的方式通过键来查找值 如果key不存在, dict[key]会报错 dict.get(key) 返回None

>>>dict5 = {'苹果': 'APPLE', '橙子': 'orange', '西瓜': 'watermelon'}
>>>dict5['苹果']
'APPLE'
>>>dict5.get('苹果')
'APPLE'
>>>dict5['菠萝']
Traceback (most recent call last):
     File "<input>", line 1, in <module>
KeyError: '菠萝'
>>>dict5.get('菠萝')
>>>print(dict5.get('菠萝'))
None 


5 I/O

打开文件

f = open("filename.txt",encoding="utf8") 或者 f = open("filename.txt",encoding="utf-8") 也是一样的

os.path.basename(filePath) 将全文件名提取为普通文件名

将字符串序列写入txt文件中,可以采用f.writelines(seq)方法

实例:

f = open("test.txt","w")
l = ["苹果",“橙子”,"香蕉"]
f.writelines(l)
f.close()