Sup*_*isk 1 python variables pygame global geometry-surface
Heyo,这是我早些时候提出的"进口内进口"问题的延伸,因此版主可以随意合并2.
我有2个文件:A.py和B.py
#A.py
import pygame
import B
pygame.init()
tv = pygame.display.set_mode((256, 256))
tv.blit(<some surface here>)
#B.py
import pygame
pygame.init()
tv.blit()??? <--- I need to blit to tv, but how do I do it here?
Run Code Online (Sandbox Code Playgroud)
我已经尝试制作一个名为Globe的空白文件并为其分配全局值,但大多数时候我发现它只是让我的代码看起来很笨重而且难以编写.同样..我也不想init两次pygame.有没有"Pythonic"的方法呢?
这个问题可以真正适用于任何结构化的python应用程序.
可执行的python脚本将具有入口点.这是您调用以启动应用程序的脚本.在此脚本中,它可以导入库模块以重用扩展功能.
您的应用程序需要有一个入口点.让我们假设它会A.py.
B.py将是一个库模块,您将导入并使用其功能.它不应该期望全局tv变量可以运行.相反,它应该至少具有带参数的函数.甚至是一个用表面实例化的类.这种方法的好处是您的B模块现在可以重复使用,而不依赖于提供始终调用的全局表面的某些可执行主脚本tv
B.py
def blitSpecial(surf):
surf.blit()
Run Code Online (Sandbox Code Playgroud)
A.py
import B
tv = pygame.display.set_mode((256, 256))
B.blitSpecial(tv)
Run Code Online (Sandbox Code Playgroud)
这是一个很好的习惯.如果所有模块都依赖于主脚本中的全局对象,那么它们的可重用性将大大降低.
特别是对于你的pygame情况,应该发生屏幕表面的A.py所有内容,其中使用自定义类和实用程序函数的所有其他模块.