簡體   English   中英

將文件作為函數參數傳遞

[英]Passing a file as a function argument

如果我在名為documents的目錄中有一個文本文件( sequencedata.txt ):

/~/documents/sequencedata.txt

如何定義一個名為sequenceinfo的函數,該函數將計算上述途徑文件中以#開頭的條目數,並使用語法"there are * entries"返回此計數,其中*是計數的條目數?

到目前為止我所擁有的:

#!/usr/bin/python
def sequenceinfo(sequencedata):
    my_file = open("/~/documents/sequencedata.txt")
    my_dna = my_file.read()
    ecoliseq = my_dna.count('#')
    return ecoliseq

print("There are " + str(ecoliseq) + " sequences")

這里有幾件事:

  1. ecoliseq這個名稱在函數sequenceinfo之外是不可見的。 因此, print行會引發NameError因為Python將無法找到ecoliseq 但是, ecoliseq由函數返回,這意味着您可以通過調用函數然后打印結果來訪問其值。

  2. 你使sequenceinfo采用了一個從未使用過的參數。 這應該是文件的路徑嗎? 我會假設它是,但如果沒有,你應該刪除它。

  3. 這不是一個主要問題,但是當你完成它時你並沒有關閉文件。 您應始終管理並正確釋放程序所需的資源。 使用文件執行此操作的最簡單方法是使用with語句打開它們,這將自動為您關閉它們。

總之,您的代碼應如下所示:

#!/usr/bin/python
def sequenceinfo(path):
    with open(path) as my_file:
        my_dna = my_file.read()
    ecoliseq = my_dna.count('#')
    return ecoliseq

print("There are " + str(sequenceinfo("/~/documents/sequencedata.txt")) + " sequences")

另外,可能存在第四個問題,即my_dna.count('#')將返回文件中每個 #的計數。 但是你在問題中說過你只想計算以#開頭的條目。 如果是這樣,您將需要修復此錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM