Гибкий числовой строковый парсинг в Python

Я нашел функции, которые напоминают Python functools.partial более полезный в JavaScript:

function partial(fn) {
  return partialWithScope.apply(this,
    Array.prototype.concat.apply([fn, this],
      Array.prototype.slice.call(arguments, 1)));
}

function partialWithScope(fn, scope) {
  var args = Array.prototype.slice.call(arguments, 2);
  return function() {
    return fn.apply(scope, Array.prototype.concat.apply(args, arguments));
  };
}

, Почему Вы хотели бы использовать его? Общая ситуация, где Вы хотите использовать это, состоит в том, когда Вы хотите связать this в функции к значению:

var callback = partialWithScope(Object.function, obj);

Теперь, когда обратный вызов называют, this точки к obj. Это полезно в ситуациях с событием или оставлять некоторое свободное место, потому что оно обычно делает код короче.

Приправление карри подобно частичному с различием, что функция, приправляющие карри возвраты просто принимают один аргумент (насколько я понимаю это).

7
задан Kevin Ivarsen 7 December 2009 в 06:06
поделиться

4 ответа

Если вы хотите преобразовать "локализованные" числа, такие как американская форма "2 147 483 647", вы можете использовать функцию atof () из модуля locale . Пример:

import locale
locale.setlocale(locale.LC_NUMERIC, 'en_US')
print locale.atof('1,234,456.23')  # Prints 1234456.23

Что касается дробей, Python теперь обрабатывает их напрямую (начиная с версии 2.6); их можно даже построить из строки:

from fractions import Fraction
x = Fraction('1/4')
print float(x)  # 0.25

Таким образом, вы можете анализировать число, записанное любым из первых трех упомянутых вами способов, только с помощью двух указанных выше стандартных модулей:

try:
    num = float(num_str)
except ValueError:
    try:
        num = locale.atof(num_str)
    except ValueError:
        try:
            num = float(Fraction(num_str))
        except ValueError:
            raise Exception("Cannot parse '%s'" % num_str)  # Or handle '42 billion' here
# 'num' has the numerical value of 'num_str', here.        
6
ответ дан 7 December 2019 в 07:46
поделиться

Построить его при pyparsing должно быть довольно просто - фактически, это один из учебников Проекты pyparsing кое-что из этого делают ( wordsToNum.py на этой странице ) кое-что из этого уже делают. Вы говорите о вещах, которые на самом деле не имеют стандартного представления (стандарт в смысле ISO 8602, а не стандарт в смысле «что все знают»), поэтому легко может быть, что никто не сделал именно то, что вы ищете. для.

1
ответ дан 7 December 2019 в 07:46
поделиться

babel поддерживает первый регистр (числа i18n с запятыми). Документы: http://babel.edgewall.org/wiki/ApiDocs/babel.numbers .

Поддержку простых именованных чисел не должно быть слишком сложно кодировать самостоятельно, как и с дробями.

0
ответ дан 7 December 2019 в 07:46
поделиться

Я не слышал ни об одном. Вы знаете такую ​​библиотеку для других языков? Таким образом, вы можете использовать их документацию и тесты.

Если вы не можете его найти, напишите кучу тестовых примеров, и мы поможем вам заполнить код синтаксического анализа.

Google должен иметь его, попробуйте поискать 5,5 миллиарда * 10, но я не думаю у них есть открытый исходный код для всего подобного. В зависимости от того, как вам нужно его использовать, вы можете использовать Google для выполнения некоторых работ;)

0
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

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