我有两个Python列表:组件和签名.我想检查签名中列出的所有类型是否与组件列表中的至少一个元素匹配.
在这里,签名匹配的组件列表,因为那里既是字符串,并以浮动组件:
signature = [float, str]
components = [1.0, [], 'hello', 1]
Run Code Online (Sandbox Code Playgroud)
这里签名 与 组件不匹配,因为没有列表类型.
signature = [float, list]
components = ['apple', 1.0]
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python 3中表达这个条件?
在某些情况下,我使用Doyren库(libtcod)在Python中制作了一个Roguelike游戏。我更习惯于对对象进行强类型化的C ++。
我正在编写几个类,例如GameMap,GameObject等。其中许多类都包含需要某些类型的方法,例如:
class GameMap:
...
def add_object(self, game_object, x, y):
...
Run Code Online (Sandbox Code Playgroud)
此方法将GameObject game_object添加到地图上的坐标(x,y)。显然有几种方法可以滥用此功能:
我的问题是:处理方法滥用的Python方法是什么?
我看到几种可能性:
选项1:在方法开始时布置一系列断言:
def add_object(self, game_object, x, y):
assert(isinstance(game_object, GameObject)
assert(type(x) == type(y) == int)
assert(0 <= x < self.map_width and 0 <= y < self.map_height)
...
Run Code Online (Sandbox Code Playgroud)
当我将它们复制并粘贴到GameMap中的许多方法中时,这些断言变得相当重复,这就是为什么我还提供选项2的原因:
选项2:在自己的函数中编写断言,并在需要时调用它们以防止复制+粘贴
def check_game_object(self, game_object):
assert(isinstance(game_object, GameObject)
def check_coordinate(self, x, y):
assert(type(x) == type(y) == int)
assert(0 <= x < self.map_width and 0 <= y < self.map_height)
def add_object(self, game_object, x, …Run Code Online (Sandbox Code Playgroud) 我正在使用SDL2和C++制作基本游戏.我一直在慢慢改变我对原始指针的使用,以更安全的智能指针.
该_window变量是一个私有类成员:
private:
std::shared_ptr<SDL_Window> _window;
Run Code Online (Sandbox Code Playgroud)
以下代码有效:
_window = std::shared_ptr<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
Run Code Online (Sandbox Code Playgroud)
以下代码不起作用:
_window = std::make_shared<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
Run Code Online (Sandbox Code Playgroud)
抛出以下错误:
C:\...\include\type_traits(984): error C2027: use of undefined type 'SDL_Window'
Run Code Online (Sandbox Code Playgroud)
这非常令人困惑,因为它type_traits是标准库的一部分.因此,我不确定错误来源的位置,但在此处包含我的整个项目是不可行的.
什么可能导致抛出这样的错误,只需std::shared_ptr改为std::make_shared?
python ×2
python-3.x ×2
assert ×1
c++ ×1
c++11 ×1
css ×1
css3 ×1
html ×1
list ×1
pointers ×1
positioning ×1
sdl ×1
testing ×1
types ×1
unit-testing ×1