相关疑难解决方法(0)

在Python中获取方法参数名称

鉴于Python函数:

def a_method(arg1, arg2):
    pass
Run Code Online (Sandbox Code Playgroud)

如何提取参数的数量和名称.即,鉴于我有一个func的引用,我想要返回func.[something]("arg1","arg2").

这种情况的使用场景是我有一个装饰器,我希望使用方法参数的顺序与它们为实际函数出现的顺序相同.也就是说,当我调用aMethod("a","b")时,装饰器看起来会打印出"a,b"吗?

python introspection decorator python-datamodel

214
推荐指数
10
解决办法
12万
查看次数

如果它们是None,则调用没有可选参数的函数

有一个带有可选参数的函数.

def alpha(p1="foo", p2="bar"):
     print('{0},{1}'.format(p1, p2))
Run Code Online (Sandbox Code Playgroud)

让我迭代一下当我们以不同方式使用该函数时会发生什么:

>>> alpha()
foo,bar
>>> alpha("FOO")
FOO,bar
>>> alpha(p2="BAR")
foo,BAR
>>> alpha(p1="FOO", p2=None)
FOO,None
Run Code Online (Sandbox Code Playgroud)

现在考虑我想要调用它的情况,alpha("FOO", myp2)并且myp2将包含要传递的值,或者是None.但即使该函数处理p2=None,我希望它使用其默认值"bar".
也许这令人困惑,所以让我改写一下:

如果myp2 is None,打电话alpha("FOO").不用了,打电话alpha("FOO", myp2).

区别是相关的,因为alpha("FOO", None)结果不同alpha("FOO").

我如何简洁(但可读)做出这种区分?

一种可能性通常是在内部检查无alpha,这将被鼓励,因为这将使代码更安全.但是假设alpha它实际上应该在其他地方使用,None就像它一样.

我想在来电方面处理这个问题.

一种可能性是区分案例:

if myp2 is None:
    alpha("FOO")
else:
    alpha("FOO", myp2)
Run Code Online (Sandbox Code Playgroud)

但是,当有多个这样的论点时,这很快就会成为很多代码.(指数,2 ^ n)

另一种可能性是简单地做alpha("FOO", myp2 or "bar"),但这需要我们知道默认值.通常,我可能会采用这种方法,但我可能稍后更改默认值, …

python python-3.x

29
推荐指数
4
解决办法
6361
查看次数