名前を動的に変えるのは全くおすすめできません。
- execとか使わないとできないのに、使うとスコープが壊れる
- 呼び出すときにまた変数名を動的に組み立ててevalとかexecとかで呼ばないといけない
やるとしたら、こんな感じ。
python
1def deco(s):
2 def _deco(func):
3 def wrapper(*args, **kwargs):
4 return func(*args, **kwargs) + ":" + s
5 return wrapper
6 return _deco
7
8lst = []
9for x in range(10):
10
11 @deco(str(x))
12 def test():
13 return "test"
14
15 lst.append(test)
16
17for x in lst:
18 print(x())
19
20""" =>
21test:0
22test:1
23test:2
24test:3
25test:4
26test:5
27test:6
28test:7
29test:8
30test:9
31"""
これも正直おすすめできないので、こういう設計にしたらどうですか。
python
1def deco(s):
2 def _deco(func):
3 def wrapper(*args, **kwargs):
4 return func(*args, **kwargs) + ":" + s
5 return wrapper
6 return _deco
7
8def hogeee():
9 return "hogeee"
10
11def hogeee_param(param):
12 return deco(param)(hogeee)()
13
14print(hogeee_param(param="fugaaa")) # => hogeee:fugaaa
15
paramで使い分けてくださいという意図です。呼び出しのたびに関数オブジェクトが生成されるのでパフォーマンス上は不利ですが、見た目は普通の関数っぽく使えるかと。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。