首页 > Python之禅中的namespace怎么理解?

Python之禅中的namespace怎么理解?

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

希望各位讲解一二。


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

在一个函数的 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内部是比较合适的。当然,也不绝对,你可以爱怎么写怎么写。

【热门文章】
【热门文章】