python常用内置函数
一 反射相关
1 hasattr 根据字符串的形式 , 去判断对象中是否有成员
1 hasattr(object,name) 2 判断对象object是否包含名为name的特性(hasattr是通过调用getattr(object,name))是否抛出异常来实现的。 3 参数object:对象 4 参数name:特性名称 5 >>> hasattr(list, 'append') 6 True 7 >>> hasattr(list, 'add') 8 False
2 getattr 根据字符串的形式,去对象中找成员. 第一个参数是(模块或对象或类), 第二个参数是(用户输入或值)getattr(object, name [, defalut])获取对象object名为name的特性,如果object不包含名为name的特性,将会抛出AttributeError异常;如果不包含名为name的特性且提供default参数,将返回default。
参数object:对象 参数name:对象的特性名 参数default:缺省返回值 >>> class test(): ... name="ming" ... def run(self): ... return "Hello World" ... >>> t=test() >>> getattr(t, "name") #获取name属性,存在就打印出来。 'ming' >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。 <bound method test.run of <__main__.test instance at 0x0269C878>> >>> ret = getattr(t, "run")() #获取run方法,后面加括号可以将这个方法运行。 >>> print(ret) 'Hello World' >>> getattr(t, "age") #获取一个不存在的属性。 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: test instance has no attribute 'age' >>> getattr(t, "age","18") #若属性不存在,返回一个默认值。 '18' >>>
3 setattr 根据字符串的形式 , 动态的设置一个成员(在内存中) (三个参数, 第一个参数是要设置的变量, 第三个变量是要设置的值)
给对象的属性赋值,若属性不存在,先创建再赋值 >>> class test(): ... name="ming" ... def run(self): ... return "Hello World" ... >>> t=test() >>> hasattr(t, "age") #判断属性是否存在 False >>> setattr(t, "age", "18") #为属相赋值,并没有返回值 >>> hasattr(t, "age") #属性存在了 True
4 delattr
综合使用
>>> class test(): name="ming" def run(self): return "Hello World">>> t=test() >>> getattr(t, "age") #age属性不存在 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: test instance has no attribute 'age' >>> if getattr(t ,"age") is none: #当获取到这个age值为空时,需要给这个age重新赋值 setattr(t,"age","18") 'True' >>>getattr(t,"age") '18'
二 基础数据类型相关
1 bool
2 int
3 float
4 complex 复数
complex(5,6)
(5+6j)
5 bin 整型转换为二进制
6 oct 整型转换为八进制
7 hex 整型转换为十六进制
8 abs 求绝对值
9 divmod (除,余数)
10 round (值,小数后几位)
ret = round(4.563111347,3) print(ret) 4.563
11 pow 幂运算
ret = pow(2,3) print(ret) 8
12 sum
13 max
14 min
15 list
16 tuple
17 reversed
a = [0, 1, 2, 3, 4, 5, 6] b = reversed(a) print(b) >>> <list_reverseiterator object at 0x0000000001E7F198> print(list(b)) >>> [6, 5, 4, 3, 2, 1, 0] print(list(b)) >>> [] 因此,reversed()返回的是一个迭代器对象,只能进行一次循环遍历并只能显示一次所包含的值!
18 slice 和切片有关
19 str
20 format 格式化输出
21 bytes
22 bytearry
x = bytearray(5) print(x) >>> bytearray(b'\x00\x00\x00\x00\x00')
23 memoryview
memory 内存,view 查看。那么memoryview()函数返回给定参数的内存查看对象。内存查看对象指对支持缓冲区协议的数据进行包装, 在不需要复制对象基础上允许Python代码访问。 s = memoryview(bytearray('abcdefgh','utf-8')) print(s[1]) >>> 98 print(s[-1]) >>> 104 print(s[1:4]) >>> <memory at 0x00000000021E0408>
24 ord 函数主要用来返回对应字符的ascii码
25 chr 主要用来表示ascii码对应的字符,输入可以是数字,可以是十进制,也可以是十六进制
26 ascill
27 repr
repr() 函数将对象转化为供解释器读取的形式且返回一个对象的string格式 s = 'RUNOOB' print(repr(s)) >>> 'RUNOOB' dict = {'runoob': 'runoob.com', 'google': 'google.com'} print(repr(dict)) >>> {'runoob': 'runoob.com', 'google': 'google.com'}
28 dict
29 set
30 frozenset 不可变集合
31 len
32 sorted
a = [1,3,5,-2,-4,-6] b = sorted(a,key=abs) c = sorted(a) print(a) >>> [1, 3, 5, -2, -4, -6] print(b) >>> [1, -2, 3, -4, 5, -6] print(c) >>> [-6, -4, -2, 1, 3, 5]
33 enumerate
a = enumerate() 返回一个元祖 a[0]序列号,a[1]数据
34 all
接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False tmp_1 = ['python',123] all(tmp_1) >>> True tmp_2 = [] all(tmp_2) >>> True tmp_3 = [0] all(tmp_3) >>> False
35 any
接受一个迭代器,如果迭代器里有一个元素为真,那么返回True,否则返回False a = [] ret = any(a) print(ret) >>> False b = [1] ret1 = any(b) print(ret1) >>> True
36 zip
list1 = [1, 2, 3, 4] list2 = ["a", "b", "c"] s = zip(list1, list2) print(list(s)) >>> [(1, 'a'), (2, 'b'), (3, 'c')]
37 filter
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list def is_odd(x): return x % 2 == 1 然后,利用filter()过滤掉偶数: list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))
38 map
map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 L = [1,2,3,4,] def pow2(x):
return x*x list(map(pow2,L)) >>> [1, 4, 9, 16]
三 作用域相关
1 locals 获取执行本方法所在命名空间内的局部变量的字典
2 globals 获取全局变量的字典
四 面向对象相关
1 type 元类,类的最高层
2 object
3 classmethod 类方法,用来修改类变量的
4 staticmethod 静态方法,用来处理一些和操作类无关的事
5 property 可以像调用一个变量一样调用一个方法
class Pager: def __init__(self,page): self.page = page self.page_num = 12 @property def start(self): ret = (self.page - 1) * self.page_num return ret @property def end(self): ret = self.page * self.page_num return ret p = Pager(5) # print(p.start()) # print(p.end()) print(p.start) print(p.end)
6 vars
class My(): 'Test' def __init__(self,name): self.name=name def test(self): print self.name vars(My)#返回一个字典对象,他的功能其实和 My.__dict__ 很像
7 super 在多继承中,可以保证顶层父类只被调用一次 ,用 _ _mro_ _ 查看多继承规律时,遵循深度优先原则
8 issubclass
检查第一个参数是否是第二个参数的子子孙孙类 返回 : 是一个布尔值 class Base(object): pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的子子孙孙类
9 isinstance
检查第一个参数(对象) 是否是第二个参数(类及父类)的实例. 返回值: 布尔型 class Base(object): pass class Foo(Base): pass obj = Foo() print(isinstance(obj,Foo)) print(isinstance(obj,Base))
判断一个数据是什么数据类型 a = "python" ret = isinstance(a,str) print(a)
五 迭代/生成器相关
1 next
2 iter
3 range
range 是一个生成器,他只用来存储数据的生成方式,而不直接存储数据 # 列表解析 sum([i for i in range(100000000)])# 内存占用大,机器容易卡死 # 生成器表达式 sum(i for i in range(100000000))# 几乎不占内存
六 其他
字符串类型代码执行相关
1 eval
eval() 将字符串类型的代码执行并返回结果 print(eval('1+2+3+4'))
还可以用来操作文件,将文件里面的内容转化为字典,方便调用
2 exec
exec()将自字符串类型的代码执行
print(exec("aa = 11 + 22"))
>>> None
print("value is:", aa)
>>> 33
exec("print('hello,world')")
>>> hello,world
3 compile
参数说明: 1> 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。 2>参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。 3> 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表 达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。
输入/输出相关
4 input
5 print
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符 flush: 立即把内容输出到流文件,不作缓存 """ file() 和文件有关的关键字 f = open('tmp_file','w') print(123,456,sep=',',file = f,flush=True)
打印进度条 import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少个'*' per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num) print(per_str,end='', flush=True) #小越越 : \r 可以把光标移动到行首但不换行
内存相关
6 id
7 hash
文件操作相关
8 open
共有六种操作文件的方分别为: r、w、a、r+、w+、a+ ,每一种都可以用二进制文件来操作:rb、wb、ab、rb+、wb+、ab+,也可以指定编码格式
模块相关
9 __import__
帮助相关
10 help
调用相关
11 callable 检测一个对象能否被调用
查看内置属性和方法
12 dir
dir(list) dir(a) dir(123)
内置函数官方文档 https://docs.python.org/3/library/functions.html#object