#python #function #loops #for-loop #module
#python #функция #циклы #for-цикл #модуль
Вопрос:
Я хочу добиться этого
for i in range(1,10):
print(i)
но используя разные функции, помещая значения цикла for в переменную с именем valuee
, а затем в качестве аргумента в clamp
функцию, а затем печатая ее. Почему я получаю только 1? а не от 1-> 9?
def clamp(valuee):
print(valuee)
def value():
for i in range(1,10):
return i
valuee=value()
clamp(valuee)
Комментарии:
1. Возврат завершает вашу функцию.
Ответ №1:
Если вы используете return
, вы завершите функцию. Вы ищете генератор; просто измените return
for yield
.
def clamp(valuee):
print(valuee)
def value():
for i in range(1,10):
yield i
Вы можете использовать свой генератор 2 способами: внутри цикла
for valuee in value():
clamp(valuee)
Или как вы изначально хотели, но вам нужно добавить ключевое слово next
:
def clamp(valuee):
print(valuee)
def value():
for i in range(1,10):
yield i
valuee = value()
clamp(next(valuee))
clamp(next(valuee))
clamp(next(valuee))
...
Комментарии:
1. добавляя ключевое слово next, я получаю ошибку: TypeError: объект ‘int’ не является итератором
2. Я изменил ответ с полным кодом для следующего случая, не могли бы вы попробовать сейчас, пожалуйста? Он работает на моей стороне (python 3 )
3. это просто добавление его один за другим ‘clamp(next(valuee))’, я хочу от 1-> 10, с одним кодом, а не с 10 кодом…
Ответ №2:
Он выводит не все значения, потому что в методе value() вы используете return, и когда i=1 в цикле, value() возвращает 1 и также выходит из функции и цикла. вы можете использовать … def clamp(valuee): print(valuee)
значение def(): для i в диапазоне (1,10): значение clamp(i)()