首页 > 编程语言 >Python提取函数参数 inspect​​​模块

Python提取函数参数 inspect​​​模块

时间:2023-08-19 10:33:16浏览次数:49  
标签:function __ code Python inspect 函数参数 print my


1 解析为字典

https://blog.csdn.net/tutan123321/article/details/131319113

def print_params(**params):
    for key, value in params.items():
        print(key + ": " + str(value))

2 __code__

https://blog.csdn.net/weixin_44224529/article/details/121258895

3

inspect模块是Python标准库中的一个模块,它提供了一些用于获取有关对象的信息的函数。下面是一些常用的inspect模块的函数和用法:

  1. inspect.ismodule(object):判断一个对象是否是模块。
import inspect

print(inspect.ismodule(inspect))  # True
print(inspect.ismodule(list))  # False
  1. inspect.isclass(object):判断一个对象是否是类。
class MyClass:
    pass

print(inspect.isclass(MyClass))  # True
print(inspect.isclass(list))  # False
  1. inspect.isfunction(object):判断一个对象是否是函数。
def my_function():
    pass

print(inspect.isfunction(my_function))  # True
print(inspect.isfunction(list))  # False
  1. inspect.ismethod(object):判断一个对象是否是方法。
class MyClass:
    def my_method(self):
        pass

obj = MyClass()
print(inspect.ismethod(obj.my_method))  # True
print(inspect.ismethod(list.append))  # False
  1. inspect.getmembers(object):返回一个对象的成员列表,包括属性和方法。
import math

print(inspect.getmembers(math))
  1. inspect.getargspec(func):获取函数的参数信息(已弃用,推荐使用inspect.signature)。
def my_function(arg1, arg2, *args, **kwargs):
    pass

argspec = inspect.getargspec(my_function)
print(argspec)
  1. inspect.signature(func):获取函数的参数信息。
def my_function(arg1, arg2, *args, **kwargs):
    pass

signature = inspect.signature(my_function)
print(signature)

这只是inspect模块的一小部分功能,还有其他函数和用法可以探索。你可以查看官方文档以获取更多详细信息:https://docs.python.org/3/library/inspect.html



4

def my_function():
    x = 10
    y = 20
    z = x + y
    print(z)

# 获取函数的字节码对象
code_obj = my_function.__code__

# 打印一些信息
print("指令列表:", [i for i in code_obj.co_code])
print("常量列表:", code_obj.co_consts)
print("变量名列表:", code_obj.co_varnames)
print("局部变量数量:", code_obj.co_nlocals)

5

__code__对象本身并没有co_defaults属性

可以使用__code__属性来获取函数的参数。__code__属性是函数对象的一个属性,它包含了函数的字节码对象,其中包含了函数的参数信息。

下面是一个使用__code__属性的示例代码:

def my_function(a, b=10, c="hello"):
    pass

# 获取函数的参数信息
code = my_function.__code__
arg_count = code.co_argcount
arg_names = code.co_varnames
# defaults = code.co_defaults  # 没有这个属性

6

要获取函数的参数和默认参数值,你可以使用Python的内置模块inspect。下面是一个示例代码,展示了如何使用inspect模块来获取函数的参数和默认参数值:

import inspect

def my_function(a, b=10, c="hello"):
    pass

# 获取函数的参数信息
parameters = inspect.signature(my_function).parameters

# 遍历参数信息并打印参数名和默认值
for name, parameter in parameters.items():
    print(f"参数名: {name}")
    if parameter.default != inspect.Parameter.empty:
        print(f"默认值: {parameter.default}")
    else:
        print("没有默认值")

在上面的示例中,我们定义了一个名为my_function的函数,它有三个参数:abc。其中,bc都有默认值。通过使用inspect.signature函数,我们可以获取函数的参数信息。然后,我们遍历参数信息,并打印参数名和默认值(如果有的话)。

运行上述代码,你将得到以下输出:

