簡體   English   中英

Lambda function 不傳遞參數

[英]Lambda function without passing argument

我有一個示例 dataframe 列“一”和“二”由一些隨機整數組成。 I was trying to understand some code with a lambda function in more depth and was puzzled that the code seems to magically work without providing an argument to be passed to the lambda function.

最初,我使用 pandas assign() 方法創建一個新列“newcol”,並將 df 傳遞給顯式 lambda function func(df)。 function 返回 df 的 'one' 列的日志:

df=df.assign(newcol=func(df))

到目前為止,一切都很好。

然而,令我感到困惑的是,代碼在不通過 df 的情況下也能正常工作。

df=df.assign(newcol2=func)

即使我沒有將 (df) 傳遞到 lambda function 中,它也會正確執行操作。 解釋器如何知道 df 被傳遞到 lambda function 中?

下面的示例代碼和 output:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=16).reshape(8,2),columns=["one","two"])
func=lambda x: np.log(x.one)
df=df.assign(newcol=func(df))
print(df)

#This one works too, but why?
df=df.assign(newcol2=func)
print(df)
Output:
   one  two    newcol   newcol2
0    1    8  0.000000  0.000000
1    6    7  1.791759  1.791759
2    2    6  0.693147  0.693147
3    2    8  0.693147  0.693147
4    4    2  1.386294  1.386294
5    9    3  2.197225  2.197225
6    2    2  0.693147  0.693147
7    4    7  1.386294  1.386294

(注意我本可以使用 lambda func inline 分配,但為了清楚起見,這里明確說明。)

如果您使用pd.DataFrame.assign()並傳遞一個callable ,它假定第一個參數實際上是 dataframe 本身。

例如,如果您將代碼更改為以下內容:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=16).reshape(8,2),columns=["one","two"])
func=lambda c, x: np.log(x.one + c)
df=df.assign(newcol=func(1, df))
print(df)

#This one will no longer work!
df=df.assign(newcol2=func)
print(df)

最后一次調用assign()將不起作用。

這在官方文檔中有解釋。 df.assign(newcol=func(1, df))行使用不可調用路徑,而df.assign(newcol=func)行使用可調用路徑。

這不是編譯,它只是分配源代碼的編寫方式。 pandas 分配文檔中所述。

其中值是可調用的,在 df 上評估:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM