eval()与exec() 的基本用法
Posted 卖山楂啦prss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eval()与exec() 的基本用法相关的知识,希望对你有一定的参考价值。
eval()
和 exec()
,对它们并不太了解,然后简单的学了一下,做个笔记。
eval()
和 exec()
函数都属于 Python 的内置函数,这两个函数在功能和用法方面都有相似之处
两个函数都很强大,它们将字符串内容当做有效的代码执行。
eval()
的基本用法:执行一个表达式,有返回值
eval(expression, globals=None, locals=None)
globals 与 locals 是可选参数,默认值是 None
eval(str)
可以把字符串 str 当作有效的表达式来求值并且返回运算结果。
注:str 只能是单个运算表达式,不可以进行赋值或其他复杂的代码逻辑。
exec()
的基本用法:执行一段代码,没有返回值
exec(expression, globals=None, locals=None, /)
exec()
它可以将 str 解析为代码来执行,因此不但可以进行计算,还可以进行赋值等操作,但是没有返回值。
特别的,exec()
还可以接受有效的.py文件
exec() 和 eval() 的一些简单示例
exec() 是执行一段代码,没有返回值
exec() 中最适合放置运行后没有结果的语句
eval() 是执行一个表达式,既然是表达式,就有返回值
eval() 中适合放置有结果返回的语句
# exec() 是执行一段代码,没有返回值
a1 = exec('1++1') # 相当于直接执行 1++1,但是并没有返回值,a1 应为 None
print(a1)
a2 = 0
exec('a2 = 1++1') # #相当于直接执行 a2 = 1++1
print(a2)
# eval() 是执行一个表达式,既然是表达式,就有返回值
a3 = eval('1+1') # 执行 1+1,并把结果返回给 a3
print(a3)
eval('a4 = 1+1')
print(a4)
运行结果为:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'],
'A':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
'B':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]})
print(df)
df.eval('C = A + B',inplace=True)
print(df)
'''
Country A B C
0 China 10000 5000 15000
1 China 10000 4321 14321
2 India 5000 1234 6234
3 India 5002 4010 9012
4 America 40000 250 40250
5 Japan 50000 250 50250
6 China 8000 4500 12500
7 India 5000 4321 9321
'''
df['D'] = pd.eval('df.A-df.B')
print(df)
'''
Country A B C D
0 China 10000 5000 15000 5000
1 China 10000 4321 14321 5679
2 India 5000 1234 6234 3766
3 India 5002 4010 9012 992
4 America 40000 250 40250 39750
5 Japan 50000 250 50250 49750
6 China 8000 4500 12500 3500
7 India 5000 4321 9321 679
'''
x = 5
df['F'] = pd.eval("df.A + (df.B * x)")
print(df)
'''
Country A B C D F
0 China 10000 5000 15000 5000 35000
1 China 10000 4321 14321 5679 31605
2 India 5000 1234 6234 3766 11170
3 India 5002 4010 9012 992 25052
4 America 40000 250 40250 39750 41250
5 Japan 50000 250 50250 49750 51250
6 China 8000 4500 12500 3500 30500
7 India 5000 4321 9321 679 26605
'''
eval 将字符串形式的列表,转变为真正列表
li = "[1,2,3]"
li = eval(li)
做特征衍生
data.eval('m3_X_123_avg = (X1+X2+X3)/3', inplace=True)
以上是关于eval()与exec() 的基本用法的主要内容,如果未能解决你的问题,请参考以下文章