程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何获取 Python 函数的 _true_ 签名?

发布于2024-11-26 22:16     阅读(305)     评论(0)     点赞(14)     收藏(1)


太棒了;

inspect.signature给了我们一个函数的签名,但是这个签名可能会撒谎(就像分配给__signature__函数的属性会揭示的那样)。

是否有一个 python 函数(如果可能的话是内置的)可以给我真实的签名?

关于我的背景

inspect.Parameter.emptykind用作可选参数属性和的值default。请注意,如果在函数定义中使用它,函数有时会表现得像省略了它一样,有时则不会。

考虑以下两个函数:

from inspect import Parameter, signature

empty = Parameter.empty

def chalk(x=empty, y=2):
    return True

def cheese(x, y=2):
    return True

签名(包括帮助中显示的签名)是相同的:

assert signature(chalk) == signature(cheese)
assert str(signature(chalk)) == str(signature(cheese)) =='(x, y=2)'

但从参数提示的角度来看(在功能相当丰富的 IDE 中,在函数中输入参数时会得到提示),它们是不一样的。在 VsCode 中,

  • chalk给我的(x: empty = empty, y: int = 2) -> Literal[True]印象是x有一个默认值。
  • cheese给我的(x: Any, y: int = 2) -> Literal[True]印象是x没有默认值。

inspect.signature基本上给了我们函数属性的值__signature__,但是该值完全独立于函数的实际行为。

它的签名 (字符串) 来源在哪里VsCode?是否有一个 Python 函数 (如果可能的话是内置函数) 可以给我真正的签名?


解决方案


暂无回答



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2046115/8da18033adb01c447d14/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)