有人可以解释这个奇怪的Pygame导入约定吗?

cor*_*zza 6 python import pygame

我看到人们通常会像这样导入Pygame:

import pygame
from pygame.locals import *
Run Code Online (Sandbox Code Playgroud)

我不明白第二行是什么.如果我们已经导入了整个Pygame,为什么要导入pygame.locals?一旦进口,Pygame是否已经包含它?

ch3*_*3ka 6

import pygame
Run Code Online (Sandbox Code Playgroud)

将pygame模块导入"pygame"命名空间.

from pygame.locals import *
Run Code Online (Sandbox Code Playgroud)

将pygame.locals中的所有名称复制到当前名称空间中.这不是必要的,但可以节省您的打字.


fra*_*xel 5

实际上,从pygame 文档:

该模块包含Pygame使用的各种常量.它的内容自动放在pygame模块命名空间中.但是,应用程序可以使用pygame.locals仅包含带有'from pygame.locals import*'的Pygame常量.

因此,当您使用时,所有这些常量已经存在import pygame.如果我们这样做,我们可以看到这个:

>>> import pygame
>>> from pygame.locals import *
>>> set(dir(pygame.locals)).issubset(set(dir(pygame)))
True
Run Code Online (Sandbox Code Playgroud)

所以,pygame.locals是...的一个子集import pygame.如果你已经导入了pygame ,那么绝对没有意义!除了它允许您访问它们没有pygame前缀.

  • `pygame.locals`被称为本地,因为它充满了你经常调用的函数.每次添加`pygame.locals`会使代码变得不那么紧凑. (4认同)
  • @Bane:这不是多余的.您正在清楚地了解命名空间中的内容以及方式. (2认同)