首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你认识 flask 优化应用结构

虽然这是一个对小项目有意义组织结构,但是一旦项目开始增长,它往往会使其中一些模块变得非常大而且杂乱无章。 要想清晰地看到问题一种方法,是思考如何通过尽可能多地重复使用这一项目来开始第二个项目。...最明显使用此函数地方是处于顶级目录microblog.py脚本,它是唯一会将应用设置为全局变量模块。另一个调用该工厂函数地方是tests.py将在下一节中更详细地讨论单元测试。...app/email.py模块提出了一个更大挑战,所以我必须使用一个小技巧: app/email.py:将应用实例传递给另一个线程。..._get_current_object()表达式从代理对象中提取实际应用实例,所以它就是作为参数传递给线程。 另一个棘手模块是app/cli.py,它实现了一些用于管理语言翻译快捷命令。...默认情况下,使用在config.py中定义Config类,但现在可以通过将新类传递给工厂函数来创建使用不同配置应用实例。下面是一个适用于我单元测试示例配置类: tests.py:测试配置。

1.5K20

【十五】python之异常处理

传入对象类型与要求不符合 UnboundLocalError 试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望值...) TypeError 传入对象类型与要求不符合 UnboundLocalError 试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量,导致你以为正在访问它 ValueError...() 结果: # python test.py 内容写入文件成功 # cat testfile # 查看写入内容 这是一个测试文件,用于测试异常...("这是一个测试文件,用于测试异常!!")...但它会一直是正确?依赖修改,代码修改。如果依赖修改成 target = w 会发生什么,会关系到run_w_code函数

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

python中函数

def MYFirstFunction(): print('这是创建一个函数') print('表示很鸡冻。。。。。')...# 调用函数 MYFirstFunction() # 运行结果: 这是创建一个函数 表示很鸡冻。。。。。...值: 50 打折后价格是: 80.0 这里试图打印修改后全局变量old_price值: 100.0 全局变量,在函数内部中是可以访问,但是我们不要试图去修改一个全局变量,因为python会使用屏蔽...python会创建一个全局变量一样变量,并把它设置为局部变量。但是如果我们想要去修改全局变量,可以实现,答案是肯定。...;在Fun2中x和Fun1中x不是一个变量,和之前全局变量和局部变量中讲到一样,在python函数中定义一个全局变量,python通过shadowing方式来屏蔽掉这个全局变量,创建一个全局变量相同变量

1.7K10

Python 自动化指南(繁琐工作自动化)第二版:三、函数

带参数def语句 当您调用print()或len()函数时,您通过在括号之间键入值来传递它们,称为参数。您也可以定义自己接受参数函数。...返回值和返回语句 当您调用len()函数并给它传递一个参数,比如'Hello'时,函数调用会计算出整数值5,这是传递给它字符串长度。一般来说,函数调用求值值被称为函数返回值。...在交互式 Shell 中输入以下内容: >>> print('cats', 'dogs', 'mice') cats dogs mice 但是您可以通过向sep关键字参数传递一个不同字符串来替换默认分隔字符串...如果你仔细想想,这是有道理;当程序在全局作用域内执行时,不存在局部作用域,所以不可能有任何局部变量。这就是为什么在全局作用域内只能使用全局变量。...这包括使用' ' * indent打印正确缩进空间量。我们不想在这些空格后自动打印一个换行符,所以我们也将end=''传递给第一个print()调用。第二个print()调用打印星号带。

93320

学习笔记-小甲鱼Python3学习第十九

函数和过程 函数(function)有返回值 过程(procedure)是简单、特殊并且没有返回值 变量: 局部变量(Local Variable):在整个py文件中声明,全局范围内都可以调用 全局变量...(Global Variable):在某个函数中声明,只能在该函数中调用它,如果试图在超出范围地方调用,程序会报错 -----------------分割线,哈哈哈-----------------...在pre()函数里...... 1.请问一下这个函数有返回值? >>> def hello():         print('Hello FishC!')...这串代码真蛋疼,理解是在fun1()中声明全局变量var后,在给var赋值Baby,那么全局变量var值已经由Hi变更为了Baby,而Baby这个值随即又传递给了fun2(var)形参var,然后执行...1.编写一个函数,分别统计出传入字符串参数(可能不只一个参数)英文字母、空格、数字和其它字符个数。

58110

10个最容易犯Python开发错误

一个异常语句里捕获多个异常正确方法是指定第一个参数作为一个元组,该元组包含所有被捕获异常。与此同时,使用as关键字来保证最大可移植性,Python 2和Python 3都支持该语法。...毕竟,我们确实在这里做了一个循环导入,难道不应该有点问题? 仅仅存在一个循环导入并不是Python本身问题,如果一个模块被导入,Python就不会试图重新导入。...当我们试图导入b.py会发生什么(先前没有导入a.py): 出错了,这里问题是,在导入b.py过程中还要试图导入a.py,这样就要调用f(),并且试图访问b.x。但是b.x并未被定义。...(10)滥用__del__方法 比如这里有一个叫mod.py文件: 下面,你在another_mod.py文件里执行如下操作: 你会获得一个AttributeError异常。...当解释器关闭时,该模块全局变量全部设置为None。因此,在上面这个例子里,当__del__被调用时,foo已经全部被设置为None。 一个很好解决办法是使用atexit.register()代替。

