python内置函数(一)

283 阅读2分钟

1.序列逻辑判断类函数

1.1 all()函数

对序列的全部成员进行逻辑与判断,并返回所有成员逻辑判断的结果。当且仅当所有成员结果均为真时其结果才为True,否则即为False

1.1.1 序列所有成员均为真的情形

lst = [True, 1, [1], {1}, {1:2}, (1,2), 'a']
print(all(lst))

result:

True

1.1.2 存在序列成员为假的情形

lst = [True, 0, [1], {1}, {1:2}, (1,2), 'a']
print(all(lst))

result:

False

1.2 any()函数

对序列的全部成员进行逻辑或判断,并返回所有成员逻辑判断的结果。当且仅当所有成员结果均为假时其结果才为False,否则即为True

1.2.1 序列所有成员均为真的情形

lst = [True, 1, [1], {1}, {1:2}, (1,2), 'a']
print(any(lst))

result:

True

1.2.2 存在序列成员为假的情形

lst = [True, 0, [1], {1}, {1:2}, (1,2), 'a']
print(any(lst))

result:

True

1.2.3 序列所有成员均为假的情形

lst = [False, 0, [], {}, dict(), (), '']
print(any(lst))

result:

False

可以这样说,当all()的结果为True时,any()的结果一定为True。同样地,当any()的结果为False时,all()的结果也一定为False

2.源码执行类函数

2.1 eval()函数

接受一个源码表达式字符串,并在当前上下文执行后返回表达式的值,其语法格式为:

eval(expression, globals=None, locals=None)
  • expression:这个参数是一个字符串,代表要执行的语句 。该语句受后面两个字典类型参数 globals 和 locals 的限制,只有在 globals 字典和 locals 字典作用域内的函数和变量才能被执行。
  • globals:这个参数管控的是一个全局的命名空间,即 expression 可以使用全局命名空间中的函数。如果只是提供了 globals 参数,而没有提供自定义的 builtins,则系统会将当前环境中的 builtins 复制到自己提供的 globals 中,然后才会进行计算;如果连 globals 这个参数都没有被提供,则使用 Python 的全局命名空间。
  • locals:这个参数管控的是一个局部的命名空间,和 globals 类似,当它和 globals 中有重复或冲突时,以 locals 的为准。如果 locals 没有被提供,则默认为 globals。
a = 2
b = 3
print(eval('a*b'))

result:

6

2.2 exec()函数

作用和eval()函数类似,返回值为None,其语法格式和eval()函数一样:

eval(expression, globals=None, locals=None)
a = 2
b = 3
m='c=a*b'
print(f'm=={exec(m)}')
print(f'c=={c}')

result:

m==None
c==6

这里要注意,这2个函数具有一定的安全隐患。,因为它们赋予了本来是安全无害的字符串以攻击力,一行字符串就可能给整个程序或者系统带来很大的影响。

例如:

"os.system('rm -rf /')"这一句可以把操作系统里面的文件全部删除。

"import('os').system('dir')"会获得当前目录文件。