Найти - Пользователи
Полная версия: не правильно работает цикл
Начало » Python для новичков » не правильно работает цикл
1
Suliman
В следующем цикле я ожидаю получить в переменную список файлов в расширением img. Однако

listofimagesinfolder = []
def readrasterfolder():
	for root, dirs, files in os.walk(gvar.rasterfolder):
		# На каждой итерации получаем список элементов одного из каталогов и дсоставляем общий список
		# И фильтруем по расширению
		for filename in files:
			if filename.endswith('.img'):
				print filename
				listofimagesinfolder.extend(filename)
	print "Dir have next images:"
	print "================================START IMAGES LIST==============================="
	print listofimagesinfolder
	print "=================================END IMAGES LIST================================"

Однако вместо

я получаю следущующее:

================================START IMAGES LIST===============================

['1', '0', '1', '_', '0', '1', '8', '6', '9', '6', '_', '0', '_', '0', '_', '0',
'1', '_', 'b', 's', 'q', '.', 'i', 'm', 'g', '1', '0', '1', '_', '0', '1', '8',
'6', '9', '6', '_', '0', '_', '0', '_', '0', '2', '_', 'b', 's', 'q', '.', 'i',
'm', 'g', '1', '0', '1', '_', '0', '1', '8', '6', '9', '6', '_', '0', '_', '0',
'_', '0', '3', '_', 'b', 's', 'q', '.', 'i', 'm', 'g']
=================================END IMAGES LIST================================
Вроде бы все правильно делаю, что не так то? Почему он список не дополняет?
py.user.next
замени .extend() на .append()
Suliman
А не могли бы объяснить суть? Почему так происходит?
Suliman
И еще. У меня создается впечатление, что последний участок
print ('LIST OF IMAGES: {0}').format(listofimagesinfolder)
Не видит, то что в него выше мы поместили:

#Читаем растры которые есть в каталогеы
listofimagesinfolder = []
def readrasterfolder():
	for root, dirs, files in os.walk(gvar.rasterfolder):
		# На каждой итерации получаем список элементов одного из каталогов и дсоставляем общий список
		# И фильтруем по расширению
		for filename in files:
			if filename.endswith('.img'):
				#print filename
				listofimagesinfolder.append(filename)
	print "Dir have next images:"
	print "================================START IMAGES LIST==============================="
	for image in listofimagesinfolder:
		print image
	print "=================================END IMAGES LIST================================"
	print gvar.dbhost
print ('LIST OF IMAGES: {0}').format(listofimagesinfolder)
################TEMP######################################

т.е. в блоках START LIST и END LIST все выводится, а вот самый последний вывод показывает, что в переменной пусто.

add:
Если последний блок print сдвинуть немного, то выводится нормально, но не могу понять, почему он глобально не виден?
vrabey
Suliman
А не могли бы объяснить суть? Почему так происходит?
u_ist = []
s = "str"
u_ist.extend(s)
print u_ist

метод extend добавляет новый ! список
то есть
u_ist.extend(s)
можно написать так
u_ist.extend(list(s))
py.user.next
Suliman
Почему так происходит?
>>> print(list.append.__doc__)
L.append(object) -> None -- append object to end
>>> print(list.extend.__doc__)
L.extend(iterable) -> None -- extend list by appending elements from the iterable
>>>

Suliman
а вот самый последний вывод показывает, что в переменной пусто.
сначала надо вызвать функцию readrasterfolder()

vrabey
метод extend добавляет новый ! список …
>>> lst = []
>>> lst.extend('abc')
>>> lst
['a', 'b', 'c']
>>> lst.extend('def')
>>> lst
['a', 'b', 'c', 'd', 'e', 'f']
>>> 
>>> for i in 'ghi':
...   lst.append(i)
... 
>>> lst
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> 
это такой .append() в цикле
Suliman
Спасибо! Более или менее понял, однако не могу разобраться с областями видимости.

Мне мне нужна переменная, которую я смогу использовать в нескольких функциях. Как ее определить?
listofimagesinfolder = []
def readrasterfolder():
	#КУСОК КОДА ВЫКИНУТ
		listofimagesinfolder.append(filename)
print listofimagesinfolder # получается, что тут listofimagesinfolder будет пустым, так?

Как мне сделать его видимым глобально?
py.user.next
>>> lst = []
>>> def f1():
... lst.append(1)
...
>>> def f2():
... lst.append(2)
...
>>> f1()
>>> f2()
>>> f1()
>>> f2()
>>> lst
[1, 2, 1, 2]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB