[英]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)
我嘗試了什么和我期待什么? 我花了幾天時間試圖使這段代碼工作。 我成功了,但現在我的大腦被炸了,所以我決定尋求幫助,這樣我才能學習和理解。
path_to_file
參數,因此請使用它。return
。 這只是終止循環,這就是為什么你只得到一個結果。 在這段代碼中,您似乎正在將所有數據添加到一個名為dic
的字典中,因此您只想讓整個for
循環運行它的過程,然后在最后用dic
做一些事情。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.