有没有办法在Python中返回当前目录中所有子目录的列表?
我知道你可以用文件做到这一点,但我需要获取目录列表.
我知道,类型检查函数参数在Python中通常是不受欢迎的,但我认为我已经提出了这样做的情况.
在我的项目中,我有一个抽象基类Coord,有一个子类Vector,它有更多的功能,如旋转,变化幅度等.数字的列表和元组也将返回True,因为isinstance(x, Coord).我还有许多函数和方法接受这些Coord类型作为参数.我已经设置了装饰器来检查这些方法的参数.这是一个简化版本:
class accepts(object):
def __init__(self, *types):
self.types = types
def __call__(self, func):
def wrapper(*args):
for i in len(args):
if not isinstance(args[i], self.types[i]):
raise TypeError
return func(*args)
return wrapper
Run Code Online (Sandbox Code Playgroud)
这个版本非常简单,它仍然有一些bug.它就是为了说明这一点.它将被用作:
@accepts(numbers.Number, numbers.Number)
def add(x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
注意:我只是针对Abstract Base Classes检查参数类型.
这是一个好主意吗?有没有更好的方法来做到这一点,而不必在每个方法中重复类似的代码?
编辑:
如果我要做同样的事情,但不是事先在装饰器中检查类型,我会在装饰器中捕获异常:
class accepts(object):
def __init__(self, *types):
self.types = types
def __call__(self, func):
def wrapper(*args):
try:
return func(*args)
except TypeError:
raise TypeError, message
except AttributeError:
raise AttributeError, message
return wrapper …Run Code Online (Sandbox Code Playgroud) 使用标准python logging api记录pyqt4应用程序中的所有异常的最佳方法是什么?
我尝试在try中包装exec_(),除了块,并记录异常,但它只记录应用程序初始化的异常.
作为临时解决方案,我在try中包含了最重要的方法,除了块,但这不是唯一的方法.
我正在使用pygame和box2d编写游戏引擎,在角色构建器中,我希望能够编写将在keydown事件上执行的代码.
我的计划是在角色构建器中有一个文本编辑器,让你编写类似于的代码:
if key == K_a:
## Move left
pass
elif key == K_d:
## Move right
pass
Run Code Online (Sandbox Code Playgroud)
我将检索文本编辑器的内容作为字符串,我希望代码在这个Character方法的方法中运行:
def keydown(self, key):
## Run code from text editor
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
有没有跨平台的方法来获取Python(2.6)中显示器的刷新率?我正在使用 Pygame 和 PyOpenGL,如果有帮助的话。
我不需要改变刷新率,我只需要知道它是什么。
Python 扩展模块只是动态库,因此我认为可以将 Python 扩展动态链接到另一个扩展。问题是在 Windows 上,Python 扩展被赋予了.pyd扩展名而不是.dll,所以当我运行安装脚本时,我无法让 distutils 链接到它们。(我不认为这是 UNIX 上的问题,因为 Python 扩展使用.so文件扩展名。)
假设我有一个bar.pyd需要链接到foo.pyd. 基本上,我在设置脚本中所做的是:
from distutils.core import setup, Extension
foo = Extension("foo", sources=["foo.c"])
bar = Extension("bar", libraries=["foo"], sources=["bar.c"])
setup(ext_modules=[foo, bar])
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是行不通的。这甚至可能吗?我想是的,但我一直无法在网上找到任何东西。我在 Windows 上使用 MinGW,但我希望它可以与不同的 MSVC++ 和其他系统一起使用。
编辑:以前,我通过将编译foo.o时创建的目标文件 ( )传递foo给extra_objects扩展中的选项来解决此问题(这仅在我定义了 中所有foo符号的原型时才有效bar):
bar = Extension("bar", sources=["bar.c"], extra_objects=["build/.../foo.o"]
Run Code Online (Sandbox Code Playgroud)
这似乎不是正确的解决方案,但它奏效了。我不太了解动态链接,所以这可能是正确的方法。不过感觉很不对劲。
然后,我尝试将一些显式参数传递给 gcc 以使其编译导入库:
foo = Extension("foo", sources=["foo.c"], extra_compile_args=["-Wl,--out-implib,foo.lib,--export-all-symbols"])
Run Code Online (Sandbox Code Playgroud)
然后我链接bar到新的导入库:
bar …Run Code Online (Sandbox Code Playgroud) 我目前正在研究用pygame编写的游戏引擎,我想添加OpenGL支持.
我写了一个测试,看看如何让pygame和OpenGL一起工作,当它在窗口模式下运行时,它运行在150到200 fps之间.当我全屏运行时(我所做的就是在设置窗口时添加FULLSCREEN标志),它下降到60 fps.我添加了更多绘图功能,看它是否只是一个巨大的性能下降,但它总是以60 fps运行.
我需要做些什么来告诉OpenGL它是全屏运行还是这是OpenGL的限制?
(我在Windows XP中运行)
假设你有3个模块,a.py,b.py和c.py:
a.py:
v1 = 1
v2 = 2
etc.
Run Code Online (Sandbox Code Playgroud)
b.py:
from a import *
Run Code Online (Sandbox Code Playgroud)
c.py:
from a import *
v1 = 0
Run Code Online (Sandbox Code Playgroud)
c.py会改变a.py和b.py中的v1吗?如果没有,有办法吗?
python ×8
pygame ×3
pyopengl ×2
directory ×1
distutils ×1
eval ×1
exec ×1
fullscreen ×1
import ×1
logging ×1
pyqt ×1
subdirectory ×1
typechecking ×1