Самый быстрый способ, которым я нашел для вычисления цифр после десятичной точки и округления числа, -
Вычисление цифр:
a = decimal.Decimal ('56 .9554362669143476 '); lenstr = len (str (a) .split (".") [1])
Calc, check and rounding:
a = decimal. Десятичный ('56 0,9554362669143476' ); a = round (float (a), 5) если len (str (a) .split (".") [1]) & gt; 5 else float (a)
Сравнение:
$ python2 -mtimeit 'import decimal; а = decimal.Decimal ('56 0,9554362669143476' ); round (float (a), 5) если a.as_tuple (). exponent & lt; -5 else float (a) '10000 циклов, лучше всего 3: 32,4 usec за цикл $ python -mtimeit' import decimal; а = decimal.Decimal ('56 0,9554362669143476' ); a = round (float (a), 5) если len (str (a) .split (".") [1]) & gt; 5 else float (a) '100000 циклов, лучше всего 3: 16,7 мксек за цикл
Нет, значения параметра ключевого слова функции определяются, когда функция определена , а не когда функция выполнена.
Установите значение по умолчанию на None
и определите, что:
def perms(elements, setLength=None):
if setLength is None:
setLength = elements
Если вам нужно указать None
в качестве аргумента, используйте другое значение часового:
_sentinel = object()
def perms(elements, setLength=_sentinel):
if setLength is _sentinel:
setLength = elements
Теперь вызывающие абоненты могут установить setLength
на None
, и это не будет рассматриваться как значение по умолчанию.
Из-за того, как Python обрабатывает привязки и параметры по умолчанию ...
Стандартный способ:
def perms(elements, setLength=None):
if setLength is None:
setLength = elements
И еще один вариант:
def perms(elements, **kwargs):
setLength = kwargs.pop('setLength', elements)
Хотя для этого требуется явно использовать perms(elements, setLength='something else')
, если вы не хотите использовать по умолчанию ...
Вы должны сделать что-то вроде:
def perms(elements,setLength=None):
if setLength is None:
setLength = elements