Итерация каждого символа в строке с использованием Python

Вы не можете, по определению. Декоратор:

@dec
def foo():
    return 1

является просто ярлыком для:

def foo_internal()
    return 1
foo = dec(foo_internal)

Обратите внимание, что декоратор dec - это просто какое-то вызываемое, возвращающее что-то (функция, возможно, какой-то другой вызываемый объект). Вы даже не знаете, имеет ли foo какое-либо отношение к декорированному определению, например:

def dec(f):
    def not_foo():
        return 0
    return not_foo

. Если вам нужно добавить дополнительную информацию о методах, классах и т. Д., Например, например. атрибуты в .NET --- просто установите для них некоторые атрибуты.

def foo()
    return 1
foo.decorated = True

Или реализуйте декораторы, которые устанавливают эти атрибуты, если это действительно помогает читать.

def dec(f):
    f.decorated = True
    return f

Что ж. Python является открытым исходным кодом. Вы всегда можете расширить интерпретатор Python для отслеживания декораторов, применяемых к объекту. Поскольку (как показано выше) объект, возвращенный декоратором, не должен быть каким-либо образом связан с украшенным объектом, эта реализация должна будет хранить информацию от украшенного объекта до применения декоратора, применять декоратор, заменять информацию декоратора на возвращенный объект и добавлять информацию о последнем декораторе.

Можно сделать. Но я не уверен, действительно ли это полезно. И это добавляет некоторые накладные расходы для каждого декоратора. Поэтому я не ожидал такого механизма в основном Python, если только он не предоставляет некоторые другие преимущества, такие как упрощение реализации декораторов и т. Д.

486
задан jww 5 November 2018 в 11:46
поделиться

3 ответа

Как Иоганнес, на который указывают,

for c in "string":
    #do something with c

, можно выполнить итерации в значительной степени чего-либо в Python с помощью эти for loop конструкция,

, например, open("file.txt") возвраты объект файла (и открывает файл), выполнение итерации по нему выполняет итерации по строкам в том файле

with open(filename) as f:
    for line in f:
        # do something with line

, Если это походит на волшебство, хорошо это отчасти, но идея позади него действительно проста.

существует простой протокол итератора, который может быть применен к любому виду объекта сделать for работа цикла над ним.

Просто реализуют итератор, который определяет next() метод, и реализуйте __iter__ метод на классе для создания его повторяемым. (__iter__, конечно, должен возвратить объект итератора, то есть, объект, который определяет next())

Видят официальную документацию

414
ответ дан Vallentin 5 November 2018 в 21:46
поделиться

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

i = 0
while i < len(str):
    print str[i]
    i += 1

, Но с другой стороны, почему делают это, когда строки по сути повторяемы?

for i in str:
    print i
37
ответ дан Andrew Szeto 5 November 2018 в 21:46
поделиться

Еще легче:

for c in "test":
    print c
89
ответ дан Tim Cooper 5 November 2018 в 21:46
поделиться
Другие вопросы по тегам:

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