参数名: a
没有默认值
参数名: b
默认值: 10
参数名: c
默认值: hello

这样,你就可以获取函数的参数和默认参数值了。

标签:function,__,code,Python,inspect,函数参数,print,my
From: https://blog.51cto.com/u_16055028/7147067

相关文章

  • python+playwright 学习-71 expect 断言设置timeout 超时和自定义错误内容
    前言playwright提供了一个expect方法用于断言,还可以设置超时时间。expect使用断言描述expect(locator).to_be_checked()Checkboxischeckedexpect(locator).to_be_disabled()Elementisdisabledexpect(locator).to_be_editable()Elementisenabled......
  • linux环境下基于python的OpenCV 保存视频
    一概念在OpenCV中保存视频使用的是VedioWriter对象,在其中指定输出文件的名称,A创建视频写入的对象out=cv2.VideoWriter(filename,fourcc,fps,frameSize)参数含义:filename:视频保存的位置fourcc:指定视频编解码器的4字节代码fps:帧率frameSize:帧大小B 设置视频的编解......
  • Base64及其Python实现
    1.什么是Base64Base64是一种基于64个可打印字符来表示二进制数据的表示方法Base64是一种编码方式,提及编码方式,必然有其对应的字符集合。在Base64编码中,相互映射的两个集合是:二进制数据{0,1}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,......
  • python 面试题第一弹
    1.如何理解Python中的深浅拷贝浅拷贝(ShallowCopy)创建一个新的对象,该对象的内容是原始对象的引用。这意味着新对象与原始对象共享相同的内存地址,因此对于可变对象来说,如果修改了其中一个对象,另一个对象也会受到影响。浅拷贝通常使用copy模块的copy()函数或者对象的copy()方法来......
  • python调用java的jar包,在scrapy中处理加密逻辑
    APP采集过程中有些请求是需要加密处理的,之前的方式是通过frida-inject的方式处理的,但是这需要连接手机,好在本次处理的APP加密逻辑不是很复杂,加密逻辑都在java层,于是便将里面的java层的加密逻辑单独摘出来,想单独的做成一个jar包,这样就不用再用python做一个相同的算法还原了经过半......
  • [oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
    字体样式回忆上次内容\033xm可以改变字体样式0m-10m之间设置的都是字体效果0m复原1m变亮2m变暗从3m到10m又是什么效果呢??真的可以让文字blink闪烁吗?......
  • 记录Python调用企业微信报错"errcode":44004,"errmsg":"Warning: wrong json format.
    1.通过单独的文件调用接口发送消息无异常;2.通过嵌套调用接口报错:"errcode":44004,"errmsg":"Warning:wrongjsonformat.;3.检查json文本格式无异常;4.怀疑json文本赋值有问题,增加trycache捕获,没有报错,但是可以正常调用接口!!5.打印json文本,比对trycatch的区别,发现多了个空格,依葫......
  • Python game engine framework All In One
    PythongameengineframeworkAllInOneRen'PyRen'Py视觉小说引擎是一款开放源代码的自由软件引擎,用来创作透过电脑叙述故事的视觉小说。Ren'Py之名是Ren'ai与Python两词混合而成。Ren'ai为日文,意指“恋爱”,而Python是Ren'Py所使用的语言环境。和其他流行的视觉小说......
  • [oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
    字体样式回忆上次内容\033xm可以改变字体样式0m-10m之间设置的都是字体效果0m复原1m变亮2m变暗  ​ 添加图片注释,不超过140字(可选) 从3m到10m又是什么效果呢?? ​ 添加图片注释,不超......
  • docker方式部署 uvicorn python项目
    uvicorn项目接触比较少,写dockerfile编译后,启动一直报错重启,尤其是最后写ENTRYPOINT启动命令,改了很多次,特地记录下。以下为正确的dockerfile文件FROMpython:latestRUNpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplefastapi[all]RUNpipinstall-ihttps://p......