Создание динамических имен переменных внутри функции (с помощью self) [duplicate]

Поскольку в фильтрах есть только 4 элемента, limit(10) никогда не достигает 10 элементов, поэтому конвейер Stream продолжает генерировать новые элементы и подавать их в фильтр, пытаясь достичь 10 элементов, которые проходят фильтр, но поскольку только первые 4 элемента пропускают фильтр, обработка никогда не заканчивается (по крайней мере до переполнения i).

Конвейер Stream не достаточно умен, чтобы знать, что больше элементов не может пройти фильтр, поэтому он сохраняет обработка новых элементов.

47
задан Curious2learn 25 October 2010 в 11:18
поделиться

6 ответов

Если вы действительно хотите создать их на лету, вы можете назначить dict, который возвращается либо globals (), либо locals () в зависимости от того, какое пространство имен вы хотите создать в них:

globals()['somevar'] = 'someval'
print somevar  # prints 'someval'

Но я бы не рекомендовал это делать. В общем, избегайте глобальных переменных. Использование locals () часто просто скрывает то, что вы на самом деле делаете. Вместо этого создайте свой собственный dict и назначьте его.

mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']

Изучите python zen; запустите это и запомните его:

>>> import this
30
ответ дан kanaka 18 August 2018 в 16:25
поделиться

бит длинный, он работает, я думаю ...

prices = [5, 12, 45]
names = []
for i, _ in enumerate(prices):
    names.append("price"+str(i+1))
dict = {}
for name, price in zip(names, prices):
    dict[name] = price
for item in dict:
    print(item, "=", dict[item])
2
ответ дан Leo Zhang 18 August 2018 в 16:25
поделиться

Еще один пример, который действительно является вариантом другого ответа , поскольку он также использует словарь:

>>> vr={} 
... for num in range(1,4): 
...     vr[str(num)] = 5 + num
...     
>>> print vr["3"]
8
>>> 
6
ответ дан PolyGeo 18 August 2018 в 16:25
поделиться
  • 1
    как вы изменяете vr, хотя? ваше решение побеждает всю цель. я очищаю данные из Интернета, с которыми мне нужно создавать экземпляры класса для каждого элемента контейнера, а количество элементов контейнера неизвестно ... как в вопросе 2 в этот поток, который я создал – Anthony 29 June 2018 в 00:48
  • 2
    @ Энтони вопрос, который я отвечаю здесь, гораздо более сосредоточен, чем то, с чем вы связались. У меня нет совета по этому вопросу. – PolyGeo 29 June 2018 в 00:55
  • 3
    это в основном тот же контекст. я имел в виду «Вопрос № 2», в этой нити на самом дне ... – Anthony 29 June 2018 в 01:32

У меня возникла ваша проблема, и вот мой ответ:

prices = [5, 12, 45]
list=['1','2','3']

for i in range(1,3):
  vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

, поэтому при печати:

price1 = 5 
price2 = 12
price3 = 45
8
ответ дан Raviteja 18 August 2018 в 16:25
поделиться
  • 1
    Это не работает. – Billal BEGUERADJ 27 April 2017 в 12:16
  • 2
    Здесь много ошибок, но подход как таковой не является полностью ошибочным; вы можете назначить vars()["prices"+str(i)] и иметь переменную с ожидаемым именем. – tripleee 30 January 2018 в 07:04
15
ответ дан Stefano Borini 18 August 2018 в 16:25
поделиться
27
ответ дан Tim Čas 18 August 2018 в 16:25
поделиться
Другие вопросы по тегам:

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