Python Flask 6.0.1 工厂函数

WEB前端 waitig 602℃ 百度已收录 0评论

欢迎访问地平线上的一匹狼-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 tp

factory_test = crete_factory_method('这是第一个单元测试')

factory_test2 = crete_factory_method('这是第二个单元测试')

factory_test.print_str()
#Out[]:这是第一个单元测试

factory_test2.print_str()
#Out[]:这是第二个单元测试

这样就明白了吧:)


本文由【waitig】发表在等英博客
本文固定链接:Python Flask 6.0.1 工厂函数
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)