python删除代码中的参数_自动从Python函数中删除命名参数

没有必要。关键字参数仍然可以按位置传递。这里还有一个额外的好处,可以指定其中一个或不指定,如果您愿意的话。但是,您根本不需要指定任何内容。在>>> def foo(bar=1, baz=[2,3]):

... print bar, baz

...

>>> foo()

1 [2, 3]

>>> foo(baz=4)

1 4

>>> foo(10, 20)

10 20

如果我误解了你提供的代码,告诉我。史蒂夫的回答似乎表明你实际上在使用字符串,但我在你的帖子中没有看到任何表明这一点的东西。在

您确实提到了一个函数,它可以打印它自己的函数调用;我假设这个函数必须打印一个字符串,它看起来就像您要用传递的参数调用函数时键入的字符串一样。这相对容易做,因为您可以按原样键入函数名,也可以使用它的__name__属性。在

^{pr2}$

仔细想想,您的示例似乎缺少一个通用函数,该函数可以递归地将此行为授予任何函数。下面是一种实现这一点的方法,使用^{}s(我将重新定义foo(),这样这个例子就更有意义了):>>> from functools import partial

>>> def foo(a, b):

... return (a if not isinstance(a, partial) else a()) + (b if not isinstance(b, partial) else b())

...

>>> fun = partial(foo, 1, partial(foo, partial(foo, 2, 4), partial(foo, 3, 5)))

>>> fun()

15

>>> fun = partial(foo, 1, partial(foo, partial(foo, 2, 4), partial(foo, 3, 5)))

>>> def print_pfunc(pfunc):

... return "{}({}{}{})".format(pfunc.func.__name__, ', '.join(str(arg) if not isinstance(arg, partial) else print_pfunc(arg) for arg in pfunc.args) if pfunc.args else '', ', ' if pfunc.args and pfunc.keywords else '', ', '.join('{}={}'.format(k, v if not isinstance(v, partial) else print_pfunc(v)) for k, v in pfunc.keywords) if pfunc.keywords else '')

...

>>> print print_pfunc(fun)

foo(1, foo(foo(2, 4), foo(3, 5)))

如果你不是一个很长的format()调用的粉丝,这里有一个不同的编写方法(这样你就不用花时间解码我的垃圾了):def print_pfunc(pfunc):

args = ""

if pfunc.args is not None:

args = ', '.join(str(arg) if not isinstance(arg, partial) else print_pfunc(arg) for arg in pfunc.args)

kwargs = ""

if pfunc.keywords is not None:

kwargs = ', '.join('{}={}'.format(k, v if not isinstance(v, partial) else print_pfunc(v)) for k, v in pfunc.keywords)

return "{}({}{}{})".format(pfunc.func.__name__, args, ', ' if args and kwargs else '', kwargs)

现在,要使它适应您的代码,需要您编写代码,在对函数调用求值之前将其转换为分部。从这一点上看你想做什么-我想不出一个聪明的方法来避免这样一个事实:函数调用作为参数传递,在它们被传递之前会被求值,因为这会干扰您正在尝试的操作。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值