热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么不允许在函数中使用"from...import*"?

如何解决《为什么不允许在函数中使用"fromimport*"?》经验,为你挑选了1个好方法。

从文档:

导入的外卡形式from module import *- 只允许在模块级别使用.试图在类或函数定义中使用它会引发一个问题SyntaxError.

为什么?避免在函数中使用它有什么意义?有什么问题?



1> Sven Marnach..:

CPython实现对局部变量使用了一种特殊的优化:它们不是在运行时从字典中动态查找的,就像全局变量一样,而是在编译时静态分配索引,并在运行时通过索引查找,这是一个快得多.这要求Python编译器能够在编译时识别所有本地名称,如果在函数级别进行通配符导入,这是不可能的.

在Python 2中,仍然存在一种后备机制,在无法始终静态确定所有本地名称的情况下调用该机制.这种机制使用动态字典表示局部变量,大大减慢了执行速度.

例如这段代码

def f():
    exec "x = 2"
    print x

在Python 2中按预期工作,而

def f():
    exec("x = 2")
    print(x)

NameError在Python 3 中得到一个结果.


推荐阅读
author-avatar
广东蒗缦m莎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有