# 一: 函數內省是什麼
"""
函數內省的例子: --->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__))
Python獲取函數的參數的用途及實現方法(參數內省/Bob框架/inspect.signature)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.