2016-07-26 3 views
-1

НапримерКаков механизм функции strip(), за которым следует нота фрагмента в python?

sentence = "hello world" 
stripped1 = sentence.strip()[:4] 
stripped2 = sentence.strip()[3:8] 
print (stripped1) 
print (stripped2) 

Выход:

hell 
lo worl 

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

+2

Нет, 'strip()' не является объектом функции. Это * возвращаемое значение этого метода *. Это просто еще одна строка, здесь точно такая же, как и оригинал, так как нет ведущего или конечного пробела. –

+0

"strip() - объект функции" Нет, это не так. Это строка. Попробуй. Это просто удаляет пробелы с этой строки, чтобы создать новую, лишенную строку, а затем разрезать ее. – TigerhawkT3

ответ

2

Python выполняет _result = sentence.strip()[:4] в несколько отдельных шагов:

_result = sentence  # look up the object "sentence" references 
_result = _result.strip # attribute lookup on the object found 
_result = _result()  # call the result of the attribute lookup 
_result = _result[:4] # slice the result of the call 
stripped1 = _result  # store the result of the slice in stripped1 

так [:4] просто больше синтаксиса, так же, как () вызова, которые могут быть применены к результату другого выражения.

Здесь нет ничего особенного в вызове str.strip(), он просто возвращает другую строку, разделенную версию значения sentence. Метод работает отлично, не передавая никаких аргументов; от documentation for that method:

Если опущена или None, в символов аргумент умолчанию предлагается удаление пробелов.

так что здесь нет необходимости передавать аргументы.

В этом конкретном примере, sentence.strip() возвращает ту же самую строку, так как нет ведущего или конечные пробелы в "hello world":

>>> sentence = "hello world" 
>>> sentence.strip() 
'hello world' 
>>> sentence.strip() == sentence 
True 

поэтому выход sentence.strip()[:4] точно так же, как и для sentence[:4]:

>>> sentence.strip()[:4] == sentence[:4] 
True 

Вы, кажется, пропустили звонок там, поскольку вы, кажется, путаетесь с выходом всего поиск атрибута; sentence.strip (без вызова), создает встроенный объект метода:

>>> sentence.strip 
<built-in method strip of str object at 0x102177a80> 
+0

Так простое объяснение. Спасибо. @MartijnPieters. –

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

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