簡體   English   中英

我怎樣才能使我的 python function 更具體和動態

[英]How can I make my python function more specific and dynamic

我是 Python 的新手,在弄清楚函數時遇到了一些麻煩。

我設法創建了一個 function,它將 Fastq 文件分成 DNA 序列、質量得分和序列標識符,這似乎有效。

現在編寫代碼的方式將始終打印一條帶有 output 的消息,用於 DNA、質量和身份。 那是故意的。

但是,如何使我的代碼更“動態”? 比方說……今天我只想打印 DNA output 並附帶一條消息。 我如何修改和調用我的 function 才能做到這一點? 此外,我似乎只能調用 Fastq 文件的第一部分。 您如何稱呼其他 seqments 或多個 seqments?

感謝您的時間。

def FastqFile(path_to_file):

    with open("example.fastq", 'r') as input:
        texts = input.read()
        blocks = texts.split("\n@")
#     print(texts)
#     print(blocks)
    dic = {}
    for sequence in blocks[:2]:
        sequence = sequence.replace("@","")
        sub_blocks = sequence.split("\n+\n")
        identifier = sub_blocks[0].split("\n")[0]
        quality = sub_blocks[-1]
        DNA = sub_blocks[0].split("\n")[-1]

        dic[identifier] =[]
        dic[identifier].append(quality)
        dic[identifier].append(DNA)
        print("Here is sequence: %s \n \nAnd quality: %s \n \nAnd identifier: \n%s" %(DNA, quality, identifier))
        return

FastqFile(input)

我嘗試了什么和我期待什么? 我花了幾天時間試圖使這段代碼工作。 我成功了,但現在我的大腦被炸了,所以我決定尋求幫助,這樣我才能學習和理解。

  1. 不要將文件路徑硬編碼到您的 function 中。您使用的是path_to_file參數,因此請使用它。
  2. 您可能不想從嘗試生成多個結果的循環中return 這只是終止循環,這就是為什么你只得到一個結果。 在這段代碼中,您似乎正在將所有數據添加到一個名為dic的字典中,因此您只想讓整個for循環運行它的過程,然后在最后用dic做一些事情。
  3. 通常,如果將讀取數據等任務與顯示數據等任務分開,您的代碼將更易於重用。 有一個 function 從文件構建字典並return整個字典; 然后無論調用 function 都可以使用它想要的任何部分。
def FastqFile(path_to_file):
    with open(path_to_file) as f:
        blocks = f.read().split("\n@")
    dic = {}
    for sequence in blocks[:2]:
        sequence = sequence.replace("@","")
        sub_blocks = sequence.split("\n+\n")
        identifier = sub_blocks[0].split("\n")[0]
        quality = sub_blocks[-1]
        DNA = sub_blocks[0].split("\n")[-1]

        dic[identifier] = [quality, DNA]
    return dic


example = FastqFile("example.fastq")
for identifier, [quality, DNA] in example.items():
    print(f"Here is sequence: {DNA}")
    print(f"With quality: {quality}")
    print(f"And identifier: {identifier}")

請注意,在上面的代碼中,您可以輕松更改打印出的內容或讀取的文件,無需更改FastqFile中的任何內容。 簡而言之,這就是編寫 function 的要點——為您提供一個可以以多種不同方式使用的工具,而不必每次都重寫它。

更進一步,當你與其他人一起編寫代碼時,其他人可以調用你的FastqFile function 並使用它返回的字典來獲取他們想要的任何內容,甚至不必確切了解 function 是如何工作的 這就是高級編程的真正力量,(如果在不看它是如何工作的情況下調用 function 對你來說聽起來很瘋狂,考慮一下你在這段代碼中調用的所有內置函數——你可能不知道發生了什么在open()里面!)

暫無
暫無

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

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