
正文
关于python中函数四要素的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python和lisp在函数式编程上有哪些异同
Python内在的函数式功能
自Python 1.0起,Python就已具有了以上所列中的绝大多数特点。但是就象Python所具有的大多数特性一样,这些特点出现在了一种混合了各种特性的语言 中。 和Python的OOP(面向对象编程) 特性非常象,你想用多少就用多少,剩下的都可以不管(直到你随后需要用到它们为止)。在Python 2.0中,加入了列表解析(list comprehensions)这个非常好用的”语法糖“。 尽管列表解析没有添加什么新功能,但它让很多旧功能看起来好了不少。
Python中函数式编程的基本要素包括functionsmap()、reduce()、filter()和lambda算子(operator)。 在Python 1.x中,apply()函数也可以非常方便地拿来将一个函数的列表返回值直接用于另外一个函数。Python 2.0为此提供了一个改进后的语法。可能有点让人惊奇,使用如此之少的函数(以及基本的算子)几乎就足以写出任何Python程序了;更加特别的是,几乎 用不着什么执行流程控制语句。
所有(if,elif,else,assert,try,except,finally,for,break,continue,while,def)这 些都都能通过仅仅使用函数式编程中的函数和算子就能以函数式编程的风格处理好。尽管真正地在程序中完全排除使用所有流程控制命令可能只在想参 加”Python混乱编程“大赛(可将Python代码写得跟Lisp代码非常象)时才有意义,但这对理解函数式编程如何通过函数和递归表达流程控制很有 价值。
剔除流程控制语句
剔除练习首先要考虑的第一件事是,实际上,Python会对布尔表达式求值进行“短路”处理。这就为我们提供了一个if/elif/else分支语句的表达式版(假设每个分支只调用一个函数,不是这种情况时也很容易组织成重新安排成这种情况)。 这里给出怎么做:
对Python中的条件调用进行短路处理
Python
# Normal statement-based flow control
if cond1: func1()
elif cond2: func2()
else: func3()
# Equivalent "short circuit" expression
(cond1 and func1()) or (cond2 and func2()) or (func3())
# Example "short circuit" expression
x = 3
def pr(s): return s
(x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))
'other'
x = 2
(x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))
'two'
我们的表达式版本的条件调用看上去可能不算什么,更象是个小把戏;然而,如果我们注意到lambda算子必须返回一个表达式,这就更值得关注了。既然如我 们所示,表达式能够通过短路包含一个条件判断,那么,lambda表达式就是个完全通用的表达条件判断返回值的手段了。我们来一个例子:
Python中短路的Lambda
Python
pr = lambda s:s
namenum = lambda x: (x==1 and pr("one")) \
.... or (x==2 and pr("two")) \
.... or (pr("other"))
namenum(1)
'one'
namenum(2)
'two'
namenum(3)
'other'
将函数作为具有首要地位的对象
前面的例子已经表明了Python中函数具有首要地位,但有点委婉。当我们用lambda操作创建一个函数对象时, 我们所得到的东西是完全通用的。就其本质而言,我们可以将我们的对象同名字”pr”和”namenum”绑定到一起, 以完全相同的方式,我们也也完全可以将数字23或者字符串”spam” 同这些名字绑定到一起。但是,就象我们可以无需将其绑定到任何名字之上就能直接使用数字23(也就是说,它可以用作函数的参数)一样,我们也可以直接使用 我们使用lambda创建的函数对象,而无需将其绑定到任何名字之上。在Python中,函数就是另外一种我们能够就像某种处理的值。
我们对具有首要地位的对象做的比较多的事情就是,将它们作为参数传递给函数式编程固有的函数map()、reduce()和filter()。这三个函数接受的第一个参数都是一个函数对象。
map()针对指定给它的一个或多个列表中每一项对应的内容,执行一次作为参数传递给它的那个函数 ,最后返回一个结果列表。
reduce()针对每个后继项以及最后结果的累积结果,执行一次作为参数传递给它的那个函数;例如,reduce(lambda n,m:n*m, range(1,10))是求”10的阶乘”的意思(换言之,将每一项和前面所得的乘积进行相乘)
filter()使用那个作为参数传递给它的函数,对一个列表中的所有项进行”求值“,返回一个由所有能够通过那个函数测试的项组成的经过遴选后的列表。
我们经常也会把函数对象传递给我们自己定义的函数,不过一般情况下这些自定义的函数就是前文提及的内建函数的某种形式的组合。
通过组合使用这三种函数式编程内建的函数, 能够实现范围惊人的“执行流程”操作(全都不用语句,仅仅使用表达式实现)。
相关问答
Q1: python函数的作用
python函数的作用是:
1、函数其实是把某个功能的代码封装到一个代码块中,用来为某个重复使用的功能做调用的一个代码块,可以称为一个函数的代码封装。可以在自定义函数的小括号中传入多个参数。
2、形参:在定义函数时,小括号中的参数名称。实参:在函数名称的小括号中,传入实际的值代替了形参的这个值。函数可以有返回值(使用return进行返回),也可以没有返回值。
3、形参可以当做函数内部的一个变量使用,往往只在函数内部进行使用,不影响函数外部的相同名称的变量。
4、在函数内部可以返回某个值。直接在函数内部退出来,而不再继续执行函数下面的代码。
更多关于python函数的作用,进入:查看更多内容
Q2: python类和函数的区别
一、主体不同
1、类:是面向对象程序设计实现信息封装的基础。
2、函数:是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。
二、特点不同
1、类:是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
2、函数:分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。
三、规则不同
1、类:实质是一种引用数据类型,类似于byte、short、int(char)、long、float、double等基本数据类型,不同的是它是一种复杂的数据类型。
2、函数:函数必须声明后才可以被调用。调用格式为:函数名(实参)调用时函数名后的小括号中的实参必须和声明函数时的函数括号中的形参个数相同。
参考资料来源:百度百科-函数
参考资料来源:百度百科-类
Q3: python类的四要素
关键字class,类名,英文冒号,代码块。python类是面向对象编程四要素中的一个,它的四要素是关键字class,类名,英文冒号,代码块,其中代码块前是有4个空格的缩进的。
python中函数四要素的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、python中函数四要素的信息别忘了在本站进行查找喔。







