Python获取函数的参数的用途及实现方法(参数内省/Bob框架/inspect.signature)


# 一: 函数内省是什么
"""
    函数内省的例子: --->HTTP 微框架Bob,
                        简单说明:
                            路由知道你这个接口需要什么参数

"""
import bobo
@bobo.query('/')
def hello(person):
    return "hello %s" % person
"""
操作步骤:
    1-启动该文件:
        bobo -f 文件名.py
    2-访问
        http://localhost:8080  
        出现错误:  missing form variable person
    3-添加参数
        http://localhost:8080?person=xiaoxiao
        hello  小小
"""


# 二: 实现Bob框架检测参数的功能
"""
    inspect模块下,signature方法创建出一个Signature对象,-->下面的sig_func

            Signature对象有一个bind 方法(参数是一个方法名), ---->功能: 把任意个参数绑定到func中的形参上---->  用途: --->框架用来调用函数前验证参数

"""
import inspect
def func(name, age, **gender):
    pass

sig_func = inspect.signature(func)
my_para = {"name": "小王", "age": "20", "gender": "man", "type": "A"}

bound_para = sig_func.bind(**my_para)
print(bound_para)

# 删除一个元素(模拟少传参数)
del my_para["name"]
bound_para_2 = sig_func.bind(**my_para)
print(bound_para_2)         # TypeError: missing a required argument: 'name'


# 三: 手动获取参数的方法:
class AcsClient:

    def __init__(
            self,
            ak=None,
            secret=None,
            region_id="cn-hangzhou",
            auto_retry=True,
            max_retry_time=None,
            user_agent=None,
            port=80,
            timeout=None,
            public_key_id=None,
            private_key=None,
            session_period=3600,
            credential=None,
            debug=False):
        a = 1
        b = 2
        c = 3
        print(a+b+c)

# 方法1:
print(AcsClient.__init__.__code__.co_argcount)  # 查看参数的个数, 值为14
print(AcsClient.__init__.__code__.co_varnames)  # 查看所有的参数名以及 方法中定义的变量, 此处返回一个17元素的元组,前14个为参数, 后3个是方法中定义的变量
print(AcsClient.__init__.__defaults__)          # 查看参数的默认值

# 方法2:
print(help(AcsClient.__init__))

# 函数中参数的5种分类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值