возврат значения цикла for в python из одной функции в другую

#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)()