Python 实用小技巧(1)

2021-06-24 10:04:38 浏览数 (1)

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.

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, /) 在全局变量和局部变量上下文中执行给定的源。

代码语言:javascript复制
>>> 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 当成有效的表达式来求值并返回计算结果取出字符串中内容

代码语言:javascript复制
>>> s = "10   40   50"
>>> eval(s)
100

evalexec区别: 1、execeval语句的主要区别是,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)的参数列表是一样的。

代码语言:javascript复制
a,b
a=1,b=2
*args
**kwargs
a,b=1,*args
None
....

expression是一个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。

代码语言:javascript复制
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, ...)

function -- 函数 iterable -- 一个或多个序列

代码语言:javascript复制
>>> squares = map(lambda x:x**2,range(5))
>>> print(lsit(squares))
[0,1,4,9,16]

-- 数据STUDIO --

0 人点赞