2016-02-29 28 views
0

我知道這是一個非常簡單的問題,但我無法繞開模塊並導入它們。下面我有一個簡單的Python程序...Python 3不能從導入的模塊中看到字符串

main.py

# Import Function File 
from func1 import source_func1 

# Run function 
source_func1() 

# Print Variable 2 From Function 
print(source_func1(var2)) 

func1.py

def source_func1(): 
    pass 

# Set Variable 2 
var2 = "This is my second variable" 

當我跑我收到以下錯誤......

print(source_func1(var2)) 
NameError: name 'var2' is not defined 

Whe我會錯嗎?

+0

你'source_func1()'函數*不帶參數*。你爲什麼試圖通過'var2'? –

+1

'source_func1()'裏面的'var2'? –

+0

如果你想在其他模塊中使用變量導入它。或者你可以使用func1導入* –

回答

5

你需要導入var2明確的,就像你導入的功能:

from func1 import source_func1, var2 

from func1 import source_func1 
from func1 import var2 

,或者你可以只導入模塊,並指功能和兩變量作爲模塊上的屬性:

import func1 

print(func1.source_func1(func1.var2)) 

但是請注意, T優將在所有這些情況下得到一個錯誤,因爲你的source_func1()功能不帶任何參數:如果你格式化你的問題錯了,var2實際上是內部功能的變量

TypeError: source_func1() takes no arguments (1 given) 

(在這種情況下,你需要修復你的縮進),那麼你就需要回報從功能值:

def source_func1(): 
    # Set Variable 2 
    var2 = "This is my second variable" 
    return var2 

可以然後直接打印返回值:

print(source_func1()) # the return value will be printed. 

或設置變量無論函數的返回:

new_variable = source_func1() 
print(new_variable) 

這新的變量可以被命名var2爲好,但請注意,您的main.py腳本有自己的命名空間;該模塊中名爲var2的變量獨立於名稱func1.var2

+0

從模塊中導入所有內容。感謝你的理解,它開始有意義。我很困惑的論據,但我只是想source_func1設置字符串。爭論在哪裏進行呢? – fightstarr20

+1

@ fightstarr20:已更新。你的問題*非常不清楚*;您似乎沒有正確格式化或解釋了您的預期結果。 –

1

已經給會爲你工作的答案,但如果你想寫自己的函數,那麼你需要返回的var2值,然後外面你需要設置var2等於該函數的source_func1()定義中:

def source_func1(): 
    var2 = 10 
    return var2 

var2 = source_func1() #this defines var2 to equal whatever you put after the return 
print (var2) # this should now print the value of var2 
0

你也可以使用一個import聲明:

main.py

import func1 

# call your function 
func1.source_func1('argument') 

# print your variable 
print(func1.var2) 

func1.py

var2 = 'This is my second variable' 

def source_func1(x): 
    print(x) 
相關問題