在Python中,有没有一种方法可以获取调用者传递给函数的参数? 这是我正在尝试做的事情:
# function
def repeat(self, min=None, max=None, optional=False):
do_something()
我需要根据是否传递了一个或多个参数来做出不同的操作。例如:
r.repeat('hello').repeat(2,None)
需要区分以下几点:
r.repeat('hello').repeat(2) # only one arg passed
我认为locals
可能是一个好的起点,但它会获取函数的默认参数,因此对我的目的没有用:
{'_max': None, '_min': 2, 'discrete': [], 'optional': False, 'max': None, 'min': 2, 'self': r'(hello)'}
换句话说,
max
不应该出现在参数中。这在 Python 中是否可行?我还尝试使用 inspect
,但那似乎也会显示默认值:(Pdb) inspect.getargvalues(f)
ArgInfo(args=['self', 'min', 'max', 'optional', 'discrete'], varargs=None, keywords=None, locals={'pdb': <module 'pdb' from '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py'>,
'_max': None, '_min': 2, 'discrete': [], 'optional': False, 'max': None, 'min': 2, 'self': r'(hello)', 'f': <frame object at 0x101e2de68>})
inspect
无法帮助此处,因为None
既是默认参数,也是有效输入参数。使用一个 哨兵对象 代替None
作为默认值,正如 这个答案 所建议的那样,是我见过的最常见的解决方法。 - SethMMorton