2017-10-16 7 views
1

上記の質問が意味を成さない場合、私はPythonで関数を持っていますが、私はそれを何度も実行しなければなりません。私。Python関数で自動的に "input"を設定する方法はありますか?

def foo(): 
    x = input() 
    ~~Do stuff~~ 
    return ~~some relevant variable~~ 

しかし、毎回入力を入力する必要はありません。値を継続的に入力する必要がないように入力を「自動的に」入力する最良の方法は何ですか?

重要編集:その非常に重要なことに注意してください私は機能を変更することはできません。事はあなたがこれに似た何かをすることにより、文字列ストリームまたはファイルで標準入力を変更することができSTDIN入力として

+0

は、パラメータとして関数に値を渡しますか?それはあなたが何をしているのかによって異なります。 –

+0

関数に手動で入力した値を返し、 'input 'への呼び出しをスキップします。 – pvg

+0

関数の内部を変更できないことを指定するために編集しました。それはどのように動作しますか? – wjmccann

答えて

4

を入力する必要があります。

import sys 
from io import StringIO 

sys.stdin = StringIO('test') 

その後input()への各呼び出しは上の値を取得します文字列ストリーム。

EDIT:ファイルを読み取り、毎回値をsys.stdinに更新することができます。

1

高く、非常には、コンテキストマネージャを実装し、これを行うときはいつでもこのコンテキストマネージャを使用することをお勧めします。だから、何かのように:

import sys 

class as_stdin: 
    def __init__(self, buffer): 
     self.buffer = buffer 
     self.original_stdin = sys.stdin 
    def __enter__(self): 
     sys.stdin = self.buffer 
    def __exit__(self, *exc): 
     sys.stdin = self.original_stdin 

は、その後、あなたがはるかに厳密に制御された方法であなたの標準入力をリダイレクトすることができます:

>>> import io 
>>> from redirect import as_stdin 
>>> def echo(): 
...  print(input()) 
... 
>>> with as_stdin(io.StringIO('hello, world')): 
...  echo() 
... 
hello, world 
>>> x = input() 
hello, x 
>>> 
>>> print(x) 
hello, x 
関連する問題