大师兄的Python学习笔记(三): 模块和包
大师兄的Python学习笔记(五): 常用库之os包
一、关于内置函数
- 内置函数就是Python原生的方法,不需要导入任何包就可以直接使用。
- 本文内容基于Python3.8文档。
二、内置函数列表
A开头:
1)abs(<int>)
返回绝对值。>>>print(abs(-10)) 10
2)all(<iterable>)
- 判断给定的可迭代参数中的所有元素是否都为 True。
>>>l = [123,0<5,'str'] # 还记得0可以代表False吗 >>>print(all(l)) True >>>l = [True,0,'str'] # 还记得0可以代表False吗 >>>print(all(l)) False
3)any(<object>)
- 判断给定的可迭代参数中,如果任意一个元素为 True则返回True。
>>>l = [True,0,'str'] >>>print(any(l)) True
4)ascii(<object>)
- 类似print()函数,用于打印字符串。
- 但转义字符和''也会被处理后打印出来
>>>ascii('Hello\r World\n') "'Hello\\r World\\n'"
B开头:
5)bin(<int>)
- 将一个整数转变为一个前缀为“0b”的二进制字符串。
>>>print(bin(-10)) '-0b1010'
6)bool(<int>)
- 返回一个布尔值。
>>>bool(0) False
7)breakpoint(<*args>,<**kws>)
- 打断点,跳入调试器中。
>>>breakpoint() --Return-- <input>(1)<module>()->None (Pdb)
8)bytearray(<source>,<encoding>,<errors>)
- 返回一个新字节数组。
- 返回的字节数组具备可变序列的大部分常见方法(像list)。
- 每个元素的值范围: 0 <= x < 256。
>>>bytearray([1,2,3,4,5]) bytearray(b'\x01\x02\x03\x04\x05') >>>bytearray('hello','utf-8') bytearray(b'hello')
9)bytes(<source>,<encoding>,<errors>)
- 返回一个新的bytes对象。
- 返回的bytes对象为不可变序列。
- 每个元素的值范围: 0 <= x < 256。
>>>bytes([1,2,3,4,5]) b'\x01\x02\x03\x04\x05' >>>bytes('hello','utf-8') b'hello'
C开头:
10)callable(<object>)
- 如果对象可以调用返回True,否则返回False。
>>>print(callable(callable)) True >>>print(callable(callable(1234)) False
11)chr(<int>)
- 返回 Unicode 码对应的字符串。
- ord()和chr()互逆。
>>>print(chr(100)) 'd'
12)@classmethod
- 把一个方法封装成类方法。
- 类方法会忽略实例化。
- 方便直接从类调用方法。
- 应用了装饰器。
>>>class HelloWorld(): >>> @classmethod >>> def sayHello(cls): >>> print('Hello World!') >>>HelloWorld.sayHello() Hello World! >>>h = HelloWorld() >>>h.sayHello() # 忽略了类的实例化 Hello World!
13)compile(<source>, <filename>, <mode>, <flags=0>, <dont_inherit=False>, <optimize=-1>)
- 将一个字符串编译为字节代码。
>>>str = 'print("hello world")' >>>s = compile(str,'','exec') # mode可以用eval,exec或single >>>print(s) # 生成了一个code对象 <code object <module> at 0x000001FF125CB9C0, file "", line 1> >>>exec(s) # 可以用exec 或eval执行 hello world
14)complex(<real>,<imag>)
- 创建一个值为 real + imag * j 的复数
>>>c = complex(10,20) >>>print(c) (10+20j)
D开头:
15)delattr(<object>, <name>)
- 函数将删除指定的属性
- 详情见笔记第二篇5.6
16)dict(<object>)
- 创建一个字典对象。
- 详情见笔记第一篇2.1.6
17)dir(<object>)
- dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
>>>dir() >>>['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__loader__', '__name__', __package__', '__spec__', '_dh', '_i', '_i1', '_ih', '_ii', '_iii', '_oh', 'exit', 'get_ipython','quit'] >>>dir(dir()) >>>['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
18)divmod(<a>,<b>)
- 实现a除以b,然后返回商与余数的元组。
- 如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b)。
- 如果a或b是浮点数,相当于(math.floor(a/b), a%b)。
>>>c = divmod(98,10) >>>print(c) (9, 8) >>>d = divmod(98,4.5) >>>print(d) (21.0, 3.5)
E开头:
19)enumerate(<iterable>, <start=0>)
- 返回一个可迭代对象的序号和值元组的迭代器。
>>>dogs = ['雪纳瑞','泰迪','金毛','拉布拉多'] >>>e = enumerate(dogs) >>>print(type(e)) <class 'enumerate'> >>>list(e) [(0, '雪纳瑞'), (1, '泰迪'), (2, '金毛'), (3, '拉布拉多')]
20)eval(<expression>, <globals or locals>)
- 执行一个字符串表达式,并返回表达式的值。
- 使用时要注意其危险性。(比如从外部输入的恶意字符串表达式被执行)
>>>print(eval('10+10')) 20 >>>eval('print("Hello World!")') "Hello World!"
21)exec(<expression>, <globals or locals>)
- 如果expression是一个字符串,该字符串会先被解析为一组python语句,然后执行。
- 如果expression是一个code对象,那么它只是被简单的执行。
- 与eval不同,exec返回None。
- 与eval不同,exec可以执行复杂的代码。
>>>i = 0 >>>e = exec('i+=10') >>>print(e) None >>>print(i) 10 >>>exec('def sayhi():print("hi!")') >>>sayhi() hi!
F开头:
22)filter(<function>, <iterable>)
- 用于过滤序列。
- 相当于把<iterable>中的每个值当做<function>的参数,如果返回None则过滤掉。
- 返回一个可迭代的filter对象。
>>>l = [1,2,3,4,5,6,7,8,9,10] >>>def odd(n): >>> return n%2!=0 # 如果是偶数就过滤掉 >>>f = filter(odd,l) >>>print(type(f)) filter >>>print(list(f)) [1, 3, 5, 7, 9]
23)float(<x>)
- 从整数或字符串生成浮点数。
>>>float('-10.5') -10.5 >>>float(100) 100.0 >>>float('1e10') 10000000000.0
24)format(<value>, <format_spec>)
- 用于格式化字符串。
- 详细说明见笔记第一篇2.6.6中字符串格式化的五种方式。
25)frozenset(<iterable>)
- 通过可迭代对象返回一个新的 frozenset(冰冻集合)对象。
- 冰冻集合和列表类似,但是内容不能更改。
>>>l = [1,2,3,4,5] >>>f = frozenset(l) >>>type(f) frozenset >>>print(f) frozenset({1, 2, 3, 4, 5})
G开头:
26)getattr(<object>, <name>, <default>)
- 返回对象命名属性的值。
- 详情见笔记第二篇5.3。
27)globals()
- 用于定义全局变量。
- 详情见笔记第一篇2.5.5.3。
H开头:
28)hasattr(<object>, <name>)
- 判断对象<object>是否包含属性<name>。
- <name>是名称字符串。
>>>class Dog(): >>> def __init__(self): >>> self.type = 'dog' >>> def bart(self): >>> print('汪汪!') >>>dog = Dog() >>>hasattr(dog,'type') True >>>hasattr(dog,'bart') True >>>hasattr(dog,'age') # 不包含属性 False
29)hash(<object>)
- 返回对象的哈希(hash)值。
- 哈希值通过散列算法将任意长度的值换算成固定长度的结果,是区块链的基础。
>>>print(hash('abc')) -5769367521816172114
30)help(<object>)
- 获得对象的帮助信息。
- 详情见笔记第一篇1.7.2。
31)hex(<x>)
- 获取16进制字符串。
- 以0x开头
>>>print(hex(12)) '0x14'
I开头:
32)id(<object>)
- 获取对象的内存地址。
- 一个对象在生命周期内id是唯一的。
- 在不同的生命周期有可能有相同的id。
>>>name = 'name' >>>print(id(name)) 2223950523000
33)input(<prompt>)
- 获取控制台输入。
- <promt>是输入提示。
>>>name = input('请输入你的姓名:') 请输入你的姓名:superkmi >>>print(name) superkmi
34)int(<x>)
- 将一个字符串或数字转换为整型。
>>>print(int('123')) 123 >>>print(int(14.2)) 14
35)isinstance(<object>, <classinfo>)
- 判断<object>是否和<classinfo>是同一个类型。
- 与type不同,isinstance包括继承。
>>>print(isinstance(1,int)) True >>>print(isinstance(1,str)) False >>>class Animal(): >>> pass >>>class Dog(Animal): >>> pass >>>print(type(Dog()) == type(Animal)) False >>>print(isinstance(Dog(),Animal)) True
36)issubclass(<class>, <classinfo>)
- 判断<object>是否是<classinfo>的子类。
>>>class Animal(): >>> pass >>>class Dog(Animal): >>> pass >>>print(issubclass(Dog,Animal)) True >>>print(issubclass(Animal,Dog)) False
37)iter(<object>, <sentinel>)
- 用来生成迭代器。(迭代器在高级语法部分)
>>>l = [1,2,3,4,5] >>>l_iter = iter(l) >>>print(next(l_iter)) 1 >>>print(next(l_iter)) 2 >>>print(next(l_iter)) 3
- 如果传递了第二个参数,则object必须是一个可调用的对象(如,函数)。此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object,且返回值为<sentinel>时停止。
>>>import random # 导入random包 >>>def randomInt(): >>> l = [1,2,3,4,5] >>> return random.choice(l) # 返回l中一个随机值 >>>for i in iter(randomInt, 4): # 当返回值为4时就停止了 >>> print(i) 5 1 3
L开头:
38)len(<s>)
- 返回对象的长度。
>>>print(len('abcdefg')) 7 >>>print(len([1,2,3,4,5,6])) 6 >>>print(len({'a','b','c','d','e'})) 5 >>>print(len(range(1,10))) 9
39)list()
- 创建列表。
- 详情见笔记第一篇2.1.4。
40)locals()
- 以字典类型返回当前位置的全部局部变量。
>>>def sayHello(): >>> word = 'Hello World!' >>> num = 1 >>> print(locals()) >>>sayHello() {'word': 'Hello World!', 'num': 1}
M开头:
41)map(<function>, <iterable>, ...)
- 根据提供的函数<function>对指定序列<iterable>做映射。
- 返回迭代器。
>>>i = [1,2,3,4,5] >>>def triple(x): >>> return x*3 >>>print(list(map(triple,i))) [3, 6, 9, 12, 15]
42)max(<iterable>, < key>,<default>)
- 返回给定参数的最大值。
- <key>用来指定取最大值的方法。
- <default>为最大值不存在时返回的默认值。
>>>l1 = [1,2,3,4,5,6,7] >>>print(max(l1)) 7 >>>l2 = ['a','b','c','d','e'] >>>print(max(l2)) 'e' >>>l3 = [1.5,4.3,2.5,100.3,-34,-10000] >>>print(max(l3,key=abs)) # 比较绝对值 -10000 >>>print(max((),default=0)) 0
43)memoryview(<obj>)
- 返回给定参数的内存查看对象。
- <obj>为byte。
>>>print(memoryview(b'abc')) <memory at 0x0000018A6F55F1C8>
44)min(<iterable>, < key>,<default>)
- 返回给定参数的最小值。
- <key>用来指定取最小值的方法。
- <default>为最小值不存在时返回的默认值。
>>>l1 = [1,2,3,4,5,6,7] >>>print(min(l1)) 1 >>>l2 = ['a','b','c','d','e'] >>>print(min(l2)) 'a' >>>l3 = [1.5,4.3,2.5,100.3,-34,-10000] >>>print(min(l3,key=abs)) # 比较绝对值 1.5 >>>print(min((),default=0)) 0
N开头:
45)next(<iterator>, <default>)
- 返回迭代器的下一个值。
- 如果迭代器耗尽,则返回给定的 default。
- 如果没有默认值则触发StopIteration。
>>>l = [1,2,3,4,5] >>>l_iter = iter(l) >>>print(next(l_iter)) 1 >>>print(next(l_iter)) 2 >>>print(next(l_iter)) 3 >>>l = [1,2] >>>l_iter = iter(l) >>>print(next(l_iter)) 1 >>>print(next(l_iter)) 2 >>>print(next(l_iter,'no more element.')) no more element.
O开头:
46)object()
- 返回一个object类。
- object是所有类的父类。
- 详情见笔记第二篇:面向对象和类。
>>>obj = object() >>>dir(obj) ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] >>>type(obj) object
47)oct(<x>)
- 将一个整数转变为一个前缀为“0o”的八进制字符串。
>>>print(oct(10)) '0o12' >>>print(oct(0x16)) '0o26'
48)open(<file>, <mode='r'>, <buffering=-1>, <encoding=None>, <errors=None>, <newline=None>, <closefd=True>, <opener=None>)
- 用于文件操作。
- <file>文件路径。
- <mode> 表示打开的目的是读/写,包含w/r/wb/rb等类型。
- <buffering> 缓冲策略
- <encoding> 解码方式
- <errors> 指定如何处理编码和解码错误
- <newline> 定义换行符
>>>import os >>>path = os.path.join(os.curdir,'test','filename.txt') # 制作文件路径 >>>data = open(path,'r') # 读取文件中的数据
49)ord(<c>)
- ord()返回代表Unicode字符的整数。
- ord()和chr()互逆。
>>>print(ord('a')) 97
P开头:
50)pow(<base>, <exp>, <mod>)
- 求<base>的<exp>次方。
- 如果<mod>存在则取模。
- 等同于(<base>^<exp>)%<mod>
>>>print(pow(10,2)) 100 >>>print(pow(14,3,3)) # 14的3次方取模3 2
51)print(<objects>, <sep=' '>, <end='\n'>, <file=sys.stdout>, <flush=False>)
- 基础说明见笔记第一篇。
- 用于将<objects>输出到<file>中。
- <sep>表示分隔符,默认为空的字符串。
- <end>表示以什么结尾,默认为换行符。
- <file> 表示输出的目标,默认为控制台输出流。
- <flush> 是否在print()后,即使在条件未满足的情况下,立即将内容输出。
>>>with open('filename.txt','w') as f: # 创建一个新文件并写入内容。 >>> print('hello',file=f,flush=True) # 将内容输入到文件中。正常是文件close时写入,如果flush=True则立即写入。
52)property(<fget=None>, <fset=None>, <fdel=None>, <doc=None>)
- 用于在类中返回属性值。
- 详情见笔记第二篇:类的成员描述符7.3。
R开头:
53)range(<start>, <stop>, <step>)
- 获得一个不可变的序列。
- 详情见笔记第一篇2.4.1。
54)repr(<object>)
- 将对象转化为供解释器读取的形式。
- 可以和eval()配合用来在数据结构和字符串之间转换。
>>>list = [1,2,3,4,5,'hello','world'] >>>repr(list) "[1, 2, 3, 4, 5, 'hello', 'world']" >>>str = 'Hello World!' >>>repr(str) "'Hello World!'"
55)reversed(<seq>)
- 返回一个反向的 iterator
>>>l = [1,2,3,4,5] >>>rl = reversed(l) >>>print([x for x in rl]) [5, 4, 3, 2, 1] >>>str = 'hello world' >>>rstr = reversed(str) >>>print([x for x in rstr]) ['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']
56)round(<number>, <ndigits>)
- 返回<number>四舍五入的值。
- <ndigits>指保留小数点几位。
>>>print(round(3.1415926,2)) 3.14
S开头:
57)set(<iterable>)
- 返回一个新的 [
set
]对象。- 详情见笔记第一篇2.7.2。
58)setattr(<object>, <name>, <value>)
- 修改对象或函数的属性。
- 详情见笔记第二篇5.4.2。
59)slice(<start>, <stop>, <step>)
- 实现切片对象,主要用在切片操作函数里的参数传递。
- <start>起始位置。
- <stop>结束位置。
- <step>间距。
>>>l = [1,2,3,4,5,6,7] >>>slice1 = slice(3) # 3个元素 >>>print(l[slice1]) [1, 2, 3] >>>slice2 = slice(3,7) # 3到7之间 >>>print(l[slice2]) [4, 5, 6, 7]
60)sorted(<iterable>, *, <key=None>, <reverse=False>)
- 将<iterable>排序后返回。
- <key> 指定可迭代对象中的一个元素来进行排序。
- <reverse> = True时反向排序。
>>>l = [5,3,2,1,3,2,3,9,7,5] >>>print(sorted(l)) [1, 2, 2, 3, 3, 3, 5, 5, 7, 9] >>>print(sorted(l,reverse=True)) # 反向排序 [9, 7, 5, 5, 3, 3, 3, 2, 2, 1] >>>l = [(1,'b'),(9,'a'),(4,'d'),(20,'g')] >>>print(sorted(l,key=lambda x:(x[1]))) # 用第二个参数排序 [(9, 'a'), (1, 'b'), (4, 'd'), (20, 'g')]
61)@staticmethod
- 将方法转换为静态方法。
- 静态方法不强制要求传递参数(self,cls)。
>>>class Mountain(): >>> @staticmethod >>> def echo(voice): >>> print(voice) >>>m = Mountain() >>>m.echo('Hello World!') # 通常对象会将自身作为第一个参数返回。 Hello World!
62)str(<object=b''>, <encoding='utf-8'>, <errors='strict'>)
- 返回一个str版本的<object>。
>>> l = [1,2,3,4,5] >>> str(l) '[1, 2, 3, 4, 5]' >>> d = {'A':1,'B':2,'C':3} >>> str(d) "{'A': 1, 'B': 2, 'C': 3}"
63)sum(<iterable>,<start=0>)
- 获得迭代对象的和。
- 在和之后再加<start>。
>>>l = [1,2,3,4,5] >>>sum(l) 15 >>>sum(l,2) 17
64)super(<type>, <object-or-type>)
- 用于调用父类的一个方法。
- 详情见笔记第二篇6.2.5。
T开头:
65)tuple(<iterable>)
- 创建元组类型。
- 详情见笔记第一篇2.1.5。
66)type(<name>, <bases>, <dict>)
- 返回对象类型。
- 与isinstance()的区别是:type()不会考虑子类的情况。
- 详情见笔记第一篇1.7.3。
V开头:
67)vars(<object>)
- 返回<object>的属性和属性值的__dict__对象。
- 如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()。
>>>class Dog(): >>> name = 'dog' >>>print(vars(Dog)) mappingproxy({'__module__': '__main__', 'name': 'dog', '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>, '__doc__': None})
Z开头:
68)zip(*<iterables>...)
- 将多个可迭代对象一一对应,打包成一个个元组。
- 返回值的长度以最短的可迭代对象长度为准。
- 返回的是一个可迭代zip对象。
>>>s = ['a','b','c','d'] >>>n = [1,2,3,4,5,6,7,8,9] >>>y = ['hello','How','are','you'] >>>print(list(zip(s,n,y))) [('a', 1, 'hello'), ('b', 2, 'How'), ('c', 3, 'are'), ('d', 4, 'you')]
其它:
69)__import__(<name>, <globals=None>, <locals=None>, <fromlist=()>, <level=0>)
- 用于动态加载类和函数 。
- 如果一个模块经常变化就可以使用 import() 来动态载入。
- 效果类似import语句
- 这个函数一般用不到。
>>>sys = __import__('sys') >>>sys.path >>>['C:\\Users\\xiaor', >>> 'd:\\python3.7\\python37.zip', >>> 'd:\\python3.7\\DLLs', >>> 'd:\\python3.7\\lib', >>> 'd:\\python3.7',]
参考资料
- https://blog.csdn.net/u010138758/article/details/80152151 J-Ombudsman
- https://www.cnblogs.com/zhuluqing/p/8832205.html moisiet
- https://www.runoob.com 菜鸟教程
- http://www.tulingxueyuan.com/ 北京图灵学院
- http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 两点水
- https://blog.csdn.net/weixin_44213550/article/details/91346411 python老菜鸟
- https://realpython.com/python-string-formatting/ Dan Bader
- https://www.liaoxuefeng.com/ 廖雪峰
- https://blog.csdn.net/Gnewocean/article/details/85319590 新海说
- 《Python学习手册》Mark Lutz
- 《Python编程 从入门到实践》Eric Matthes
本文作者:大师兄(superkmi)