Returning multiple values from function in python 3.5
本问题已经有最佳答案,请猛点这里访问。
我正在尝试从下面的"yearu calc"函数(python3.5)中获得一些返回值的帮助。本质上,代码用于返回"b",因为我需要一个新的"b"的起始值为每次迭代传递到"year_calc"-我可以让它工作得很好。但是,我希望每年计算迭代的"总成本"值返回并相加,直到完成为止。注意while循环下的"总计"。我意识到这并不是如前所述的那样有效——只需添加它,就可以让我想要完成的事情更加清晰。我只是不知道如何提取正在返回的特定值。有什么见解吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | def main(): archive_total = float(input('Enter archive total (GB): ')) transfer_rate = float(input('Enter transfer rate (Gbps): ')) days_to_transfer = ((((archive_total*8/transfer_rate)/60)/60)/24) xfer_per_day = archive_total/days_to_transfer day_cost = xfer_per_day * 0.007 / 30 days = 365 total_days = 0 sum = 0 b = xfer_per_day * 0.007 / 30 total_years = 1 grand_total = 0.0 total_cost = 0.0 while total_years < years_to_transfer + 1: b = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost) total_years += 1 grand_total += total_cost def year_calc(day_cost,days,total_days,sum,b,total_years,total_cost): while total_days < days -1: b += day_cost sum += b total_days += 1 total_cost = sum + day_cost print('Year',total_years,'cost: $', format(sum + day_cost, ',.2f')) return (b, total_cost) main() |
嗯,似乎有点像用Python编写VBA…-)
好的,首先:我认为你不想把总成本传给功能年计算,因为你不依赖于你得到的任何价值。所以从定义行中删除它:
1 2 | def year_calc(day_cost,days,total_days,sum,b,total_years): ... |
下一步:计算总成本的新值,并从函数返回一个元组。这是非常正确的。
现在,当callin year_calc时,应该从调用函数中删除total_cost变量。但是您应该记住,您返回一个元组,因此将值赋给一个元组:
1 | (b, total_cost) = year_calc(day_cost, days, total_days, sum,b,total_years) |
底线:在Python的函数中没有要发送的引用变量(或输出变量,…)。输入参数,不需要更多。如果要返回两个不同的计算,请返回一个元组,但也要将该值赋给一个元组。干净多了。
与返回多个项的任何函数一样,
1 | b = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost) |
对此:
1 | b, total_cost = year_calc(day_cost, days, total_days, sum,b,total_years) |
这是因为python处理多个分配的方式:
1 2 3 4 5 | >> a, b = 1,2 >> print a 1 >> print b 2 |
另一方面,您应该尽量避免对变量使用诸如
如果我正确理解您的描述,这将实现您想要的:
1 2 3 4 5 6 7 8 9 10 11 12 | def main(): # ... total_cost = 0.0 while total_years < years_to_transfer + 1: b, total_cost = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost) # ... def year_calc(day_cost,days,total_days,sum,b,total_years,total_cost): # ... return (b, total_cost) main() |