函数的意义

在生活中,试想一下我们用手洗衣服的时候,我们需要接水,放入脏衣服,放入洗衣液,然后一件件用手搓,每次洗衣服的时候都要这样干,很累。于是有人发明了洗衣机。就是将洗衣服的的操作封装成了一个机器。那么每次洗衣服的时候,我们只需要放入脏衣服,洗衣液按下启动键就可以了。它会自动帮我们完成洗衣服的这个操作。而且以后我凡是要洗衣服,我都可以让洗衣机去做。

在编写程序的世界里,我们也会经常去重复的去做一些复杂的操作,如果每次都去用代码去实现这些复杂的操作很麻烦。因此我们也需要类似于洗衣机这样的东西把这些复杂的操作封装起来,可以供我们反复的使用。代码的重用在程序中很重要,在这一章里,你将会学到Python的多种重用代码的方式。

我们知道圆得面积计算公式为:S = πr2

当我们知道半径 r 的值时,就可以根据公式计算出面积。假设我们需要计算 3 个不同大小的圆的面积:

# 计算 3 个不同大小的圆的面积:
r1 = 12.34
r2 = 9.08
r3 = 73.1
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3
print("{},{},{}".format(s1,s2,s3))

在上面这种情况中,代码出现了有规律得重复,每次写 3.14 * x * x 不仅很麻烦,如果要把3.14换成3.1415926 得时候,上面计算表达式里面都需要修改。

有了函数,我们就不再每次写 s = 3.14 * x * x,而是写成更有意义的函数调用 s = area_of_circle(x),而函数 area_of_circle 本身只需要写一次,就可以多次调用。

def area_of_circle(r):"""计算圆面积的函数@param r 圆的半径@return 圆的面积"""return 3.14 * r * r# 计算圆面积时,可以调用函数,并传入圆的半径
s1 = area_of_circle(12.34)  # 计算半径为12.34的圆的面积
s2 = area_of_circle(9.08)
s3 = area_of_circle(73.1)

函数可以提高我们代码的复用性,节省代码量,同时也方便我们后期对代码维护。可以大大提高开发效率。

定义函数

在 Python 中,定义一个函数要使用 def 语句,一个函数有三个部分组成:名字,参数,函数体。

def 函数名 (参数1...) :    函数体

编写一个专用来向指定对象打招呼的函数

# 定义函数
# say_hello 函数名
# other_name 函数的参数 (需要打招呼的对象)
def say_hello(other_name):  # 以下称为函数体(函数中的代码内容)print("hello %s !!" % other_name)print("今晚要不要一起赏个月?") 

调用函数:

# 函数调用
say_hello("苍姐姐")
print("#################")
# 函数调用
say_hello("赵丽颖") 

函数的参数

当我们在设计函数的时候,我们需要思考,完成这个函数所要包含的功能时,哪些东西是变化的,可以把这些变化的东西定义成函数的参数,写在函数名后面的括号里。

我有很多个老婆,今天要带出去介绍给大家认识,让大家知道她们的姓名,年龄,爱好等。我需要设计一个自我介绍的函数,分别介绍她们。在这里,姓名,年龄,爱好每个老婆都是不一样的,是变化的,我们可以把这些定义成函数的参数。

def introduce(name,age, like):""":自我介绍的方法:name 姓名:age 年龄:like 爱好"""print("大家好,我是攀哥的老婆",name,"今年",age,"喜欢",like)print("我很喜欢攀哥~你们不要和我抢~~")在设计函数时,可以将完成函数需要依赖的变量定义成参数,参数可以写任意多个。introduce("赵丽颖",18,"跳舞")
introduce("小苍姐姐",18,"打扑克")
introduce("刘亦菲",18,"唱歌")

函数的返回值

通常情况下我们需要函数执行完毕之后,给我们一个最终的结果。在程序中我们可以拿到这个结果,继续去参与其他工作。这个结果我们称为返回值。

在定义函数时,可以通过return语句,返回函数处理的最终结果。比如在开篇,求圆的面积的函数中,我们传入了一个圆的半径,我们希望函数帮我们根据这个半径计算一下圆的面积,并将计算结果告诉我们。我们就是使用的return 返回的计算结果。

刘备三顾茅庐案例:

def get_km(count):   # count 刘备访问茅庐的次数if count == 1:return "先生远游未归"elif count == 2:return "吾非孔明,乃孔明之弟也"elif count == 3:return "大梦谁先觉,平生我自知,吾乃孔明"else:return "请按照剧本来"

刘备每次调用拜访孔明的函数时,会获得不同的结果,每个结果都是通过return返回给调用的地方。(return 的结果,是会返回给调用的位置,在哪里调用,结果就返回到哪里)。

for x in range(1, 5):result = get_km(x)print("第%d次造访茅庐:%s" % (x, result))

在上面的for循环中,x会依次取1,2,3 。get_km(x)会将对应的x值传给函数的count参数中,然后函数中根据count的去执行if语句。如果count==1,会return “先生远游未归”。

return会意思是将结果返回。那返回到哪里去了呢?实际上是返回到了调用的位置。也就是在哪里调用的函数,那么执行函数的最终结果就会返回到哪里。比如在循环中,result = get_km(x) 在这里我们调用get_km函数,并传入了参数x。那么执行函数最终得到的结果,会返回到这里。然后赋值给了result。也就是说result中最终存放了执行get_km(x)这个函数得到的结果。

有返回值的函数,在调用后,我们都可以使用一个变量去接收函数返回的结果。

None值

在Python中有一个值称为None,它表示没有值。None是NoneType数据类型的唯一值。其他编程语言可能这个值为null或者undefined。就像布尔值True和False一样,None必须首字母大写。

