Python之禅中的namespace怎么理解?
迷茫
迷茫 2017-04-17 13:33:59
[Python讨论组]

pythonista 初学这门语言的时候应该都执行过import this

我这么多年来一直对最后一句

Namespaces are one honking great idea – let’s do more of those!

之中的 namespace 有疑惑。

对于 module,可以有三种方式导入

import SomeModule

from SomeModule import SomeClass

from SomeModule import *

什么时候分别用一、二、三是最佳实践?

另外,我们还可以在一个函数的 scope 的中再定义函数,除了写 decorator,还有别的地方适合这么用吗?或者除此之外都应当用 class

希望各位讲解一二。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
高洛峰

什么时候分别用一、二、三是最佳实践?——这个问题没有特别的规定,只是看个人编码风格和习惯。
这三种的定义你应该明白,二和三是一样的,只是三用了一个通配符导入了模块中所有名字而已。
命名空间的本质就是采用更长的字符串来区分不同模块下可能同名的函数/类,然后为了减少写函数名/类名时候的麻烦,发明的一种可以认为是语法糖的东西。

在一个函数的 scope 的中再定义函数——我本人不常用这种做法,因为我是学C语言出身,一个函数的scope中再定义一个函数,我看到的唯一好处就是可以隐藏一些仅仅由这个函数使用而其他函数不使用的一些小函数,而且不用再传参数:

def fun(a, b):
    def calc():
        return a * b - a / b
    if a < b:
        return calc()
    if a >= b:
        return 1 + calc()

calc函数不用传参,方便使用,而且对外是隐藏的,这么奇葩的函数在fun外也没有人用,放到fun内部是比较合适的。当然,也不绝对,你可以爱怎么写怎么写。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号