python - 直接返回修改后的函数参数是 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 的函数参数评估策略,它不是按值或按引用,而是按对象。
这种按对象评估策略意味着您在函数内部接收到您在调用时发送的内容。如果你传递一个变量,你会收到一个变量,但是,
如果您将整数、字符串或元组等不可变参数传递给函数,则传递的行为类似于按值调用。对象引用被传递给函数参数。它们不能在函数内改变,因为它们根本不能改变,即它们是不可变的。
因此,只要您(或使用您的函数的任何人)将变量作为参数(next_bussiness_day(day_var)
)传递,您的第一种情况就可以工作,但如果他或她传递不可变的(),它将失败next_bussiness_day('sunday')
。
因此,最佳实践是第二种。
推荐阅读
- emacs - Setting Key Bindings for Common Lisp Top Level in Emacs
- ruby-on-rails - Rails 5 弃用警告“`attribute_change` 的行为”
- c# - EFCore- Update Entity with Navigation Properties
- python - 基于列值python pandas匹配行
- reporting-services - 项目文件 (rptproj) 的 SSRS 结构很奇怪
- java - 为什么 ByteBuffer::asCharBuffer 返回的 CharBuffer 中的第一个字符总是一个空格?
- reactjs - React mobx-state-tree model as array of model
- c# - Couchbase Lite 2.0 复制
- javascript - 更改 div id/class onclick
- javascript - dynamoose 如何让多个模型共享一个表?