Возможно ли для лямбды доступ к области действия функции, в которой она вызывается? - PullRequest
0 голосов
/ 16 октября 2019

Возможно, это не лучший заголовок, но мне было интересно, что-то вроде:

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

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

В любом случае func имеет доступ к переменной column в области действия foo?

(Да, я знаю, что есть обходные пути для этого, я просто хочу знать, возможно ли это каким-либо образом)

1 Ответ

1 голос
/ 16 октября 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...