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