在Python 3.5中从函数返回多个值

2024-05-29 09:42:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从下面的“year_calc”函数(python3.5)中获得一些返回值的帮助。本质上,代码用于返回“b”,因为每次迭代都需要将“b”的新起始值传递给“year\u calc”—我可以让它正常工作。但是,我希望从每年的计算迭代中返回“总成本”值,并将其相加,直到完成为止。注意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()

Tags: toratecalcdaysyeartransfertotalsum
3条回答

嗯,看起来有点像是用Python编写VBA。。。:-)

好吧,首先:我不认为你想把总成本传递到功能年计算中,因为你不依赖于你得到的任何值。从定义中删除该行:

def year_calc(day_cost,days,total_days,sum,b,total_years):
    ...

下一步:计算total_cost的新值并从函数返回一个元组。这是非常正确的。在

现在,当调用year\u calc时,应该从调用函数中删除total_cost变量。但您应该记住,您返回的是元组,因此将该值赋给元组:

^{pr2}$

底线:在python中,函数中没有ref变量(或输出变量,…)要发送。加上参数,没别的了。如果要返回两个不同的计算,则返回一个元组,但也将该值分配给一个元组。干净多了。在

如果我正确地理解了您的描述,这将实现您想要的:

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()

year_calc与任何返回多个项的函数一样,将在元组中返回其值。因此,您只需更改以下行:

b = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost)

对于这个:

^{pr2}$

这是因为Python处理多个赋值的方式:

>> a, b = 1,2
>> print a
1
>> print b
2

另外,您应该尽量避免对变量使用内置名称,如sum。我不确定years_to_transfer是什么-你在代码的其他地方定义了它吗?在

相关问题 更多 >

    热门问题