相关疑难解决方法(0)

Python函数作为函数参数?

Python函数可以作为另一个函数的参数吗?

说:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass
Run Code Online (Sandbox Code Playgroud)

所以这基本上是两个问题:

  1. 它是否允许?
  2. 如果是,如何在其他功能中使用该功能?我需要使用exec(),eval()或类似的东西吗?永远不需要弄乱它们.

BTW,extraArgs是anotherfunc参数的列表/元组.

python arguments function

103
推荐指数
4
解决办法
18万
查看次数

如何将类方法作为参数传递给该类外部函数?

这对我来说是这样的:

class SomeName:
  def __init__(self):
    self.value = "something"
  def some_method(self):
    print self.value

def external_func(instance, method):
  method(instance)

external_func(SomeName(), SomeName.some_method)
Run Code Online (Sandbox Code Playgroud)

这似乎正常工作。这是正确的方法吗?

python methods arguments class

5
推荐指数
2
解决办法
8863
查看次数

在python中传递方法

我在函数中传递方法时遇到问题.我已经看过上一篇文章了.

如何在Python中将方法作为参数传递

这是我尝试过的一个简单例子.

def passMethod(obj, method):
    return obj.method()

passMethod('Hi', lower)
Run Code Online (Sandbox Code Playgroud)

最后,我将使用它来帮助编写处理GIS(地理信息系统)数据的函数.数据就像一个数组.我想在数组中添加一个新列NAME1.然后该数组有一个方法来调用列array.NAME1.

问候,亚历克斯

python

2
推荐指数
1
解决办法
286
查看次数

如何改进代码并减少代码数量?

该代码完全相同,所以我想以简单的方式重构它以减少行数.有一点不同的是最小/最大功能执行.是否可以在python中使用函数指针调用min/max作为指向函数的指针,就像在C中一样?

def calculate_min(a, b, c, d, e, f):
    try:
        v = a[e][f]
        b[d] = v if np.isnan(b[d]) else min(b[d], v)    #min()
    except KeyError as exc:
        logger.error("keyerror")

def calculate_max(a, b, c, d, e, f):
    try:
        v = a[e][f]
        b[d] = v if np.isnan(b[d]) else max(b[d], v)    #max()
    except KeyError as exc:
        logger.error("keyerror")
Run Code Online (Sandbox Code Playgroud)

python refactoring pointers coding-style

2
推荐指数
1
解决办法
117
查看次数

如何将 pandas 方法作为参数传递?

我有一个计算 pandas 数据框的列模式的函数:

def my_func(df):
    for col in df.columns:
        stat = df[col].mode()
        print(stat)
Run Code Online (Sandbox Code Playgroud)

但我想让它更通用,以便我可以更改我计算的统计数据,例如平均值,最大值,...我尝试将方法 mode() 作为参数传递给我的函数:

def my_func(df, pandas_stat):
    for col in df.columns:
        stat = df[col].pandas_stat()
        print(stat)
Run Code Online (Sandbox Code Playgroud)

参考:如何在 Python 中将方法作为参数传递

然而这似乎对我不起作用。使用一个简单的例子:

> A
     a    b
0  1.0  2.0
1  2.0  4.0
2  2.0  6.0
3  3.0  NaN
4  NaN  4.0
5  3.0  NaN
6  2.0  6.0
7  4.0  6.0
Run Code Online (Sandbox Code Playgroud)

它无法识别命令模式:

> my_func(A, mode)
Traceback (most recent call last):

  File "<ipython-input-332-c137de83a530>", line 1, in <module>
    my_func(A, mode)

NameError: name 'mode' …
Run Code Online (Sandbox Code Playgroud)

python parameter-passing pandas

2
推荐指数
1
解决办法
2221
查看次数

将对象与对象方法一起传递给函数

我知道在Python中,如果你想要将两个参数传递给一个函数,一个是一个对象,另一个指定必须在对象上调用的实例方法,那么用户可以轻松地传递对象本身,以及方法的名称(作为字符串)然后使用getattr对象上的函数和字符串来调用对象上的方法.

现在,我想知道是否有一种方法(如在C++中,对于那些知道的人)传递对象的位置,以及实际方法(或者更确切地说是对方法的引用,但不是方法名称作为字符串).一个例子:

def func(obj, method):
    obj.method();
Run Code Online (Sandbox Code Playgroud)

我试过传递如下:

func(obj, obj.method)
Run Code Online (Sandbox Code Playgroud)

或者作为

func(obj, classname.method)
Run Code Online (Sandbox Code Playgroud)

但是都不起作用(我认识的第二个是一个很长的镜头,但无论如何我试过了)

我知道您也可以定义一个只接受该方法的函数,然后将其称为

func2(obj.method)
Run Code Online (Sandbox Code Playgroud)

但我特别询问您希望引用对象本身的实例,以及对要在对象上调用的所需类实例(非静态)方法的引用.

编辑:

对于那些感兴趣的人,我发现了一个非常优雅的方式,受到下面接受的答案的"启发".我只是定义func

def func(obj, method):
     #more code here
     method(obj, parameter);     #call method on object obj
Run Code Online (Sandbox Code Playgroud)

并称之为

func(obj_ref, obj_class.method);
Run Code Online (Sandbox Code Playgroud)

其中obj_class是obj_ref是其实例的实际类.

python parameters class object

1
推荐指数
1
解决办法
2933
查看次数

如何在Python中调用作为参数传递的函数

是否可以调用在 Python 中作为参数传递的函数?我试过这样做,但它给出了错误

代码:

def doStuff():
    print("doing stuff")

def doWork():
    print("doing work")

def call_function(func):
    func()

call_function(doStuff())
call_function(doWork())
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

python parameter-passing

0
推荐指数
1
解决办法
73
查看次数