1K80

如果写劣质代码是犯罪,那我该判无期

接下来,将为各位列举9种个人工作中高频遇到不整洁代码行为,并提出针对性优化建议。...我们应该尽量减少全局变量使用,而是使用函数参数和返回值来传递数据。...例如: def increment(counter): return counter + 1 这段代码没有使用全局变量,而是使用函数参数和返回值来传递数据,使得程序状态更易于跟踪。...8.2 不正确密码存储 将明文密码存储在数据库或文件中,或使用不安全哈希算法存储密码都是不安全做法。...错误示例: $ mv important_code.py important_code_backup.py $ rm important_code.py 在这个示例中,开发者没有使用版本控制工具,只是简单地对文件进行重命名和删除

28230

预防同事维护代码

接下来,将为各位列举9种个人工作中高频遇到不整洁代码行为,并提出针对性优化建议。...我们应该尽量减少全局变量使用,而是使用函数参数和返回值来传递数据。...例如: def increment(counter): return counter + 1 这段代码没有使用全局变量,而是使用函数参数和返回值来传递数据,使得程序状态更易于跟踪。...8.2 不正确密码存储 将明文密码存储在数据库或文件中,或使用不安全哈希算法存储密码都是不安全做法。...错误示例: $ mv important_code.py important_code_backup.py $ rm important_code.py 在这个示例中,开发者没有使用版本控制工具,只是简单地对文件进行重命名和删除

18820

python学习之异常处理

