Насколько я понимаю, существует только один вариант использования, когда групповой символ строго необходим (т. е. может выражать то, что вы не можете выразить с использованием явных параметров типа). Это означает, что вам нужно указать нижнюю границу.
Кроме того, однако, маскировки служат для написания более сжатого кода, как описано в следующем документе в документе, который вы упомянули:
Общие методы позволяют использовать параметры типа для выражения зависимостей между типами одного или нескольких аргументов метода и / или его возвращаемого типа. Если нет такой зависимости, общий метод не должен использоваться.
[...]
Использование подстановочных знаков более четкое и краткое, чем объявление явных параметров типа, и должен быть предпочтительным, когда это возможно.
[...]
Подстановочные знаки также имеют то преимущество, что их можно использовать вне сигнатур методов, поскольку типы полей, локальные переменные и массивы.
blockquote>
Вот соответствующий блок код от Joystick.c (через SVN в http://svn.seul.org/viewcvs/viewvc.cgi/trunk/src/joystick.c ? Просмотр = markup & Revision = 2652 & root = pygame )
value = SDL_JoystickGetHat (joy, _index);
#ifdef DEBUG
printf("SDL_JoystickGetHat value:%d:\n", value);
#endif
if (value & SDL_HAT_UP) {
выглядит как проблема с включенной защитой.
Вы можете обойти это, назначив стандартный out / error (я не знаю, к какому из них это приведет) к нулевому устройству. В Python стандартными файлами out / error являются sys.stdout
/ sys.stderr
, а нулевым устройством является os.devnull
, поэтому вы делаете
sys.stdout = open(os.devnull, "w")
sys.stderr = open(os.devnull, "w")
. Это должно полностью отключить эти сообщения об ошибках. К сожалению, это также отключит весь вывод консоли. Чтобы обойти это, отключите вывод непосредственно перед вызовом get_hat()
метода, а затем восстановите его, выполнив
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
, который восстанавливает стандартное значение и ошибку до их первоначального значения.
Чтобы завершить ответ Чарльза, в python встроены два менеджера контекста, redirect_stdout
и redirect_stderr
, которые можно использовать для перенаправления и / или подавления вывода команд в файл или переменную StringIO
.
import contextlib
with contextlib.redirect_stdout(None):
do_thing()
Для более полного объяснения прочитайте документы
.Я использую pythonw.exe (в Windows) вместо python.exe. В других ОС вы также можете перенаправить вывод в / dev / nul. И для того, чтобы все еще видеть мои выходные данные отладки, я использую модуль регистрации.
Как Демолишун упоминает в ответе на закрытый дублирующий вопрос, существует ветка , в которой говорится об этой проблеме. Поток создан в августе 2009 года, и один из разработчиков говорит , что код отладки был оставлен случайно . Я установил Pygame 1.9.1 из pip, и выходные данные отладки все еще присутствуют.
Чтобы обойти это сейчас, я скачал исходник с pygame.org, удалил операторы печати из src / joystick.c и скомпилировал код.
Я нахожусь на OS X 10.7.5 для того, что это стоит.