Lambda是否可以访问被调用函数的范围?

时间:2019-10-16 17:50:18

标签: python pandas lambda

这可能不是最好的标题,但是我想知道的是:

def foo(df, column, func):
    return df[column].map(func)

foo(df, 'my_column', lambda d: int(d))      # for example

无论如何,func是否可以访问column范围内的foo变量?

(是的,我知道有解决方法,我只想知道这是否有可能)

1 个答案:

答案 0 :(得分:1)

IIUC,functools.partial是您想要的:

from functools import partial

def func(col, x): return x if col==0 else x*2;

def foo(df, column, func):
    return df[column].map(partial(func, column))

# toy df
df = pd.DataFrame(np.arange(8).reshape(4,2))

print(foo(df,1,func))
#0     2
#1     6
#2    10
#3    14
#Name: 1, dtype: int64

print(foo(df,0,func))
# equivalently:
# foo(df, 0, lambda col, x: x if col==0 else x*2)

#0    0
#1    2
#2    4
#3    6
#Name: 0, dtype: int64