我想用一個@decorator
,讓我能夠訪問' - '.join(args)
爲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
我想用一個@decorator
,讓我能夠訪問' - '.join(args)
爲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])
那樣,你預計會發生什麼?
所以問題的一部分是,你使用,你需要字符串整數,因此將它們轉換成字符串,然後使用該連接功能。
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))
這就是我想要的,但對於我來說重要的部分是解決'args'是一個元組。是否有可能使用元類來改變這個功能? – 2Cubed
身體不要通常指數'args' - 它會希望它是一個字符串。 (但是,如果它的確如此,'args [1]'會返回字符串中的第二個字符。) – 2Cubed
這不是你的第一個問題,你需要尋找一些非常奇怪的東西。這很可能會導致錯誤和混亂的代碼。你爲什麼想這樣做? –