python - 为什么函数总是返回相同的类型?

标签 python function return-type

我在某处读到,函数应该总是只返回一种类型 所以下面的代码被认为是坏代码:

def x(foo):
 if 'bar' in foo:
  return (foo, 'bar')
 return None

我想更好的解决方案是

def x(foo):
 if 'bar' in foo:
  return (foo, 'bar')
 return ()

返回 None 然后创建一个新的空元组会不会更节省内存,或者这个时间差是否太小以至于即使在较大的项目中也无法注意到?

最佳答案

为什么函数应该返回一致类型的值?满足以下两条规则。

规则 1——一个函数有一个“类型”——输入映射到输出。它必须返回一致类型的结果,否则它不是函数。真是一团糟。

在数学上,我们说某个函数 F 是从域 D 到范围 R 的映射。F: D -> R。域和范围构成函数的“类型”。输入类型和结果类型对于函数的定义与名称或主体一样重要。

规则 2 - 当您遇到“问题”或无法返回正确结果时,引发异常。

def x(foo):
    if 'bar' in foo:
        return (foo, 'bar')
     raise Exception( "oh, dear me." )

可以打破上述规则,但长期可维护性和可理解性的成本是天文数字。

“返回 None 不是更节省内存吗?”错误的问题。

重点是不是以清晰、可读、明显的代码为代价来优化内存。

关于python - 为什么函数总是返回相同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1839289/

相关文章:

Python - 网页抓取 - BeautifulSoup 和 CSV

python - 为所有用户安装一个 python 包,而不会干扰系统 python 安装

c - 程序打印垃圾而不是函数调用的实际返回值

javascript - JS : If variable gets object from a function, 变量是否存储对象的内容或对象的链接?

python - 如何从 Tkinter 条目小部件获取字节数组

python - 去噪 "Lang-Stereotest"

c++ - 如何检查一个函数是否被另一个函数调用?

c - 如何通过系统调用将C中的数组从内核返回给用户

c++ - constexpr 函数的主体不是返回语句

typescript - 提取函数的返回类型并按 typescript 中的属性名称进行过滤