Python 3.x 在Python中,如何知道函数是获取变量还是对象?

Python 3.x 在Python中,如何知道函数是获取变量还是对象?,python-3.x,Python 3.x,如何测试您的函数是获得[1,2,4,3]还是l 这可能有助于决定是返回(例如)有序列表还是替换它 例如,如果它得到[1,2,4,3],它应该返回[1,2,3,4]。如果它得到了l,它应该将有序列表链接到l,并且不返回任何内容。您无法以任何合理的方式分辨差异;您可以使用gc模块来计算引用,但这不是一种合理的方法。匿名对象和命名变量之间没有区别(除了引用计数),因为无论函数接收到什么,它都将被命名;“变量”其实不是什么东西,Python有引用对象的“名称”,而对象完全不关心它是否有命名引用或未命名引

如何测试您的函数是获得
[1,2,4,3]
还是
l

这可能有助于决定是返回(例如)有序列表还是替换它


例如,如果它得到
[1,2,4,3]
,它应该返回
[1,2,3,4]
。如果它得到了
l
,它应该将有序列表链接到
l
,并且不返回任何内容。

您无法以任何合理的方式分辨差异;您可以使用
gc
模块来计算引用,但这不是一种合理的方法。匿名对象和命名变量之间没有区别(除了引用计数),因为无论函数接收到什么,它都将被命名;“变量”其实不是什么东西,Python有引用对象的“名称”,而对象完全不关心它是否有命名引用或未命名引用


制作一个一致的API。如果您需要让它以两种方式运行,可以让它同时执行这两种操作(在适当的位置进行变异并返回变异的副本以确保完整性),或者创建两个不同的API(其中一个可以用另一个来编写,方法是使用变异版本实现返回新版本,方法是制作参数的本地副本,将其传递给变异版本,然后返回变异的本地副本).

显式优于隐式。
sort
sorted
的存在是有原因的。@noisypaxy:我问题中的排序位只是一个例子。它很可能是删除一个元素,或反转它,或复制每个元素。是的,我明白了。我的意思是,通过将函数保留为尽可能简单和明显。很容易忘记像这样细微的行为差异。内置的
isinstance()
函数是您的朋友:Tonechas:抱歉,这在这里没用。您了解问题吗?