一 反射相关
1 hasattr 根据字符串的形式 , 去判断对象中是否有成员
hasattr(object,name)
判断对象object是否包含名为name的特性(hasattr是通过调用getattr(object,name))是否抛出异常来实现的。
参数object:对象
参数name:特性名称
>>> hasattr(list, 'append')
True
>>> hasattr(list, 'add')
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
18 slice 和切片有关
19 str
20 format
21 bytes
22 bytearry
23 memoryview
24 ord
25 chr
26 ascill
27 repr
28 dict
29 set()
30 frozenset
31 len
32 sorted
a = [1,3,5,-2,-4,-6]
b = sorted(a,key=abs)
print(a)
print(b)
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)
b = [1]
ret1 = any(b)
print(ret1)
36 zip
list1 = [1, 2, 3, 4]
list2 = ["a", "b", "c"]
s = zip(list1, list2)
print(list(s))
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
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("1+2+3+4"))
exec("print('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