1、执行字符串表示的代码
将字符串编译成python能识别或可执行的代码,也可以将文字读成字符串再编译。
代码语言:javascript复制>>> s = "print('Life is short. I use Python.')"
>>> r = compile(s,"<string>", "exec")
>>> print(r)
<code object <module> at 0x00000272A9721B70, file "<string>", line 1>
>>> exec(r)
Life is short. I use Python.
代码语言:javascript复制compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) 将源代码编译成可以由exec()或eval()执行的代码对象。 源代码(
source
)可以表示``Python`模块、语句或表达式。 文件名(filename
)将用于运行时错误消息。 模块(mode
)的模式必须是'exec'
用于编译模块;'single'
用于编译(交互式)语句,或'eval'
来编译表达式。exec(source, globals=None, locals=None, /) 在全局变量和局部变量上下文中执行给定的源。
>>> s = "input('请输入您的密码:')"
>>> r = compile(s,"<string>", "single")
>>> print(r)
<code object <module> at 0x00000272A97CF6F0, file "<string>", line 1>
>>> exec(r)
请输入您的密码:
代码语言:javascript复制>>> s = "input([i for i in range(10)])"
>>> r = compile(s,"<string>", "exec")
>>> print(r)
<code object <module> at 0x00000272A96DED20, file "<string>", line 1>
>>> exec(r)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2、计算字符串表示的表达式
将字符串 str
当成有效的表达式来求值并返回计算结果取出字符串中内容
>>> s = "10 40 50"
>>> eval(s)
100
eval
与exec
区别: 1、exec
与eval
语句的主要区别是,exec
把字符串转化成一个python
代码执行,而eval
从一个表达式里返回值。 2、exec
没有返回值,eval
有返回值
代码示例:
代码语言:javascript复制>>> eval("2 3")
5
>>> exec("a=2 3")
>>> a
5
>>> eval("2 3")
5
>>> exec("print(1)")
1
3、lambda匿名函数
代码语言:javascript复制lambda argument_list:expersion
argument_list
是参数列表,它的结构与Python
中函数(function
)的参数列表是一样的。
a,b
a=1,b=2
*args
**kwargs
a,b=1,*args
None
....
expression
是一个关于参数的表达式,表达式中出现的参数需要在argument_list
中有定义,并且表达式只能是单行的。
1
None
a b
sum(a)
1 if a >10 else 0
[i for i in range(10)]
...
用法
(1)直接赋给一个变量,然后再像一般函数那样调用
代码语言:javascript复制>>> s = lambda x,y,z: x*y*z
>>> s(1,2,3)
6
也可以在函数后面直接传递实参。
代码语言:javascript复制>>> (lambda x: x**2)(3)
9
(2)字符串联合,有默认值,也可以用x=(lambda...)这种格式
代码语言:javascript复制>>> s=(lambda x='Aoo',y='Boo',z='Coo': x y z)
>>> print(s('Eoo'))
>>> print(s(y='Eoo'))
EooBooCoo
AooEooCoo
(3)将lambda函数作为参数传递给其他函数
比如说结合map、filter、sorted、reduce等一些Python内置函数使用。
4、过滤器
在函数中设定过滤条件,迭代元素,保留返回值为True 的元素:
代码语言:javascript复制>>> f = filter(lambda x: x>10,[i for i in range(1,50,3)]
>>> print(f)
<filter at 0x272a971cd08>
>>> list(f)
>>> [11, 45, 13]
filter(function or None, iterable) --> filter object 返回一个迭代器,为那些函数或项为真的可迭代项。如果函数为None,则返回为真的项。
5、map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
代码语言:javascript复制map(function, iterable, ...)
代码语言:javascript复制
function
-- 函数iterable
-- 一个或多个序列
>>> squares = map(lambda x:x**2,range(5))
>>> print(lsit(squares))
[0,1,4,9,16]
-- 数据STUDIO --