2016-10-05 42 views
0

文件1從文件導入功能使用時,如何修改導入文件以提供所需的輸出而不修改導入的文件?

def multiply(): 
    x = raw_input('enter the number') 
    y = x*4 

文件2

from file1 import multiply 

如何使的x = 4值,因此結果(4*4) = 16無需用戶輸入正在實施運行file2什麼時候?

+0

這真的有無關的功能在兩個不同的文件之中,他們也可以同樣是在同樣的模塊,問題依然存在。有一個hackey,可怕的方式來實現這一點,但爲什麼你不寫一個函數,而不是用戶輸入參數? –

+0

那麼你是否實際上試圖用* x = 4來代替文件1中的行,它表示'x = raw_input('輸入數字')'?我認爲這是不可能的,因爲變量是局部的,這意味着它們不能在函數之外訪問。如果您使用* classes *,您可以在繼承另一個文件中的類之後重寫它。 – Mangohero1

+0

你不能只修改'file1'?你可以這樣做,它需要一個參數'x',默認爲'None',並且如果該函數沒有收到'x'的有效值,它會要求用戶輸入一個。 'def multiply(x = None):' – Charles

回答

2

有一個簡單的儘管hackey實現你想要的方式。我建議反對它。它本質上是一個糟糕的設計選擇,但在這裏它是:

def multiply(): 
    x = int(raw_input()) 
    print x * 4 

import sys 
import io 
def force_stdin(f, force_input): 
    stdin = sys.stdin 
    sys.stdin = io.StringIO(unicode(force_input)) 
    f() 
    sys.stdin = stdin 

force_stdin(multiply, '4') 

輸出:

16 
+0

很好的答案。希望OP不會使用它;) – zvone

+0

是的,我只能希望。 –