一、语法导致异常,应该在程序运行前处理 例子: print( 输出: File "E:/python/oldboyday9/learn1.py", line 4     if      ^ SyntaxError...: invalid syntax 注:输出分三个部分,第一部分错位置,第二部分SyntaxError错误类型,第三部分错误值invalid syntax 二、逻辑导致错误 使用try...except...(子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在键 KeyboardInterrupt Ctrl...+C被按下 NameError 使用一个还未被赋予对象变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求不符合...UnboundLocalError 试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望值,即使值类型是正确

39520

每天 3 分钟,小闫带你学 Python(二十六)

一个业余练习直到他们能正确地演奏,一个专业练习直到他们不能不正确地演奏。 小闫语录: 会与精是两种不同概念,不要自满,请谦虚。 ? 前言 ?...Python 中就使用模块来管理具有相关性代码,如果有些抽象,就说直白点,一个 .py 结尾文件就是一个模块。...大家可能会想到,既然一个 .py 结尾文件就是一个模块,那么自己也可以制作模块咯?那是当然,只要你开心,什么都可以。...# 定义一个全局变量 msg = "这是小闫同学制作模块" # 定义一个函数 def function(num): for i in range(num): print("媳妇儿错了...包是一个包含了很多模块特殊目录(目录就是文件夹),特殊就特殊在包目录下会有一个文件 __init__.py。包名一般由小写字母和下划线组成。 导入方式与模块就相同了。

50430

Python学习入门基础 — 第八章 文件读写操作、模块和包、异常

文件指针将会放在文件开头,这是默认模式。如果文件不存在,抛出异常 w 以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件 a 以追加方式打开文件。...,在定义字符串时,需要 在字符串引号前,增加一个小写字母 u,告诉解释器这是一个 unicode 字符串(使用 UTF-8 编码格式字符串) # *-* coding:utf8 *-* # 在字符串前...模块 1.1 模块概念 模块是 Python 程序架构一个核心概念 每一个以扩展名 py 结尾 Python 源代码文件都是一个 模块 模块名 同样也是一个 标识符,需要符合标识符命名规则...异常传递 异常传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 调用一方 如果 传递到主程序,仍然 没有异常处理,程序才会被终止 在开发中,可以在主函数中增加...,就是创作最大动力,我们下篇文章见!

1.3K30

Python之异常处理、模块与包

Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求不符合 UnboundLocalError 试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量...一个模块就是一个包含了Python定义和声明文件文件名就是模块名字加上.py后缀 为何要使用模块?...可以使用all来控制*(用来发布新版本时) __all__=['name1','name2']  #这样在另外一个文件中导入时就只能导入列表中这两个名字 把模块当做脚本执行 可以通过模块全局变量name...包 包是一种通过使用‘.模块名’来组织python模块名称空间方式 包本质就是一个包含init.py文件目录 凡是在导入时带点,点左边都必须是一个包,但是导入后在使用时就没有这种限制了,点左边可以是包...、模块、函数、类 from后import导入模块必须是明确一个,不能带点,否则会有语法错误 第一次导入包或者是包任何其他部分,都会依次执行包下init.py文件,此文件可以为空也可以放一些初始化包代码

66310

python 线程互斥锁Lock

在前一篇文章 python线程创建和传参 中我们介绍了关于python线程一些简单函数使用和线程参数传递,使用多线程可以同时执行多个任务,提高开发效率,但是在实际开发中往往我们会碰到线程同步问题,假如有这样一个场景...这是什么操作??看着代码好像也没问题,两个线程,各自累加1000000次,不应该输出是2000000次?而且调用了4次main函数,每次输出结果还不同!! ?...首先,我们将上面全局变量自动加 1 代码分为两步: 第一步:g_num + 1 第二步:将 g_num + 1 结果赋值给 g_num 由此可见,执行一个完整自动加1过程需要两步,然而线程却是在同时运行...,此时g_num值仍未100,101还在传递过程中,还没成功赋值,线程2获得计算结果101,并准备传递给g_num,经过一来一去这么一折腾,分明做了两次加 1 操作,g_num结果却是101,误差就由此产生...,解锁之后其他线程可以对资源正常操作; 以上面的代码为列子:想得到正确结果,可以直接利用互斥锁在全局变量 加1 之前 锁定资源,然后在计算完成之后释放资源,这样就是一个完整计算过程,至于应该是哪个线程先执行

1.5K20

如何在Fortran中调用Python

因此,可以选择直接从Fortran中调用Python,直接通过RAM传递气候模式状态,而不是通过高延迟通信层,比如HTTP。...可以通过以下三种方法实现从Fortran调用Python: •PythonC语言API。这是最常用方式,但需要实现大量C封装代码。•基于Cython。...下面是一个示例,将代码定义在一个模块文件中,比如my_module.py: # my_module.py # Create the dictionary mapping ctypes to np dtypes...必须要在三个不同区域定义python函数签名 任何要传递给FortranPython函数,都必须要要在三个区域进行定义。...通过调用给定名称来获取数据,并且将计算结果也存储到相同字段中,然后,Fortran代码通过索引字典中正确关键词来获取结果。Cython中使用了类似的架构,但CFFI更为方便。

5.8K40

29.python 线程互斥锁Lock

在前一篇文章 python线程创建和传参 中我们介绍了关于python线程一些简单函数使用和线程参数传递,使用多线程可以同时执行多个任务,提高开发效率,但是在实际开发中往往我们会碰到线程同步问题,假如有这样一个场景...这是什么操作??看着代码好像也没问题,两个线程,各自累加1000000次,不应该输出是2000000次?而且调用了4次main函数,每次输出结果还不同!! ?...首先,我们将上面全局变量自动加 1 代码分为两步: 第一步:g_num + 1 第二步:将 g_num + 1 结果赋值给 g_num 由此可见,执行一个完整自动加1过程需要两步,然而线程却是在同时运行...,此时g_num值仍未100,101还在传递过程中,还没成功赋值,线程2获得计算结果101,并准备传递给g_num,经过一来一去这么一折腾,分明做了两次加 1 操作,g_num结果却是101,误差就由此产生...,解锁之后其他线程可以对资源正常操作; 以上面的代码为列子:想得到正确结果,可以直接利用互斥锁在全局变量 加1 之前 锁定资源,然后在计算完成之后释放资源,这样就是一个完整计算过程,至于应该是哪个线程先执行

69020

python中全局变量和局部变量详解

写在最前面: python中全局变量和局部变量最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。 !!!...我们先来看一个最简单例子,事实上这并不是一个真正全局变量,只是在类中一个变量。 !!! 我们先从类中变量访问开始讲起 那么我们要如何访问这个变量呢?...) 结果是一样     是类变量     是函数变量 还可以怎么做呢,我们通过构造函数给定一个参数,类中可访问 class variable: def __init__(self,a...showvariable()     是真正全局变量     一直都是局部变量 当我们试图在函数外访问这个函数局部变量时 a = '是真正全局变量' def...那么不巧是,局部变量和全局变量定义了同一个名称,谁优先级更高呢?

42120

python中全局变量和局部变量详解

参考链接: Python全局变量 写在最前面:  python中全局变量和局部变量最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。  !!! ...我们先来看一个最简单例子,事实上这并不是一个真正全局变量,只是在类中一个变量。  !!!  我们先从类中变量访问开始讲起  那么我们要如何访问这个变量呢? ...是类变量 是函数变量  还可以怎么做呢,我们通过构造函数给定一个参数,类中可访问  class variable:     def __init__(self,a):         self.a...()  是真正全局变量 一直都是局部变量 当我们试图在函数外访问这个函数局部变量时  a = '是真正全局变量' def showvariable():     b = '一直都是局部变量...那么不巧是,局部变量和全局变量定义了同一个名称,谁优先级更高呢?

48400

python3异常处理 try

# 主代码块执行完,执行该块 pass finally: # 无论异常与否,最终执行该块 pass 2、 异常种类 # 常用异常种类 AttributeError 试图访问一个对象没有的树形...(子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在键 KeyboardInterrupt Ctrl...+C被按下 NameError 使用一个还未被赋予对象变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求不符合...UnboundLocalError 试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量, 导致你以为正在访问它 ValueError 传入一个调用者不期望值,即使值类型是正确 3...self.message = msg def __str__(self): return self.message try: raise MyException('异常

1.6K30
领券