python内置函数与装饰器

199 阅读3分钟

查看内置函数

dir(__builtins__)

abs,绝对值
min,序列的最小值
max,序列的最大值
sum,序列的求和

bin,转为二进制
hex,转为十六进制
oct,转为八进制
chr,查看ASCII码对应的字符
ord(),查看字符对应的ASCII码

bool(),查看是否为True/False
all(["a","b","c"]) ,序列中所有为True,则为返回True
any(["","d"]),序列中有一个为True,则返回True

b = s.encode("utf-8") # 同bytes("xxx","utf-8")
bytearray(b) #转为字节数组,可变

callable,是否可调用
enumerate(list) , 枚举 -->(idx,value)
zip(list1,list2) --> 两个列表对应项目形成元组,整体返回元组列表

eval,将字符串转为原有的数据结构
alist = [1,2,3]
s = str(alist) #'[1,2,3]'
eval(s) # -->[1,2,3]

exec("执行代码字符串")
exit,退出程序
sys.exit(0) 退出程序

hasattr(obj,"attr"),obj是否具有这个属性
getattr(obj,"attr","没有"),获取属性,没有则返回后面的值
setattr(obj,"sex","male"),设置属性
delattr(obj,"attr") ,删除属性,只能删除对象的实例属性,从类属性继承过来的不能删除,同del obj.attr

locals(),局部变量字典
globals(),全局变量字典
hash, 哈希计算
id,查看对象的内存地址

type,查看对象的类型
isinstance(3,int) #是否该类的对象
isinstance(3.0,(int,float)) #满足一个就返回True
issubclass(sub,parent) #是否父类的一个子类
issubclass(sub,(parent1,parent2,...))

round(3.5567,2) #四舍五入,保留2位小数

名称空间

即存储变量名的地方

类别: locals(),局部变量
enclosing,外部函数的作用域
globals(),全局变量
_builtins_,内置变量

闭包

在一个函数内部,还有定义的函数,内部函数的内部作用域使用外部函数的作用域变量,导致外部函数即使执行完毕也无法释放这部分变量。

def outer():
	name = "闭包"
	def inner():
		print(name)
	return inner

func = outer() #执行结束,放回一个inner函数

装饰器(闭包的应用)

为了满足开发中的==开放-封闭==原则,项目中已经实现的功能,尽量不改源码,但可以扩展功能。

不改源码的情况下,扩展函数的功能,就使用==装饰器==

def origin_func():
	print("origin function")

#现在需要让以上函数打印出”扩展功能“,不改源码
def kuozhan(func):
	def wrapper(*args,**kwargs):
		#实现原来的功能
		func(*arg,**kwargs)
		#添加扩展的功能
		print("扩展功能")
	return wrapper
	
@kuozhan    #装饰器即高阶函数的执行,返回wrapper
def origin_func(p):
	print("origin function")

origin_func('xx') #函数执行时,即执行wrapper


#对以上origin_func再次扩展,打印'再次扩展'
def zaicikuozhan(f):
	def wrapper(*args,**kwargs):
		#之前的功能
		f(*args,**kwargs) #解包传参
		#再次扩展
		print("再次扩展")
	return wrapper
	
@zaicikuozhan
@kuozhan
def origin_func(p):
	print("origin function")

origin_func("xx")	

在这里插入图片描述

==带参数的装饰器==

def kuozhan(name,age): #这里首先接收自己的参数
	print("带参数的装饰器",name,age)
	def wrapper(func): #接收装饰的函数
		def wrapper1(*args,**kwargs): #接收装饰的函数的参数
			#实现原来的功能
			func(*arg,**kwargs)
			#添加扩展的功能
			print("扩展功能")
		return wrapper1
	return wrapper  #依次返回
	
@kuozhan("jack",23)    #装饰器即高阶函数的执行,返回wrapper
def origin_func(p1,p2):
	print("origin function running...")
	print(p1,p2)

origin_func('xx','yy') #函数执行时,即执行wrapper

带参数的装饰器 jack 23
origin function running...
xx yy
扩展功能

上一篇:python的函数