如果你希望变量中存储的东西不会与一个真正的值混淆,这个没有值的值可能就有用。有一个使用None的地方就是print()的返回值。print() 函数在屏幕上显示文本,但它不需要返回任何值。这个len()或input()不同。但既然所有函数都需要求值为一个返回值,那么print()就返回None。

say = print("社会我攀哥,人狠话不多")
print(say==None)

运行效果:

社会我攀哥,人狠话不多True

实际上,对于所有没有return语句的函数定义,Python都会在末尾加上return None。这个类似于while 或 for 循环隐式的以continue语句结尾。而且,如果使用不带值的return语句(就只写return关键字),那么就返回None。

匿名函数(lambda)

匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。在通常情况下,这样的函数只使用一次。在Python中,使用lambda表达式创建匿名函数。其语法格式如下:

result = lambda 参数列表:expression

参数说明如下:

  1. result:用于调用lambda表达式

  2. 参数列表: 可选参数,用于指定要传递的参数列表,多个参数间用“,”逗号进行分隔。

  3. expression: 必选参数,用于指定一个实现具体功能的表达式,如果有参数,那么在该表达式中将应用这些参数。

我们来看一个普通的计算圆面积的函数:

import math
def circlearea(r):result = math.pi*r*rreturn resultr = 10
print("半径为",r,"的圆面积为:",circlearea(r))

修改成lambda表达式代码如下:

import math
r = 10
# r 为匿名函数的参数
# :math.pi*r*r 这个是匿名函数具体要执行的内容
result = lambda r:math.pi*r*r
# 这里的result就相当于是一个函数名了
print(result)  # 会打印<function <lambda> at 0x0000025B94BB01F0>
print("半径为",r,"的圆面积为:",result(r))  # result(r) 调用lambda表达式,并传入参数r

更多学习资源,尽在公众号“墨轩学习网”

【Python系列课】:Python中的函数相关推荐

  1. Python扩展库numpy中where()函数的三种用法

    第一种用法:只给where()函数传递一个数组作为参数,返回其中非0元素的下标. 第二种用法:给where()函数传递一个包含True/False值的数组,返回该数组中True值的下标,结合numpy ...

  2. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  3. Python如何在main中调用函数内的函数

    Python如何在main中调用函数内的函数 一般在Python中在函数中定义的函数是不能直接调用的,但是如果要用的话怎么办呢? 一般情况下: def a():#第一层函数def b():#第二层函数 ...

  4. 1900页Python系列PPT分享五:函数设计与应用(134页)

    总体说明:本套PPT共约1900页,包含董付国老师Python系列图书<Python程序设计基础>(2017年7月第5次印刷).<Python程序设计(第2版)>(2017年9 ...

  5. python反余弦函数_Python代码中acos()函数有什么功能呢?

    摘要: 下文讲述Python代码中acos()函数的简介说明,如下所示: acos()函数功能 用于计算出x的反余弦弧度值 acos()函数语法 math.acos(x) ---------参数说明- ...

  6. python search用法,Python-re中search()函数的用法详解(查找ip)

    1.首先来看一下search()和find()的区别 import re s1 = "2221155" #search 字符串第一次出现的位置 print(re.search(&q ...

  7. python怎么退出help_python中help函数的退出方法

    python中help函数的退出方法 发布时间:2020-09-03 09:45:19 来源:亿速云 阅读:84 作者:小新 小编给大家分享一下python中help函数的退出方法,希望大家阅读完这篇 ...

  8. python map用法_Python中 map()函数的用法详解

    python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...

  9. python function at 0x00000_Python 中的函数装饰器和闭包

    本文是<流畅的Python>第7章的学习笔记. 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另 ...

  10. python信号采样_python中resample函数实现重采样和降采样代码

    函数原型 resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='s ...

最新文章

  1. java中上传文件有哪些框架,Spring MVC系列教材 (八)- SPRING MVC 上传文件
  2. 关系型数据库(RDBMS)优势
  3. 小小总结一下目前的财政
  4. 【Kafka】kafka AdminClient API
  5. kafka python教程_由Flink与Kafka实践探究Kafka的两个问题
  6. 网络安全技术要从娃娃抓起
  7. Vi的多文件间的复制和文本替换
  8. android图片视频图片封装,详解android 视频图片混合轮播实现
  9. pythonpdf使用教程_Python基础学习教程:Python玩转PDF各种骚操作大全
  10. VB 源码 产生任意数之间随机数,支持负数
  11. 思科模拟器5506防火墙配置_租用电信线路,三地网络互联的配置——Cisco、Hillstone路由配置...
  12. Loongson2f_龙芯逸珑8089A_扩容硬盘安装debian8(sd卡扩容)
  13. 打破汽车零部件企业供应链壁垒,数商云SCM供应链系统实现一体化采购协同
  14. Docker Swarm secrets
  15. 厦大考研计算机学硕,21厦大考研:专硕VS学硕,怎么选才不翻车?
  16. 禅道开源版用户手册_禅道的安装与使用指南
  17. [Unity][Crowd]学习人群模拟资源分享以及相关的问题
  18. mysql8 vs postgresql_“王者对战”之 MySQL 8 vs PostgreSQL 10
  19. getenv、setenv函数
  20. 基于学术研究下载NOAA探空数据资料的详细步骤

热门文章

  1. 关于Ajax中的contentType,dataType
  2. 工程师讲解 | T507实现SPI转CAN 全过程
  3. 10个有趣的 Python 高级脚本,建议收藏!
  4. 最热门技术岗位洗牌,机器学习不再高居榜首
  5. js-base64插件 实现路径url的加密解密
  6. Linux下配置jdk11
  7. 七、Mysql数据库的数据类型和表属性
  8. 振动论坛---MATLAB
  9. 物理cpu和逻辑cpu的区别
  10. 新概念英语1册81课