2017-10-16 66 views
1

所以如果上述問題沒有任何意義,我有一個Python函數(不是我寫的,但我必須運行很多次),需要使用「輸入」功能。即如何自動在Python函數中設置「輸入」?

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

但我不想每次都輸入輸入。 「自動」輸入輸入的最佳方式是什麼,以便我不必連續輸入值?

重要編輯:非常重要的是要注意我不能更改功能。事情必須輸入作爲STDIN輸入

+0

傳遞值給函數的參數?這取決於你在做什麼。 –

+0

只要函數返回您手動輸入的值並跳過調用'輸入' – pvg

+0

我剛剛編輯它以指定我無法更改函數的內部。它的工作原理 – wjmccann

回答

4

您可以更改字符串流或標準輸入做一些類似的文件:

import sys 
from io import StringIO 

sys.stdin = StringIO('test') 

然後每次調用input()將在獲得價值字符串流。

編輯:然後您可以讀取文件並每次更新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 
相關問題