Python 中如何查看一个函数都有什么参数

比如查看一个类有什么方法有内置的 dir()

那么查看一个函数有什么参数有什么内置方法吗?
Python 中如何查看一个函数都有什么参数

11 回复

在Python里,要查看一个函数有哪些参数,最直接的方法是使用内置的 inspect 模块。这个模块专门用来获取活动对象(比如函数、类、方法)的信息。

下面是一个简单的例子:

import inspect

def example_func(name, age=30, *args, city="Beijing", **kwargs):
    """这是一个示例函数"""
    pass

# 获取函数的签名
sig = inspect.signature(example_func)

# 打印参数信息
print("函数参数:")
for param_name, param in sig.parameters.items():
    print(f"  参数名: {param_name}")
    print(f"    类型: {param.kind}")
    print(f"    默认值: {param.default if param.default is not param.empty else '无'}")
    print(f"    注释: {param.annotation if param.annotation is not param.empty else '无'}")
    print("-" * 20)

运行这段代码,你会看到 example_func 的所有参数细节,包括:

  • name: 一个没有默认值的位置参数。
  • age=30: 一个有默认值的位置或关键字参数。
  • *args: 用来接收任意多个额外位置参数的 VAR_POSITIONAL 参数。
  • city="Beijing": 一个关键字参数。
  • **kwargs: 用来接收任意多个额外关键字参数的 VAR_KEYWORD 参数。

inspect.signature() 返回一个 Signature 对象,它完整地描述了函数如何被调用。通过它的 parameters 属性(一个有序字典),你可以遍历所有参数。每个参数是一个 Parameter 对象,里面包含了参数名、类型(POSITIONAL_ONLY, POSITIONAL_OR_KEYWORD, VAR_POSITIONAL, KEYWORD_ONLY, VAR_KEYWORD)、默认值(如果没有默认值,就是 inspect.Parameter.empty)和类型注解。

对于日常快速查看,在交互式环境(如IPython或Jupyter Notebook)里,直接输入函数名加问号 ?(例如 example_func?)或者用 help(example_func) 也很方便,它们内部也使用了类似 inspect 的功能来生成帮助信息。

总结:用 inspect.signature() 来获取函数参数的完整编程式访问。

def method(a, b, c):
----pass

print(method.code.co_varnames) # => (‘a’, ‘b’, ‘c’)

pycharm 输入函数追踪进去(逃

In [1]: import inspect

In [2]: def f(arg1, arg2):
…: print arg1, arg2

In [3]: inspect.getargspec(f)
Out[3]: ArgSpec(args=[‘arg1’, ‘arg2’], varargs=None, keywords=None, defaults=None)

楼上除了 5 楼有点贴近, 其他都像混子啊…

前两天刚实现了一个自动把 function 转 UI 的, 正好用到了这方面的内省知识

首先最推荐的是 inspect.signature, 具体用法看文档

其次是 5 楼类似那个的 inspect.getfullargspec, 这个比 5 楼那个得到的更全面一点, 不过归类做的不如 signature 好

这个叫内省,其实 Google 搜一下就知道了,在论坛上问反而效率低,因为很多人都不会用到

在 pycham 里按住 shift 点进去

你这个厉害了, 是不是那些包的内部也是调用的你这个方法

回到顶部