2017-09-15 45 views
0

這裏是我寫的代碼:通行證文件到一個功能

def write_to (a): 
    for i in range(len(a)): 
     f.write('{} '.format(a[i])) 
    f.write('\n') 

f = open('temp.txt', 'w') 
a = [2, 3, "this is a test"] 

write_to(a) 

f.close() 

我應該這樣定義write_to(f, a)功能?

然而,當我扭轉它象下面這樣:

def tes(): 
    f = open('temp.txt', 'w') 
    f.write('This is in function tes()\n') 

tes() 
f.write('This is after calling the tes() function\n') 

有一個錯誤:Name f is not defined.

+1

是的,絕對。你爲什麼不那樣做? –

+0

是的,除非你想聲明一個全局變量 –

+0

@ Jean-FrançoisFabre,但'write(a)'也可以。所以我想知道是否可以訪問文件指針而不傳遞給函數。 – user6948979

回答

0

你的代碼工作,因爲f全球。在這一點上,你可以省略通過a,以及...

但是,如果你把你的代碼在其他功能將無法正常工作:

def test(): 
    f = open('L:/so/temp.txt', 'w') 
    a = [2, 3, "this is a test"] 
    write_to(a) 
    f.close() 

現在你NameError: name 'f' is not defined

在你第二個例子,你聲明一個本地變量,然後你嘗試從另一個上下文訪問它:這是行不通的。局部變量不會傳播到全局範圍。

無論如何,將初始化代碼以外的代碼放在模塊頂層(如果導入,代碼執行)是一個壞主意,所以最常見的用法是創建函數:所以傳遞參數而不是依靠某些參數全球決議魔術。