基础"/>
1.4、Python基础
1.3、Python基础
- 1、闭包
- 2、装饰器-语法糖写法
- 3、Python中的反射
1、闭包
闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数def Student():name = "susu"age = 21print(f"{name}{age}了")def School():adress = "河北"banji = 204print(name + "在" + adress + "上学")return SchoolStudent()()
2、装饰器-语法糖写法
能够在不改变原有函数的基础上,在原来的基础上添加额外的功能的代码,就叫做装饰器。对于装饰器的定义,基于函数闭包的形式来实现,即可以将某一个函数作为参数传递给另一个函数,在这另一个函数中去为函数添加功能。
下面是使用闭包实现装饰器:
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能def wrapper():startTime = time.time()func()endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapperdef func_a():print("hello")time.sleep(1)print("world")if __name__ == '__main__':deco(func_a)()
下面是使用闭包实现装饰器(语法糖的写法):
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能def wrapper():startTime = time.time()func()endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapper@deco
def func_a():print("hello")time.sleep(1)print("world")if __name__ == '__main__':func_a()
装饰器,传多个参数的写法:
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能,# 原始函数带有不定参数,该处传入不定参数到该内部函数def wrapper(*args, **kwargs):startTime = time.time()func(*args, **kwargs)endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapper# 使用@符号拓展函数功能,func_a就具有了deco函数的功能
# 先传入2个参数
@deco
def func_a(a, b):print("带有不定参数2个的装饰器演示:")time.sleep(1)print("传入的不定参数求和:%d" % (a + b))# 传入3个参数
@deco
def func_b(a, b, c):print("带有不定参数3个的装饰器演示:")time.sleep(1)print("传入的不定参数求和:%d" % (a + b + c))if __name__ == '__main__':func_a(1, 2)func_b(1, 2, 3)
3、Python中的反射
class A(object):def __init__(self):self.name = "sath"def get(self):print("get")a = A()
# 给对象设置个age属性
setattr(a, "age", 37)
print(a.age)# 从对象中反射某个属性或方法, 反射不到的话使用默认值
ret = getattr(a, "name", "小明")
print(ret)#调用get方法
getattr(a, "get")()# 判断对象中是否有某个属性或方法
ret = hasattr(a, "name")
print(ret)# 删除对象的某个属性
print(dir(a))
delattr(a, "name")
print(dir(a))
更多推荐
1.4、Python基础
发布评论