[英]Two return statements for one method? Python
我有一種應該打印報告的方法。 有使用相同方法打印的兩個報告,但條件不同。 我給出了if-else條件,但由於某種原因,else部分未執行! 請幫助我解決這個問題
count = 80
a = 20
if a > count:
return xyz
else:
return abc
abc和xyz是我擁有的兩種不同類型的報告。
編輯:這是我的實際功能。 我每次都在獲取記錄。
for inv_no in each:
if inv_no.invoice_date > '2017-06-30':
return {
'type': 'ir.actions.report.xml',
'report_name': 'gst_invoice_print',
'datas': datas,
}
else:
return {
'type': 'ir.actions.report.xml',
'report_name': 'invoice_print',
'datas': datas,
}
我不明白您的問題,因為您的代碼運行良好。 下面的代碼對我有用:
count = 80
a = 20
def test(a, count):
if a > count:
return "xyz"
else:
return "abc"
print test(a,count)
它返回“ abc” ...
我看到了您的最后一個推薦,所以這就是您應該比較日期的方式。
在將Odoo日期轉換為datetime對象之前,它們是不可比較的,因此使用以下方法將Odoo日期轉換為datetime對象:
a = datetime.strptime(self.date_field1, "%Y-%m-%d")
b = datetime.strptime(self.date_field1, "%Y-%m-%d")
# where date_field1 and date_field2 are something like this 2017-01-01
# now you can compare a and b
if a < b:
drink beer
else:
drink more beer
因此,既然我們確切地知道發生了什么,Python的return語句實際上會“退出”該函數,此后不再繼續執行。 您需要跟蹤所有報告,然后返回它,而不是立即這樣做。 一種方法是使用列表或元組。
我更喜歡列表,因為它們對於將來使用是可變的,但是如果您需要使用元組,請使用( )
而不是[ ]
。
reports = []
for inv_no in each:
if inv_no.invoice_date > '2017-06-30':
reports.append({
'type': 'ir.actions.report.xml',
'report_name': 'gst_invoice_print',
'datas': datas,
})
else:
reports.append({
'type': 'ir.actions.report.xml',
'report_name': 'invoice_print',
'datas': datas,
})
return reports
這樣,您可以獲得每個日期的適當報告。 要稍后在代碼中訪問報告,請使用reports["index of list"]["key of dict"]
好吧,您提供的代碼將始終打印報告abc,因為您比較的內容始終返回false(正如其他人所說的)。
如果確實要根據情況檢索兩個報告中的任何一個,(在比較的情況下)一個或兩個值都應該是可變的。 因此,它們需要由用戶輸入,用於功能的參數或輸入的計算機(例如計算機提供的變量。例如時間)。
現在,如果您提供的代碼段代表函數的一部分,並且假設count
變量正在跟蹤迭代,則您需要在迭代之后使用return語句,以確保對所有內容進行了說明。
for count in list:
# Do something
if a > count:
return xyz
else:
return abc
然而, a
變量或list
變量(不為變量使用一覽作為名字,這只是一個例子)必須是可變的。 否則,該函數將始終返回相同的內容。
注意:如果您想要更相關的答案,請包含更多代碼,這些代碼可以更好地表示您的要求(例如函數,類或檢索輸入然后進行操作的區域)。 不要僅在有錯誤的地方提供代碼,還要提供導致錯誤的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.