python简单的函数定义和用法实例
发布时间:2025-05-22 23:04:05 发布人:远客网络
一、python简单的函数定义和用法实例
python简单的函数定义和用法实例
这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
这里定义了一个温度转换的函数及其用法。
temp= int(input("Enter a temperature:"))
scale= input("Enter the scale to convert to:")
converted= convertTemp(temp, scale)
print("The converted temp is:"+ str(converted))
希望本文所述对大家的Python程序设计有所帮助。
二、毕业生必看Python函数式编程
学Python都应该了解的函数式编程
Programming)或者函数程序设计,是
它将计算机运算视为数学上的函数运算,
并且避免使用程序状态以及变量对象。
以上只是简单的函数式编程的概念,我们
在Python中,函数式编程主要由几个函
数的使用构成:lambda(), map(),
lambda函数只能有一个表达式,而不需
要写return来返回函数的值。当然,匿
名函数也是一个函数对象,同样可以把匿
也可以把匿名函数作为返回值来返回
可以看出,变量f就是一个lambda函数
类型,需要使用f()来调用该函数。
map函数接收两个参数,一个是函数,
个是Inter able(可迭代序列), map
函数依次将函数作用到序列的每个元素,
并把结果作为新的Inter able返回。
一个简单的列表解析,把列表a的每个元
素都加2,用map函数可以写为:如图
由于map函数返回的是一个惰性序列,
需要通过list()等函数来调用它。
虽然上面的代码看起来比直接写for循环
要复杂,但是当数据量很大的情况下,
Python的for效率就不是很高了,而
map的效率是可以接近C语言的。同时
它和map有些像,不过map是用于逐
一遍历,而reduce函数是用来递归计算
对列表a的各个元素依次求和,再看一个
它同样接收一个函数和一个序列,
filter()把传入的函数依次作用于每个元
素,然后根据返回值是True还是False
使用这些函数,不仅可以让我们的代码更加简洁,
同时在大数据量或者计算密集时,能够大大提高效率。
三、Python和lisp在函数式编程上有哪些异同
自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中的条件调用进行短路处理
# Normal statement-based flow control
# Equivalent"short circuit" expression
(<cond1> and func1()) or(<cond2> and func2()) or(func3())
# Example"short circuit" expression
>>> def pr(s): return s
>>>(x==1 and pr('one')) or(x==2 and pr('two')) or(pr('other'))
>>>(x==1 and pr('one')) or(x==2 and pr('two')) or(pr('other'))
我们的表达式版本的条件调用看上去可能不算什么,更象是个小把戏;然而,如果我们注意到lambda算子必须返回一个表达式,这就更值得关注了。既然如我们所示,表达式能够通过短路包含一个条件判断,那么,lambda表达式就是个完全通用的表达条件判断返回值的手段了。我们来一个例子:
>>> namenum= lambda x:(x==1 and pr("one")) \
前面的例子已经表明了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()使用那个作为参数传递给它的函数,对一个列表中的所有项进行”求值“,返回一个由所有能够通过那个函数测试的项组成的经过遴选后的列表。
我们经常也会把函数对象传递给我们自己定义的函数,不过一般情况下这些自定义的函数就是前文提及的内建函数的某种形式的组合。
通过组合使用这三种函数式编程内建的函数,能够实现范围惊人的“执行流程”操作(全都不用语句,仅仅使用表达式实现)。