2017-02-09 6 views
1
PriceStr=group[2] 
price=Decimal(sub(r'[^\d.]', '', PriceStr)) 

В этой части кода переменная строка за деньги преобразуется в десятичную. Что означает вторая строка этого кода? Почему нужны «под», «г», апострофы, «^» и т. Д.?Как эта строка работает в python?

+3

sub был, вероятно, импортирован из https://docs.python.org/3/library/re.html#re.sub –

ответ

2

Они удалить все символы из строки, кроме цифр и точек,

, например «$ 1,346.9 общий» преобразуется в «1346,9»

0

В Python r'string' означает сырец строку, то есть строка где побег последовательности недействительны. Сравните, например:

print(r'foo bar\n') 
print('foo bar\n') 

Во втором случае \n интерпретирован как обозначение для новой линии, в то время как на сырье строки это просто слэш и письмо n. Узнайте больше о необработанных строках, например here.

Метод sub был импортирован из модуля re. В верхней части кода вы, вероятно, найдете эту строку:

from re import sub # (or `from re import *`) 

На мой взгляд, лучше import re и после доступа sub как re.sub, таким образом, он является однозначным.

Первый аргумент sub является регулярным выражением. Регулярные выражения (регулярное выражение) - большая тема, вы можете найти отличные ресурсы, чтобы их понять. here или here. То, что это особенно регулярное выражение делает:

  • определяет класс символов (в квадратных скобках [ и ])
  • говорит, что этот символ не является цифрой (\d означает цифру, такую ​​же, как 0-9), и ^ означает отрицание (нет)
  • , то он говорит, что этот символ может быть что угодно (точка . в регулярном выражении означает любой символ,

так называемый регулярное выражение двигатель будет искать совпадения этого шаблона характера, например, в abc123 будет иметь 3 совпадений: a, b и c. Второй аргумент sub рассказывает, что заменить эти совпадения. Здесь вы ничего не заменяете (пустая строка, т. Е. Ничего между двумя кавычками: ''). Третий аргумент sub содержит строку, в которую вы хотите выполнить эту операцию. Затем результат передается методу или классу под названием Decimal, вы можете посмотреть это в своем коде и узнать, что он делает.

Не часть ответа, но общие советы, как справиться лучше подобные случаи:

Если вы хотите, чтобы понять базовый код, как это, вы можете импортировать свои методы и попробовать их один за другим , или временно добавьте операторы print(), перезагрузите модуль и вызовите методы.Например, скажем, ваш модуль называется pricecalculator, и находится в каталоге с тем же именем, или в файле pricecalculator.py, то вы идете в этот каталог, откройте оболочку Python и тип:

import imp 
import pricecalculator 
from pricecalculator import * 

Тогда вы можете вызывать любой метод из этого модуля. Скажем, вам интересно, что такое переменная group, и каков ее третий элемент? Затем добавьте строку print('group: ', group) или print('type of group: ', type(group)) выше линий в вашем посте, и перезагрузить модуль:

imp.reload(pricecalculator) 
from pricecalculator import * 

Затем вызывается метод, где код происходит, и вы увидите содержимое переменной печати.

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

import re 
# see the documentation: 
help(re.sub) # press `q` to return to shell 

from re import * 
# find the module for a method: 
sub.__module__ 

И попытаться напрямую экспериментировать с методами непосредственно в оболочке, читать документы, попробовать вещи и понимать сообщения об ошибках. Here is a guide что означают все типы ошибок.

Наконец, прежде чем задавать здесь вопрос, всегда думайте: есть ли шанс, что ответы помогут кому-то еще? Попробуйте сформулировать заголовок и вопрос соответственно.

 Смежные вопросы

  • Нет связанных вопросов^_^