Python中文
首页
教程
问答
标签
搜索
登录
注册
关于Python中导入的一些混淆
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我是Python新手,有一些事情困扰了我很长时间。我在marklutz的“Learning Python”中读到,当我们使用<code>from</code>语句导入模块中存在的名称时,它首先导入模块,然后为其分配一个新名称(即导入模块中存在的函数、类等的名称),然后用<code>del</code>语句删除模块对象。但是,如果我尝试使用<code>from</code>导入一个名称,该名称引用了导入模块中本身未导入的名称,会发生什么情况?考虑下面的例子,其中有两个模块<code>mod1.py</code>和<code>mod2.py</code>:</p> <pre><code>#mod1.py from mod2 import test test('mod1.py') #mod2.py def countLines(name): print len(open(name).readlines()) def countChars(name): print len(open(name).read()) def test(name): print 'loading...' countLines(name) countChars(name) print '-'*10 </code></pre> <p>现在看看运行或导入mod1时会发生什么:</p> ^{pr2}$ <p>在这里,当我导入并运行<code>test</code>函数时,虽然我甚至没有导入<code>countChars</code>或{<cd8>},但它还是成功地运行了,<code>from</code>语句已经删除了<code>mod2</code>模块对象。在</p> <p>所以我基本上需要知道为什么这段代码能工作,即使考虑到我提到的那些不应该的问题</p> <p>编辑:感谢所有回答:)</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>每个函数都有一个<code>__globals__</code>属性,该属性保存了搜索全局变量和函数的环境的引用。在</p> <p>然后,<code>test</code>函数链接到<code>mod2</code>的全局变量。因此,当它调用<code>countLines</code>时,即使您在导入函数的模块中编写了一个同名的新函数,解释器也总能找到正确的函数。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
2 回答
无法使用Django\u mssql\u后端迁移到外部hos
10 回答
无法使用Django&Python3.4连接到MySql
1 回答
无法使用Django+nginx上载媒体文件
4 回答
无法使用Django1.6导入名称模式
9 回答
无法使用Django1.7和mongodb登录管理站点
4 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
9 回答
无法使用Djangockedi验证CBV中的字段
3 回答
无法使用Djangocketditor上载图像(错误400)
1 回答
无法使用Djangocron进行函数调用
7 回答
无法使用Djangofiler djang上载文件
10 回答
无法使用Djangokronos
8 回答
无法使用Djangomssql provid
5 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
2 回答
无法使用Djangomssq迁移Django数据库
5 回答
无法使用Djangonox创建用户
9 回答
无法使用Djangopyodb从Django查询SQL Server
6 回答
无法使用Djangopython3ldap连接到ldap
3 回答
无法使用Djangoredis连接到redis
10 回答
无法使用Django中的FK创建新表
1 回答