首页 > 解决方案 > 直接返回修改后的函数参数是 Python 中的一种好习惯吗?

问题描述

我想知道在Python. 例子:

def next_business_day_(day)
    while is_weekend(day):
        day = day + datetime.timedelta(days=1)
    return day

我经常看到这样编写的函数(见下文),创建一个单独的变量来返回。这样做有什么好处吗?除了新创建的变量名(即ret)的语义含义?

def next_business_day(day)
    ret = day
    while is_weekend(ret):
        ret = ret + datetime.timedelta(days=1)
    return ret

这两个功能似乎都有效,但是使用第一种方法有什么缺点吗?(即直接返回修改后的函数参数)更简洁。

标签: python

解决方案


问题在于 Python 的函数参数评估策略,它不是按值按引用,而是按对象

这种按对象评估策略意味着您在函数内部接收到您在调用时发送的内容。如果你传递一个变量,你会收到一个变量,但是,

如果您将整数、字符串或元组等不可变参数传递给函数,则传递的行为类似于按值调用。对象引用被传递给函数参数。它们不能在函数内改变,因为它们根本不能改变,即它们是不可变的。

因此,只要您(或使用您的函数的任何人)将变量作为参数(next_bussiness_day(day_var))传递,您的第一种情况就可以工作,但如果他或她传递不可变的(),它将失败next_bussiness_day('sunday')

因此,最佳实践是第二种。

https://www.python-course.eu/passing_arguments.php


推荐阅读