Lambda 和 eval 在函数内部不起作用
Lambda and eval doesn't working inside a function
我是 python 的新手,非常感谢您对我以下问题的帮助。
问题:
我正在 Dataframe 上进行关键字匹配,我确实在 Jupyter notebook 中尝试了代码,它运行得非常好。但是,相同的代码在 Visual Code 中不起作用。 Jupyter Notebook 和 VS Code 在相同的 python 环境中 运行。
输入数据帧:
note
-----------------
I have a kayak
I have a jet-ski
I have a canoe
I have a jetski
神奇的代码:
def extract():
keywords = ['kayak','jetski']
kayak = re.compile(r'.*(pin.pad|pinpad).*')
jetski= re.compile(r'.*(jetski|jet.ski).*')
for i in keywords:
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
我确实在 Jupyter 中收到了预期的输出,但是 Visual Code 指出以下错误。
File "xyz.py", line 8, in <lambda>
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
File "<string>", line 1, in <module>
NameError: name 'kayak' is not defined
预期输出:
note kayak jetski
-----------------------------------------
I have a kayak True False
I have a jet-ski False True
I have a canoe False False
I have a jetski False True
如果此问题已得到解答或需要更多信息,请告诉我。 :)
不要在这里使用 eval
。只需定义一个 dict
将“kayak”和“jets”映射到适当的对象。
def extract():
keywords = {
'kayak': re.compile(r'.*(pin.pad|pinpad).*'),
'jetski': re.compile(r'.*(jetski|jet.ski).*')
}
for keyword, regex in keywords.items():
df[keyword] = df['note'].apply(lambda x: bool(regex.match(x)))
问题是你的两个变量不存在于由 lambda 表达式创建的函数的局部作用域中,但它们也不存在于全局作用域中。普通的 dict
查找比正确调用 eval
简单得多。
我是 python 的新手,非常感谢您对我以下问题的帮助。
问题:
我正在 Dataframe 上进行关键字匹配,我确实在 Jupyter notebook 中尝试了代码,它运行得非常好。但是,相同的代码在 Visual Code 中不起作用。 Jupyter Notebook 和 VS Code 在相同的 python 环境中 运行。
输入数据帧:
note
-----------------
I have a kayak
I have a jet-ski
I have a canoe
I have a jetski
神奇的代码:
def extract():
keywords = ['kayak','jetski']
kayak = re.compile(r'.*(pin.pad|pinpad).*')
jetski= re.compile(r'.*(jetski|jet.ski).*')
for i in keywords:
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
我确实在 Jupyter 中收到了预期的输出,但是 Visual Code 指出以下错误。
File "xyz.py", line 8, in <lambda>
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
File "<string>", line 1, in <module>
NameError: name 'kayak' is not defined
预期输出:
note kayak jetski
-----------------------------------------
I have a kayak True False
I have a jet-ski False True
I have a canoe False False
I have a jetski False True
如果此问题已得到解答或需要更多信息,请告诉我。 :)
不要在这里使用 eval
。只需定义一个 dict
将“kayak”和“jets”映射到适当的对象。
def extract():
keywords = {
'kayak': re.compile(r'.*(pin.pad|pinpad).*'),
'jetski': re.compile(r'.*(jetski|jet.ski).*')
}
for keyword, regex in keywords.items():
df[keyword] = df['note'].apply(lambda x: bool(regex.match(x)))
问题是你的两个变量不存在于由 lambda 表达式创建的函数的局部作用域中,但它们也不存在于全局作用域中。普通的 dict
查找比正确调用 eval
简单得多。