2010-08-18 3 views
1

Я использую yield для обработки каждого элемента списка. Однако, если набор имеется только один строковый элемент, yield возвращающих символы строки вместо целой строки:Python yield возвращает символы вместо строки из одноэлементного кортежа

self.commands = ("command1") 
... 
for command in self.commands: 
     yield command   # returns 'c' not 'command1' 

каким образом можно исправить?

Благодаря

+1

Это не кортеж. Что заставляет вас думать, что 'self.commands' является кортежем? Какой учебник вы используете? –

+0

Я думал, что круглые скобки обозначены кортежем. читал diveintopython, но, возможно, неправильно прочитал его. – timmy

+0

http://diveintopython.org/getting_to_know_python/tuples.html - «Кортеж определяется так же, как и список, за исключением того, что весь набор элементов заключен в круглые скобки вместо квадратных скобок». – timmy

ответ

5

Кортеж, имеющие только один элемент должен быть written with a trailing comma.

self.commands = ("command1",) 
+0

О да, я помню, что сейчас это читаю. Благодарю. – timmy

+1

... С круглыми скобками необязательно. –

+2

@timmy: Это хорошая идея принять ответ, если он вам поможет. Идите дальше и нажмите значок «галочка» рядом с ответом. –

0
self.commands = ["command1"] 

Вы никогда не говорили петле, что вы имели список, так что это лечение как строка последовательность.

Редактировать: или вы можете просто исправить кортеж, как рекомендовано ... Я предположил, что вы хотите использовать список вместо кортежа.

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