# 定义一个函数
def first(k, b):
# 再定义一个内部函数,内部函数用到了外部函数的引用
def second(x):
print(k * x + b)
# 这里就是闭包的结果
return second
f = first(2, 3)
f(1)
f(2)
f(3)
复制代码
代码须要遵循的就是开放封闭原则,简单来讲,它规定已经实现的功能代码不容许被修改,但能够被扩展。python
例:有一个test函数,须要添加功能,但不能改其代码,可使用装饰器来实现。web
def set_func(num):
def call_func():
print("添加功能区......")
num()
return call_func
@set_func # 此装饰器就等于函数调用test = set_func(test)
def test():
print("原始代码区......")
# test = set_func(test) # 此功能就等于装饰器 @set_func
test()
复制代码
最终可演化为:数据库
def set_func(func):
def call_func(*args, **kwargs):
print("前校检功能区......")
func(*args, **kwargs)
print("后清理功能区......")
return call_func
@set_func
def tset1(*args, **kwargs):
print("原始代码区......")
def tset2(*args, **kwargs):
print("原始代码区......")
test1(*args, **kwargs)
test2(*args, **kwargs)
复制代码
例:编程
def set_func1(func):
print("装饰了1......")
def call_func(*args, **kwargs):
print("前校检1区......")
func(*args, **kwargs)
return call_func
def set_func2(func):
print("装饰了2......")
def call_func(*args, **kwargs):
print("前校检2区......")
func(*args, **kwargs)
return call_func
def set_func3(func):
print("装饰了3......")
def call_func(*args, **kwargs):
print("前校检3区......")
func(*args, **kwargs)
return call_func
@set_func1
@set_func2
@set_func3
def tset(*args, **kwargs):
print("原始代码区......")
test(*args, **kwargs)
# 运行结果
装饰了3......
装饰了2......
装饰了1......
前校检1区......
前校检2区......
前校检3区......
原始代码区......
复制代码
在python中,类就是一组用来描述如何生成一个对象的代码段,同时,类也是一种对象。后端
由于类也是对象,你能够在运行时动态的建立它们,就像其它任何对象同样,最多见的就是class关键字,还有就是type关键字。缓存
type平时用来查看一个对象的类型,而它还有一种彻底不一样的功能,就是动态的建立类。闭包
class Test: # 定义了一个Test类
pass
Test() # 建立了一个Test类的实例对象
# 打印结果:<__main__.Test at 0x10d3f8438>
复制代码
能够手动像这样建立:框架
type("Test2",(), {}) # 定义了一个Test2类
Test2() # 建立了一个Test2类的实例对象
# 打印结果:<__main__.Test at 0x10d3f8438>
复制代码
固然还能够手动建立带有参数和方法的类编程语言
元类就是类似于类的父类,其目的就是为了当建立类是能后自动的改变类。函数
元类就是深度的魔法,99%的用户没必要为此操心。
ORM是Python编程语言后端web框架Django的核心思想,即对象关系映射,简称ORM。