鉴于Python函数:
def a_method(arg1, arg2):
pass
Run Code Online (Sandbox Code Playgroud)
如何提取参数的数量和名称.即,鉴于我有一个func的引用,我想要返回func.[something]("arg1","arg2").
这种情况的使用场景是我有一个装饰器,我希望使用方法参数的顺序与它们为实际函数出现的顺序相同.也就是说,当我调用aMethod("a","b")时,装饰器看起来会打印出"a,b"吗?
假设我编写了一个装饰器来做一些非常通用的东西.例如,它可能会将所有参数转换为特定类型,执行日志记录,实现memoization等.
这是一个例子:
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
@args_as_ints
def funny_function(x, y, z=3):
"""Computes x*y + 2*z"""
return x*y + 2*z
>>> funny_function("3", 4.0, z="5")
22
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很顺利.然而,有一个问题.装饰函数不保留原始函数的文档:
>>> help(funny_function)
Help on function g in module __main__:
g(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
幸运的是,有一个解决方法:
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items()) …Run Code Online (Sandbox Code Playgroud) 鉴于以下功能:
def foo(a, b, c):
pass
Run Code Online (Sandbox Code Playgroud)
如何获得传入的参数的list/tuple/dict/etc,而不必自己构建结构?
具体来说,我正在寻找Python的JavaScript arguments关键字版本或PHP的func_get_args()方法.
我不想要的是使用*args或的解决方案**kwargs; 我需要在函数定义中指定参数名称(以确保它们被传入),但在函数中我希望在list-或dict-style结构中使用它们.
有没有办法获取一个函数需要的参数名称?
def foo(bar, buz):
pass
magical_way(foo) == ["bar", "buz"]
Run Code Online (Sandbox Code Playgroud) 我是Python的新手,想知道是否有一种简单的方法来获取Python函数中传递的参数数量.
a(1, 2, 3) ==>3
a(1, 2) ==>2
Run Code Online (Sandbox Code Playgroud) 我正在阅读jQuery的"插件/创作",虽然我已经写了一些jQuery-Plugins.现在我看到jQuery有一种特殊的方法来确定方法并调用:
(function( $ ){
var methods = {
init : function( options ) { // THIS },
show : function( ) { // IS },
hide : function( ) { // GOOD },
update : function( content ) { // !!! }
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method …Run Code Online (Sandbox Code Playgroud) 我正在寻找类似于这里所要求的东西获取python函数内的参数名列表,但使用部分函数.即.我需要获得部分函数的可能参数.我可以使用以下方法获取关键字参数
my_partial_func.keywords
Run Code Online (Sandbox Code Playgroud)
但我目前正在努力获得非关键字参数.检查模块也没有为这种特殊情况产生任何结果.任何建议都会很棒.
我知道如果函数接受,我可以将函数参数转换为字典**kwargs.
def bar(**kwargs):
return kwargs
print bar(a=1, b=2)
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
但是,情况恰恰相反?我可以将命名参数打包到字典中并返回它们吗?手动编码版本如下所示:
def foo(a, b):
return {'a': a, 'b': b}
Run Code Online (Sandbox Code Playgroud)
但似乎必须有更好的方法.请注意,我试图避免**kwargs在函数中使用(命名参数对于代码完成的IDE更有效).
在朱莉娅,有没有办法获得传递给函数的名称?
x = 10
function myfunc(a)
# do something here
end
assert(myfunc(x) == "x")
Run Code Online (Sandbox Code Playgroud)
我是否需要使用宏或是否有提供内省的本机方法?
我的目标是创建一个简单的函数,为带有已绘制变量名称的图形添加标题。
到目前为止,我有:
def comparigraphside(rawvariable, filtervariable, cut):
variable = rawvariable[filtervariable > 0]
upperbound = np.mean(variable) + 3*np.std(variable)
plt.figure(figsize=(20,5))
plt.subplot(121)
plt.hist(variable[filtervariable <= cut], bins=20, range=(0,upperbound), normed=True)
plt.title("%s customers with filter less than or equal to %s" % (len(variable[filtervariable <= cut]), cut))
plt.subplot(122)
plt.hist(variable[filtervariable > cut], bins=20, range=(0,upperbound), normed=True)
plt.title("%s customers with filter greater than %s" % (len(variable[filtervariable > cut]), cut));
Run Code Online (Sandbox Code Playgroud)
在哪里:
plt.title("%s customers with filter less/greater...")
Run Code Online (Sandbox Code Playgroud)
我很乐意说:
plt.title("%s customers with %s less/greater...")
Run Code Online (Sandbox Code Playgroud)
目前,我能想到的唯一解决方案是为我的变量制作一个字典,这是我想避免的。任何帮助都将不胜感激。
python ×8
arguments ×3
decorator ×2
function ×2
dictionary ×1
javascript ×1
jquery ×1
julia ×1
kwargs ×1
matplotlib ×1
parameters ×1
partial ×1
python-3.x ×1