从python 3.5中的函数返回多个值[重复]
Posted
技术标签:
【中文标题】从python 3.5中的函数返回多个值[重复]【英文标题】:Returning multiple values from function in python 3.5 [duplicate] 【发布时间】:2016-09-26 23:55:14 【问题描述】:我正在尝试从下面的“year_calc”函数(Python 3.5)返回值方面获得一些帮助。本质上,代码用于返回“b”,因为我需要为每次迭代将“b”的新起始值传递给“year_calc”——我可以让它正常工作。但是,我希望返回每个 year_calc 迭代中的“total_cost”值并将其相加直到完成。注意while循环下的“grand_total”。我意识到这不像所说的那样工作 - 只是添加它,这样它可能会增加我试图完成的事情的清晰度。我只是不确定如何提取正在返回的特定值。有什么见解吗?
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()
【问题讨论】:
我认为你想要b, total_cost = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost)
。但我不确定你为什么将total_cost
作为参数传递给year_calc
。顺便说一句,您不需要 return (b, total_cost)
中的括号。此外,您不应该使用sum
作为变量名,因为这会影响内置的sum
函数。除非您尝试在重新定义它的函数之一中使用 sum
函数,否则这里不会有任何伤害。
【参考方案1】:
如果我正确理解你的描述,这实现了你想要的:
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()
【讨论】:
【参考方案2】:year_calc
与任何返回多个项目的函数一样,将在一个元组中返回其值。因此,您可以更改此行:
b = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost)
到这个:
b, total_cost = year_calc(day_cost, days, total_days, sum,b,total_years)
这是因为 Python 处理多重赋值的方式:
>> a, b = 1,2
>> print a
1
>> print b
2
顺便说一句,您应该尽量避免为变量使用像sum
这样的内置名称。而且我不确定years_to_transfer
是什么——你是否在代码的其他地方定义了它?
【讨论】:
【参考方案3】:嗯,看起来有点像尝试在 Python 中编写 VBA... :-)
好的,首先:我认为您不想将 total_cost 传递给函数 year_calc,因为您不依赖于获得的任何值。所以从定义行中删除它:
def year_calc(day_cost,days,total_days,sum,b,total_years):
...
下一步:计算 total_cost 的新值并从函数返回一个元组。说的很对。
现在,当调用 year_calc 时,您应该从调用函数中删除 total_cost 变量。但是你应该记住你返回的是一个元组,所以将值赋给一个元组:
(b, total_cost) = year_calc(day_cost, days, total_days, sum,b,total_years)
底线:没有 ref 变量(或输出变量,...)要在 python 的函数中发送。输入参数,仅此而已。如果要返回 2 个不同的计算,请返回一个元组,但也将值分配给一个元组。干净多了。
【讨论】:
以上是关于从python 3.5中的函数返回多个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章