目录
suibi

python中eval用法(python中eval输出什么)


Python解释器内置了许多函数,这意味着我们无需定义,始终可以它们。下面按照函数的字母顺序,讨论一些常用的内建函数。

eval()

eval()函数解析传给它的表达式,并在程序中运行Python表达式(代码)。举个例子:

>>> x = 1

>>> eval("x + 1") # 注意:"x + 1"是字符串

2

>>> eval("4 < 9")

True

>>> eval("'py' * 3")

'pypypy'

>>> eval("10 ** 2")

100

eval()函数不仅仅能运行简单表达式,还能调用函数,使用方法等等:

>>> eval("abs(-11)") # 计算-11的绝对值

11

>>> eval('"hello".upper()') # 把字符串'hello'全变成大写字母

'HELLO'

>>> import os

>>> eval('os.getcwd()') # 获取当前的工作目录

'/home/thepythonguru'

但是需要注意的是eval()仅适用于表达式,尝试传递语句会导致语法错误:

>>> eval('a = 1') # 赋值语句

Traceback (most recent call last):

File "", line 1, in

File "", line 1

a = 1

^

SyntaxError: invalid syntax

>>> eval('import re') # 导入语句

Traceback (most recent call last):

File "", line 1, in

File "", line 1

import re

^

SyntaxError: invalid syntax

此外,使用eval()语句应该十分小心,永远不要将不受信任的源直接传递给eval()。 因为恶意用户很容易对您的系统造成破坏。 例如:

>>> eval(input()) # eval()将执行用户输入的代码

用户输入以下代码就能从系统中删除所有文件:

os.system("RM -RF /")

# 上面输入相当于执行:

>>> eval('os.system("RM -RF /")')

filter()

"filter"的意思是“过滤”,filter()函数需要两个参数:一个函数对象和一个可迭代对象。函数对象需要返回一个布尔值,并为可迭代的每个元素调用。 filter()函数仅返回那些通过函数对象返回值为true的元素。解释有一些抽象,看一个例子:

>>> a = [1, 2, 3, 4, 5, 6]

>>> filter(lambda x : x % 2 == 0, a) # 过滤出所有偶数,结果返回一个filter对象

0x1036dc048> >>> list(filter(lambda x : x % 2 == 0, a)) # 可以使用list()函数使fileter对象变成列表,方便查看结果 [2, 4, 6]

下面是另外一个例子:

>>> dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

>>> filter(lambda x : x['name'] == 'python', dict_a) # 过滤出列表中键'name'为值'python'的字典

0x1036de128> >>> tuple(filter(lambda x : x['name'] == 'python', dict_a)) # 使用tuple()函数使结果变成字典 ({'name': 'python', 'points': 10},)

float()

float()的参数是一个数字或者字符串,它返回一个浮点数。如果参数是字符串,则字符串中应该包含一个数字,并可以在数字前加入一个 '-' 符号,代表负数。参数也可以是表示NaN(非数字)或正无穷大的字符串。如果没有任何参数的话,将返回0.0。

>>> float('+1.23') # 1.23

1.23

>>> float(' -12345\n') # -12345

-12345.0

>>> float('1e-003') # 0.001

0.001

>>> float('+1E6') # 10的6次幂

1000000.0

>>> float('-Infinity') # 无穷小

-inf

>>> float('-inf') + 100 # 负无穷小加100仍等于负无穷小

-inf

>>> float('inf') # 无穷大

inf

>>> float('NaN') # NaN,代表非数字

nan

写笔记

咨询

您的电子邮箱地址不会被公开。