簡體   English   中英

一個方法有兩個返回語句? 蟒蛇

[英]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.

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