python – 一种自动将参数传递给函数的方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 一种自动将参数传递给函数的方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2259字,纯文字阅读大概需要4分钟。
内容图文
我在模块中有一堆回调函数.他们都调用some_func(),第一个,比方说,几个参数总是相同的,并从他们自己的参数派生,而其他参数则有所不同.像这样:
from outer.space import some_func
def callback_A(param1, param2, param3):
...
some_func(param2+param1, param3, ..., ...)
...
def callback_B(param1, param2, param3, param4):
...
some_func(param2+param1, param3, ..., ...)
...
它遍布整个代码.而不仅仅是param2 param1.
在C/C++中,我只是做一个宏
#define S_F(a,b) some_func(param2+param1, param3, a, b)
并开始在回调中使用S_F而不是some_func.我能用Python做什么?
解决方法:
你可以使用functools.partial
>>> from functools import partial
>>> def my_function(a,b,c,d,e):
... print (a,b,c,d,e)
...
>>> func_with_defaults = partial(my_function, 1, 2, e=5)
>>> func_with_defaults(3, 4)
(1, 2, 3, 4, 5)
编辑:
由于您事先没有这些值,因此无法使用partial或lambda.
你可能想要这样做:
>>> A = lambda x: x + y
>>> def do_something(y):
... return A(2) # hope it uses the `y` parameter...
...
>>> do_something(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something
File "<stdin>", line 1, in <lambda>
NameError: global name 'y' is not defined
但是你可以看到它不起作用.为什么?因为当你定义一个函数时,python会保存你定义它的范围并使用它来解析全局/非局部变量.
如果您可以访问some_func,那么可以通过使用inspect“hacking”解释器堆栈来执行您想要的操作,但这不是一个强大而不优雅的事情,所以不要这样做.
在你的情况下我要做的就是简单地重写声明.
如果你真的想避免这种情况,你可以尝试使用exec:
>>> def some_function(a,b,c):
... print(a,b,c)
...
>>> code = 'some_function(a+b,c,%s)'
>>>
>>> def func_one(a,b, c):
... exec code % 1
...
>>> def func_two(a,b,c):
... exec code % 2
...
>>> func_one(1,2,3)
(3, 3, 1)
>>> func_two(1,2,3)
(3, 3, 2)
但这很难看.
如果你只使用函数的位置参数,你可以做一些更优雅的事情,例如:
>>> def compute_values(a,b,c):
... return (a+b, c)
...
>>> def func_one(a,b,c):
... some_function(*(compute_values(a,b,c) + (1,)))
...
>>> def func_two(a,b,c):
... some_function(*(compute_values(a,b,c) + (2,)))
...
>>> func_one(1,2,3)
(3, 3, 1)
>>> func_two(1,2,3)
(3, 3, 2)
但此时你只是重复一个不同的文字,你失去了很多可读性.
如果你想在python中有预处理功能,你可以尝试Python Preprocessing,即使在你的情况下,我宁愿只重复函数调用.
内容总结
以上是互联网集市为您收集整理的python – 一种自动将参数传递给函数的方法?全部内容,希望文章能够帮你解决python – 一种自动将参数传递给函数的方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。