2012-02-23 109 views
2

雖然經歷了練習,但我偶然發現了一些事情,即使經過研究,我根本無法理解。學習Python困難的方法,練習20,困惑功能

下面是特定的代碼位:

def print_all(f): 
    print f.read() 

對於整個腳本:http://learnpythonthehardway.org/book/ex20.html

什麼是真的,真的很困惑我的是(F)的一部分。 f從哪裏來?它的目的是什麼?

唉,在此先感謝!

+1

您是否熟悉數學中的函數? – 2012-02-23 04:42:20

+0

這在練習18中有所涉及。 – 2012-02-23 06:49:58

回答

2

f是該函數的一個參數,它應該是一個類似於對象的文件,並且在提供的示例中使用公開調用構造。

script, input_file = argv 
#... 
current_file = open(input_file) 
#... 
#here, the body of current_file is executed, 
#with f replaced by the value of current_file 
print_all(current_file) 

其中argv(由sys模塊提供的)是設置在所述命令行字符串列表例如["ex20.py", "test.txt"]

+0

當然!傻我。有時我會感到驚訝,我自己可能會有多慢。 – user1227453 2012-02-23 04:58:24

+1

不要讓自己失望。犯錯誤,學習,繼續前進。 – Paragon 2012-02-23 05:21:30

1

示例它們提供

script, input_file = argv  

$ python ex20.py test.txt 

意味着f是文件。

3

f是支持傳遞給print_all的讀取方法的文件或其他對象。 read方法讀取所有內容。打印語句打印它。

2

f是一個參數。它傳遞給函數。例如:

def double(n): 
    return n * 2 

鑑於這種函數的定義,稱:

x = double(2) 
print(x) 

會產生:

4 

你也可以簡單地做print(double(2))

該參數傳遞是函數,對象和對象方法的基本部分;理解這一點對於理解任何 Python代碼都是必要的。

0

fprint_all()用於傳遞給它的第一個參數的名稱。

print_all(some_file) 
print_all('Hello, World!') 
print_all(23) 

上面將每次運行期間含有some_file'Hello, World!'23在函數內運行print_all()三次,用f

1

f一種說法,當你傳遞的東西給這個函數的定義:

script, input_file = argv 
current_file = open(input_file) 

print_all(current_file) 
0

你看,我開始學習Python的昨天。但讓我試圖澄清,

script, input_file = argv 

將參數傳遞(腳本名稱和輸入文件名)到相應的變量。

current_file = open(input_file) 

這對你已經通過

print_all(current_file) 

文件名這個叫有問題的函數創建文件處理程序對象。所以,你需要定義一個像def functionName(arg1, arg2)這樣的函數來通知這個函數需要多少個參數(以及它的名字是什麼)。

所以,你已經定義了def print_all(f)說這個函數帶有一個參數,這個參數將有本地名f,這個參數將被用於該函數內部的進一步使用。