Функция Python Lambda необязательная переменная [duplicate]

Самый быстрый способ, которым я нашел для вычисления цифр после десятичной точки и округления числа, -

Вычисление цифр:

  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 мксек за цикл  
10
задан Martijn Pieters 17 June 2013 в 22:38
поделиться

3 ответа

Нет, значения параметра ключевого слова функции определяются, когда функция определена , а не когда функция выполнена.

Установите значение по умолчанию на 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, и это не будет рассматриваться как значение по умолчанию.

18
ответ дан Martijn Pieters 17 August 2018 в 09:22
поделиться

Из-за того, как 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'), если вы не хотите использовать по умолчанию ...

4
ответ дан Jon Clements 17 August 2018 в 09:22
поделиться

Вы должны сделать что-то вроде:

def perms(elements,setLength=None):
    if setLength is None:
        setLength = elements
4
ответ дан Josay 17 August 2018 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: