我看到,人们通常导入pygame的是这样的:
import pygame
from pygame.locals import *
我不明白什么是第二线。 如果我们已经导入了整个pygame的,为什么进口pygame.locals
? 不pygame的已经包括了它,一旦它的进口?
我看到,人们通常导入pygame的是这样的:
import pygame
from pygame.locals import *
我不明白什么是第二线。 如果我们已经导入了整个pygame的,为什么进口pygame.locals
? 不pygame的已经包括了它,一旦它的进口?
import pygame
进口pygame的模块进入“pygame的”命名空间。
from pygame.locals import *
copys在pygame.locals所有名称到当前的命名空间。 这时并不需要,但可以节省你打字。
其实,从pygame的文档 :
该模块包含Pygame中使用的各种常量。 它的内容会被自动放入Pygame的模块命名空间。 但是,应用程序可以使用pygame.locals只包括Pygame的常量以“从pygame.locals导入*”。
因此,所有这些常数已经在那里当您使用import pygame
。 我们可以看到这一点,如果我们这样做:
>>> import pygame
>>> from pygame.locals import *
>>> set(dir(pygame.locals)).issubset(set(dir(pygame)))
True
所以, pygame.locals
的一个子集import pygame
..所以,绝对没有一点做,如果你已经导入pygame的! 除了它允许您访问他们没有pygame
前缀。
当您执行
import pygame
Pygame的完全进口和准备工作,不需要更多的进口。
现在的问题是关于这一行:
from pygame.locals import *
有几个原因,这应该使用,有几个理由不这样做。
foo.bar.baz.ClassName.classmethod()
会出现在命名空间,其成本一定时间4个查找。 越这样的线在代码中,时间更不必要的浪费。 from struct import *
您不能命名功能pack
。 所以,在使用这种进口的,你应该探索模块。 里面是什么东西? 这是什么本身导入? from foo import *
和from bar import *
和from baz import *
,一些变量或常量可能会产生阴影或覆盖。 在这个例子中, foo.version
改写为bar.version
,现在命名为version
。 所以, foo.checkversion()
将无法正常工作了。 正确的方法是导入常用功能外显形式,或者让他们的快速参考,尤其是当你不知道该模块顺利。
例如:
from foo.bar.baz import a_very_useful_function
要么
import foo.bar.baz
quick_referenced_fn = foo.bar.baz.a_very_useful_function
这里quick_referenced_fn
仍然foo.bar.baz.a_very_useful_function
并在命名空间工程foo.bar.baz
,但解释直接知道它的地址,不会进行其他查询。
import pygame
from pygame.locals import *
http://www.pygame.org/docs/tut/ImportInit.html
这里的第一行是只需要一个。 它导入所有可用的pygame的模块到pygame的包。 第二行是可选的,并提出了一套有限的常量和功能为脚本的全局命名空间。
不pygame的已经包括了它,一旦它的进口?
不。 不必要。
stefanos-imac:python borini$ touch a/__init__.py
stefanos-imac:python borini$ touch a/b.py
stefanos-imac:python borini$ echo "print 'hello' " >a/b.py
stefanos-imac:python borini$ python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import a
>>> import a.b
hello
>>>
我不会担心。 我知道你可能已被告知, *
进口是坏的。 这才是真正的在一定程度上,除非pygame的开发商特别定义__all__
属性,在他们已经把所有这些方便,花花公子常量,他们有。 所以,这样他们提出这个特殊的*
进口安全。
的*
涉及__all__
属性,因此搜索pygame.locals
源代码包含在所有常量__all__
属性。