一些python内置函数如何与python方法解析保持一致?

一些python内置函数如何与python方法解析保持一致?,python,built-in,Python,Built In,例如,文档中max函数的以下签名: max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) 我认为python一次将同一名称空间中的名称解析为一个不同的项,而没有方法重载 那么这是如何实现的呢? 即使它在调用过程中使用重载并在“内置级别”区分解析了哪个方法,这取决于传递的实际参数,这与python的其余部分有何关联 还是我误解了,两个签名实际上是用同一个签名表示的,只是作为两个变体写出来供我们人类理解?你说得很对 secon

例如,文档中max函数的以下签名:

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
我认为python一次将同一名称空间中的名称解析为一个不同的项,而没有方法重载

那么这是如何实现的呢? 即使它在调用过程中使用重载并在“内置级别”区分解析了哪个方法,这取决于传递的实际参数,这与python的其余部分有何关联


还是我误解了,两个签名实际上是用同一个签名表示的,只是作为两个变体写出来供我们人类理解?

你说得很对


seconds变量只是一个展开的列表,它是一个iterable。因此,iterable版本是这两个版本中更一般的版本

你说得很对


seconds变量只是一个展开的列表,它是一个iterable。因此,iterable版本是这两个版本中更一般的版本

我假设它是同一个函数,只是在内部,它根据参数类型进行区分。例如,若第一个参数实现了iterable,那个么第一个形式是UseEdit,这和您在javascript中基于参数类型所做的类似。没有过载你误读了签名。它应该是
max(iterable[key=func])
max(a,b,c,…[,key=func])
max
根据接收到的位置参数数量决定要执行的操作;关键字参数
key
在这两种情况下都是相同的。@Chris_Rands,确保它可以检查前两个参数是iterable还是数字。我仍然认为没有超载。仅基于传递的参数类型的内部大小写。签名应该是
max(*args)
@chepner我不完全明白你的意思。我是从官方那里抄来的,我认为这是同一个函数,只是在内部,它是根据论点的类型来区分的。例如,若第一个参数实现了iterable,那个么第一个形式是UseEdit,这和您在javascript中基于参数类型所做的类似。没有过载你误读了签名。它应该是
max(iterable[key=func])
max(a,b,c,…[,key=func])
max
根据接收到的位置参数数量决定要执行的操作;关键字参数
key
在这两种情况下都是相同的。@Chris_Rands,确保它可以检查前两个参数是iterable还是数字。我仍然认为没有超载。仅基于传递的参数类型的内部大小写。签名应该是
max(*args)
@chepner我不完全明白你的意思。我从官方那里复制了它。但是arg1和arg2不是iterable元组args的直接部分,经过一点测试,我假设签名是(*args,**kwargs),如果len(args)==1,它选择iterable变量,否则选择其他变量。它还像其他内置函数一样抛出自定义关键字参数错误消息,因此这可能是真正的签名。这是所有python函数的通用签名。当然,但它们都被注释为真正的未知签名。这也是实际函数的真正解释签名吗?内置函数抛出的错误消息与您知道签名的已定义函数不同,因此它们可能真的是*args、**kwargs,然后在函数中引发未定义参数的错误。但是arg1和arg2不是iterable元组args的直接部分,经过一点测试,我想签名是(*args,**kwargs)如果len(args)==1,则选择iterable变量,否则选择其他变量。它还像其他内置函数一样抛出自定义关键字参数错误消息,因此这可能是真正的签名。这是所有python函数的通用签名。当然,但它们都被注释为真正的未知签名。这也是实际函数的真正解释签名吗?内置函数抛出的错误消息与您知道签名的已定义函数不同,因此它们可能实际上是*args、**kwargs,然后在函数中引发未定义参数的错误