簡體   English   中英

在 Python 3.x 中,如何為另一個純傳遞函數創建一個簡單的代理函數?

[英]In Python 3.x how do I create a simple proxy function for another function that is a pure pass through?

在 Python 3.x 中,我想為特定的已知函數proxiedFunc創建一個代理函數_proxy並保證傳遞的所有參數都完全“轉發”,就像它們直接傳遞給proxiedFunc 一樣

# Pseudo-Python code
def _proxy(???generic_parameters???):
        return proxiedFunc(???arguments???)

所說的“純傳遞”是什么意思 -> _proxy方法的實現不應受到對proxiedMethod的(非)兼容更改的影響,假設函數名稱沒有更改(SOLID 原則)。 顯然,_proxy的呼叫者需要,如果proxiedMethod是不兼容的改變進行修改(即我不打算對_proxy是一個適配器,但是這將是一個可能性)。

在函數定義中采用“任何”的通用方式是使用*args, **kwargs

調用另一個函數時,使用相同的語法來傳遞這些args。

def _proxy(*args, **kwargs):
        return proxiedFunc(*args, **kwargs)

* (例如*args )捕獲位置參數,而雙(例如**kwargs )捕獲關鍵字參數。

argskwargs是您為這些參數容器指定的名稱。 按照約定,“ any-positional-args”參數的名稱為argsa (其類型為tuple ),“ any-keyword-args”參數的名稱為kwargskw (其類型為dict )。

我也想找到一種方法來做到這一點,所以我為此編寫了一個函數。 我把它貼到了github: https : //github.com/make-itrain/function-proxy

基本上,它的作用是:

def a(p1, p2, p3=3, *args, p4=228, p18=11, **kwargs):
    # any function, doesn't matter
    pass


def b(p4, p2, *args):
    # some overlapping arguments
    # it too doesn't matter, what's inside here
    print(p4, p2, args)


args, kwargs = proxy_function(b, a, {"args": ("replaced args",)}, 322, "some_random_arg", 1337, 
                              "arguments", ('anything',), 1, abc=338, cbd="here too?")
b(*args, **kwargs)

打印228 some_random_arg ('replaced args',) 很酷,不是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM