Python Flask 6.0.1 工厂函数

来源:互联网 发布:微电影制作软件 编辑:程序博客网 时间:2024/06/05 14:41

欢迎访问地平线上的一匹狼-Python Flask 6.0.1

开始大型网站架构的时候,有很多概念晦涩难懂,其中就有这个工厂函数.

以下是来自别人的博客:
...Clicke Here...

    def maker(N):          def action(X):              return X ** N          return action  

这个函数就是一个典型的工厂函数.

其中会牵扯到一个概念,延迟执行.

我们可以看到,这个函数是有参数的.

实例化对象:

f = maker(2)  

然后我们在对象实例化后传入参数:

f(3)

结果会输出9.

每次maker()的时候都会生成一个新的实例化对象.

而用实例化对象传入参数返回的就是返回的调用函数返回的值.

 1、Python中的def语句是一个可执行语句——函数并不存在,直到Python运行了def后才存在。当Python运行到def语句时,将创建一个函数对象,并将其赋值给某一变量名,这个变量名就是函数名。2、当函数被调用时,其调用者停止运行直到这个函数完成了工作,之后函数将控制权返回调用者。函数通过return语句将计算得到的值传递给调用者,返回值成为函数调用的结果,即return将一个函数结果发送给调用者。3、参数通过赋值传递给了函数。改变参数名并不会改变调用者中的变量名,但是改变传递的可变参数可以改变调用者共享的那个对象,即函数是通过赋值(对象引用)传递的。 4、函数maker里面嵌套了一个函数action,首先传给maker函数一个参数N,这个参数传给了action函数,action函数获得具体的参数形成具体的函数,此时,action(X)函数已经具体化了,也就是def action(X):return X**2,然后将action(X)返回给顶层,并赋值给f,即f是action(X),然后再传递参数到f中,也就是传给了action(X)。

在书中的:

def create_app(config_name):    app=Flask(__name__)    app.config.from_object(config[config_name])    config[config_name].init_app(app)       bootstrap.init_app(app)    mail.init_app(app)    moment.init_app(app)    db.init_app(app)    from .main import main as main_blueprint    app.register_blueprint(main_blueprint)    return app

即为工厂函数,接受的参数是Config_name.

其返回的是实例化后的app对象,即可以对每种单元测试进行覆盖,而并非是对每种测试都重新运行一遍.

想对哪种单元测试进行测试时,只需调用其(工厂函数)返回的app实例化对象即可.

以下是我自己写的工厂函数单元测试样例:

class mq(object):    def __init__(self,string_c):        self.config_str=string_c    def print_str(self):        print(self.config_str)def crete_factory_method(config_str):    tp=mq(config_str)    return tpfactory_test = crete_factory_method('这是第一个单元测试')factory_test2 = crete_factory_method('这是第二个单元测试')factory_test.print_str()#Out[]:这是第一个单元测试factory_test2.print_str()#Out[]:这是第二个单元测试

这样就明白了吧:)

原创粉丝点击