python - 代码的执行顺序
问题描述
我是编程新手。谁能帮我理解脚本的执行顺序?我有代码:
import unittest
var = 'one'
class FirstTest(unittest.TestCase):
def test_one(self):
self.assertEqual(var, 'one')
# del var
if __name__ == '__main__':
unittest.main()
首先,我需要测试我的变量“var = 'one'”。然后我必须删除这个变量(del var)。不删除var (del var) 测试通过。但是,如果我从范围中删除这个 var ,即使我在执行del var之前放置测试,测试也会被破坏。我收到以下错误:
NameError: name 'var' is not defined
我的代码组织是不可接受的,或者我不理解脚本的执行顺序以及何时涉及测试。那么,我在哪里可以找到任何信息来解决我的问题 - 通过测试然后删除我有价值的 var?提前致谢!
解决方案
函数(以及扩展的方法)中的代码在您调用它们之前不会执行。函数中的名称才会被取消引用。
该名称var
是一个全局名称,每次您引用它时都会进行查找。如果 Python 不这样做,您将永远无法将全局变量用作变量,您将无法在程序执行时更改它们的值。
(最终)调用该方法的是脚本末尾的unittest.main()
调用,因此必须至少存在到该点。test_one()
var
明确地说:
声明一个函数
def
只会触发一个函数对象的创建,然后将该对象分配给一个新名称(def
关键字后面的名称)。您需要实际调用该函数才能运行其中的代码。class
语句很像函数声明,但类的主体会立即执行以形成类的属性。所以class FirstTest(...): ...
执行,然后你有一个FirstTest
在你的全局命名空间中命名的新类对象。这包括执行def test_one():
内部的声明,test_one
然后是FirstTest
类的属性。自身内部的代码test_one
仍未执行。
这意味着您的脚本中发生的情况是:
import unittest
被执行;该名称unittest
已添加到您的全局变量中var = 'one'
被执行,名字var
被添加到你的全局变量中class FirstTest
被执行,名字FirstTest
被添加到你的全局变量中- 在执行类体时,将名称
test_one
添加到类命名空间中,因此类具有test_one
属性。
- 在执行类体时,将名称
- 可选:
del var
执行时,名称从全局变量var
中删除。 - 运行测试
if
。如果为真,则执行表达式unittest.main()
。unittest
是一个现有的全局,main
找到属性,并调用所引用的对象unittest.main
。 unittest.main()
执行在当前模块中查找所有测试用例的代码,此处为FirstTest
. 对于FirstTest
以 开头的每个属性test_
,将执行调用该属性的测试运行。在这里test_one
找到并执行。self.assertEqual(var, 'one')
被执行self
是一个有效的本地名称,引用测试实例- 找到属性
assertEqual
,解析为对象 - 名字
var
被查了。这是一个全球性的,所以它更好地存在!
推荐阅读
- html - 如何追加/包含
- php - Opencart 页面意外停止并显示消息“使用未定义的常量 VERSION - 假定为 'VERSION'”?
- python - 生成器表达式必须带括号错误
- jquery - 如何使用 jquery 和 ajax 将数据从 jsp 发送到 servlet
- php - 访问wifi网络上的另一台计算机时,Laravel php artisan -mcr标志错误
- javascript - 如何从Javascript将多个输入参数传递给PHP
- oracle - oracle 多列中存在的 COUNT 个不同值
- excel - 在所有单元格中搜索单词“是”的所有实例的表格,在新工作表中找到每个“是”创建行
- deep-learning - Resnet 18 和 Resnet 20 有什么区别?
- json - 来自 WordPress Post 的 UIImage 的 JSON 请求