189 8069 5689

python中精简函数 python代码

请问这段Python代码如何用匿名函数简化?

楼主你好!

创新互联致力于互联网网站建设与网站营销,提供网站设计制作、网站建设、网站开发、seo优化、网站排名、互联网营销、小程序定制开发、公众号商城、等建站开发,创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。

要解决这道题目并不难,只需要理解匿名lambda是如何使用的便可;

“lambda 表达式1:表达式2”其实就是定义了一个函数,传入表达式1的参数,按表达式2的形式返回,因此,该语句也就返回了一个函数对象,请看如下代码:

def demo(x):

return x*x

lambda_demo = lambda x:x*x

以上代码中demo函数和lambda_demo是等效的,都是可以调用的对象,传入一个参数,返回这个参数的平方。

那这题就不难解了,其实做的事情就是定义了两层:

1)第一层函数是传入一个参数,返回第二层定义的函数对象

2)第二层是不传入参数,返回第一层参数的平方

套用lambda的定义,便不难解出正确答案:

# -*- coding: utf-8 -*-

def count():

'''这是原函数'''

def f(j):

def g():

return j*j

return g

fs = []

for i in range(1, 4):

fs.append(f(i))

return fs

def edited_count():

'''这是修改后的函数'''

fs= []

for i in range(1, 4):

fs.append((lambda x:(lambda :x*x))(i))

return fs

def evol_count():

'''更加pythonic的写法'''

return [(lambda x:(lambda :x*x))(i) for i in range(1,4)]

'''一行式写法'''

one_line_count = lambda :[(lambda x:(lambda :x*x))(i) for i in range(1,4)]

再分析一下楼主两段错误代码:

第一段的报错原因在于,楼主混淆了变量的有效空间,lambda中的变量只是形式,并不会对外部变量进行录入,所以在f函数中传入的j,并不会记录在lambda中,因此,在最后执行的时候,列表中的三个函数是第一段代码段中的demo函数,需要楼主传入一个参数,再返回你传入参数的平方。

第二段代码看代码逻辑应该是正确的,这个修改发生了什么呢?其实你定义的lambda函数形式变成了这样:

def demo(x=1):

return x*x

也就是变相的把变量的值给定义了,出错的原因应该是你在调用的时候很可能是以这样的形式调用:count()() 才导致了报错。

希望楼主能够深入理解lambda以及python的命名空间,今后遇到这样的题目便能迎刃而解了。

望采纳,谢谢!~

Python中的匿名函数——lambda函数

在Python中,lambda函数是一个简单的匿名函数。该函数没有函数名,它可以有多个参数,但函数只由一个表达式构成。

lambda函数具体的格式如下:

lambda 参数 : 表达式

其中, lambda 是关键字, 参数 是函数的参数,可以有0至多个。冒号后面是表达式,也是该函数中的唯一的表达式,lambda函数会返回该表达式的返回值。

我们来看一个具体的例子。

在上述代码中,number1, number2是lambda函数的参数,number1**2+number**2是函数的表达式,该函数返回number1, number2两个数的平方和。

上述代码创建了一个lambda函数后将其赋值给变量sum_square, 在print函数中通过sum_square来调用这个lambda函数。

上述的lambda函数完全可用标准的函数来实现,我们可以将上述代码改写成下面的代码。

在代码中,定义了函数sum_square,该函数包含两个参数,并执行一条语句并将该语句的执行结果作为函数返回值。通过上述代码可以帮助我们更直观地理解lambda函数。

lambda函数的可读性较差,那么为什么要有这样奇怪的匿名函数呢?这个要从lambda的使用场合说起。我们来看下面的代码。

上述代码定义了一个数值列表,调用python的内置函数filter来生成一个新的迭代器。 filter函数的第一个参数为一个函数,用于决定过滤的方法;第二个参数为一个可迭代的对象如列表、集合等。filter函数返回一个新的迭代器, 用于获得满足第一个函数为真的所有元素。在上述代码中,我们给filter传递的第一个参数是一个匿名函数:lambda number:number%3==0, 该函数在一个数整除3时为True,否则为False. filter函数会创建一个新的迭代器,通过调用上述匿名函数来判断该元素是否满足条件,得到所有3的倍数的数。

当然,上述代码也可以使用正常的函数方式来实现,如下所示:

我们可以看到,所有匿名函数的功能都可以通过标准函数来实现。匿名函数常在调用其它函数(如filter, map等)时作为参数使用。使用匿名函数可以使代码更为精简。匿名函数主要用于完成简单的任务,如果匿名函数过于复杂,会导致可读性较差,调试起来也比较困难,因此,强烈不建议使用lambda写天书般的代码。总之,要根据实际情况决定是否使用匿名函数。

Python中的常用内置函数有哪些呢?

abs() divmod() input() open() staticmethod()

all() enumerate() int() ord() str()

any() eval() isinstance() pow() sum()

basestring() execfile() issubclass() print() super()

bin() file() iter() property() tuple()

bool() filter() len() range() type()

bytearray() float() list() raw_input() unichr()

callable() format() locals() reduce() unicode()

chr() frozenset() long() reload() vars()

classmethod() getattr() map() repr() xrange()

cmp() globals() max() reverse() zip()

compile() hasattr() memoryview() round() __import__()

complex() hash() min() set()

delattr() help() next() setattr()

dict() hex() object() slice()

dir() id() oct() sorted()


当前标题:python中精简函数 python代码
链接分享:http://cdxtjz.com/article/dosesgh.html

其他资讯