小编Bra*_*eis的帖子

获取当前目录中所有子目录的列表

有没有办法在Python中返回当前目录中所有子目录的列表?

我知道你可以用文件做到这一点,但我需要获取目录列表.

python directory subdirectory

467
推荐指数
22
解决办法
62万
查看次数

检查函数参数类型是Pythonic吗?

我知道,类型检查函数参数在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 typechecking

20
推荐指数
3
解决办法
1万
查看次数

记录pyqt4应用程序中的所有异常

使用标准python logging api记录pyqt4应用程序中的所有异常的最佳方法是什么?

我尝试在try中包装exec_(),除了块,并记录异常,但它只记录应用程序初始化的异常.

作为临时解决方案,我在try中包含了最重要的方法,除了块,但这不是唯一的方法.

python logging pyqt

11
推荐指数
1
解决办法
2915
查看次数

运行包含在字符串中的Python代码

我正在使用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 pygame eval exec

8
推荐指数
1
解决办法
2万
查看次数

如何确定显示器的刷新率?

有没有跨平台的方法来获取Python(2.6)中显示器的刷新率?我正在使用 Pygame 和 PyOpenGL,如果有帮助的话。

我不需要改变刷新率,我只需要知道它是什么。

python pygame pyopengl

8
推荐指数
1
解决办法
7103
查看次数

将 Python 扩展 (.pyd) 动态链接到另一个扩展

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时创建的目标文件 ( )传递fooextra_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)

python distutils dynamic-linking

7
推荐指数
1
解决办法
2452
查看次数

PyOpenGL + Pygame在Fullscreen中的上限为60 FPS

我目前正在研究用pygame编写的游戏引擎,我想添加OpenGL支持.

我写了一个测试,看看如何让pygame和OpenGL一起工作,当它在窗口模式下运行时,它运行在150到200 fps之间.当我全屏运行时(我所做的就是在设置窗口时添加FULLSCREEN标志),它下降到60 fps.我添加了更多绘图功能,看它是否只是一个巨大的性能下降,但它总是以60 fps运行.

我需要做些什么来告诉OpenGL它是全屏运行还是这是OpenGL的限制?

(我在Windows XP中运行)

python pygame pyopengl fullscreen

2
推荐指数
1
解决办法
3211
查看次数

Python导入:在"父"/其他孩子中改变"child"中的变量会改变变量吗?

假设你有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 import

2
推荐指数
1
解决办法
418
查看次数