Из http://en.cppreference.com/w/cpp/numeric/random/random_device :
Обратите внимание, что std :: random_device может быть реализовано в терминах движка псевдослучайных чисел, если для реализации не доступен недетерминированный источник (например, аппаратное устройство).
blockquote>Я ожидал бы достойной реализации, по крайней мере, RNG.
Редактирование: я подозреваю, что они сознательно выбрали выполнение одной и той же последовательности каждый раз, чтобы сделать очевидным тот факт, что поток не был таким случайным, как обещали.
В мире python3.x вы, вероятно, должны использовать объект Signature
:
import inspect
def get_default_args(func):
signature = inspect.signature(func)
return {
k: v.default
for k, v in signature.parameters.items()
if v.default is not inspect.Parameter.empty
}
Аргументы / значения по умолчанию могут быть объединены как:
import inspect
a = inspect.getargspec(eat_dog)
zip(a.args[-len(a.defaults):],a.defaults)
Здесь a.args[-len(a.defaults):]
- аргументы со значениями по умолчанию и, очевидно, a.defaults
- соответствующие значения по умолчанию .
Вы даже можете передать вывод zip
в конструктор dict
и создать сопоставление, подходящее для распаковки ключевых слов.
глядя на документы, это решение будет работать только на python2.6 или новее, так как я предполагаю, что inspect.getargspec
возвращает с именем tuple . Более ранние версии вернули регулярный кортеж , но было бы очень легко модифицировать соответствующим образом. Вот версия, которая работает со старыми (и более новыми) версиями:
import inspect
def get_default_args(func):
"""
returns a dictionary of arg_name:default_values for the input function
"""
args, varargs, keywords, defaults = inspect.getargspec(func)
return dict(zip(args[-len(defaults):], defaults))
Подумайте об этом:
return dict(zip(reversed(args), reversed(defaults)))
также будет работать и может быть более интуитивным для некоторых людей .
Вы можете использовать модуль inspect
со своей getargspec
функцией :
inspect.getargspec(func)
Получить имена и значения по умолчанию аргументов функции Python. Возвращается
blockquote>tuple
из четырех вещей:(args, varargs, keywords, defaults)
.args
- список имен аргументов (он может содержать вложенные списки).varargs
иkeywords
- имена аргументов*
и**
илиNone
.defaults
является кортежем значений аргументов по умолчанию илиNone
, если нет аргументов по умолчанию; если этот кортеж имеет элементыn
, они соответствуют последнимn
элементам, перечисленным вargs
.См. ответ mgilson для точного кода о том, как для получения имен аргументов и их значений по умолчанию.
, чтобы ухаживать только за ключевыми словами args (а потому, что значения по умолчанию и kwonlydefaults могут быть None
):
spec = inspect.getfullargspec(func)
defaults = dict(zip(spec.args[::-1], (spec.defaults or ())[::-1]))
defaults.update(spec.kwonlydefaults or {})
В python все аргументы со значением по умолчанию появляются после аргументов без значения по умолчанию. Поэтому отображение должно начинаться с конца, пока вы не исчерпаете список значений по умолчанию. Следовательно, логика:
dict(zip(reversed(args), reversed(defaults)))
дает правильно отображенные значения по умолчанию.
zip
? Какую часть вы не понимаете. Я с удовольствием улучшу ответ, если вы скажете мне, что вас смущает. – mgilson 27 September 2012 в 19:00