簡體   English   中英

如何使用裝飾器修改* args的類型?

[英]How can I use a decorator to modify the type of *args?

我想用一個@decorator ,讓我能夠訪問' - '.join(args)args ,如下式所示。 這可能是使用元類嗎?

def a(*args):
    print(args)
a(1, 2, 3)
# (1, 2, 3)

@magic
def b(*args):
    print(args)
b(1, 2, 3)
# 1 - 2 - 3

你可以近距離接觸:

def magic(func):
    def wrapper(*args):
        return func(' - '.join(map(str, args)))
    return wrapper

但這打印出來('1 - 2 - 3',)因為b的主體因為*args而將args視為元組,我懷疑裝飾者可以解決這個問題。 如果身體像print(args[1])你會發生什么?

所以問題的一部分是你在需要字符串的地方使用整數,所以將它們轉換成字符串然后使用join函數。

def magic(func):
    def wrapper(*args):
        return ' - '.join(map(str, args))
    return wrapper

@magic
def a(*args):
    return 'Arguments were {}.'.format(args)

print(a(1, 2, 3))

暫無
暫無

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

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