Python第六章-函数01-函数的概念和使用
函数
为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数。
可以这么说,对于任何的编程语言,函数都是一个非常重要的概念。
python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数编程语言中的优秀特性。
本章内容非常重要!
一、 函数的概念和作用
1.1什么是函数
函数就是把完成特定功能的一段代码封装起来。给该功能起一个名字(函数名)。
哪里需要实现该功能就在哪里调用该函数。
函数可以在任何时间任何地方调用。
所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用。
1.2 函数的作用
- 函数是能完成某一功能的代码段
- 函数是可重复执行的代码段
- 函数方便管理和维护,便于复用
二、函数的使用
2.1 函数的使用步骤
- 定义函数:封装独立的功能
- 调用函数:就是执行函数。(调用几次就函数执行几次)
2.2 函数的定义
使用函数之前一定要先定义。
python 的函数定义非常简单。
函数定义语法:
def 函数名([形参列表]):
函数体
说明:
def
是定义函数的关键字。(define function)函数名是这个函数的符号(引用),调用这个函数的时候我们需要函数名。
函数名后的圆括号是必须的。
形参列表表示我们可以定义多个形参,接受函数调用时传递过来的参数。形参不是必须的,根据需要决定是否需要定义形参
圆括号后面必须有一个冒号
:
.新起一行,必须有缩进来定义函数体。函数体就是函数每次调用的时候都会执行的代码。
示例代码:
# 定义无参函数
def show():
print("我是函数内的代码1")
print("我是函数内的代码2")
# 定义有参函数,形参在函数内部可以作为普通变量使用。
def show1(a, b):
print(a + b)
定义函数名称的规则:
- 可以由字母,下划线,和数字组成
- 数字不能开头
- 不能与关键字重名
- 多个单词小写使用下划线拼接:get_sum
2.3 函数的调用
定义函数的目的是为了让函数做一些事情。
但是函数如果仅仅定义不会自己去执行。
时刻记住一句话,函数只有被调用才能被执行!
所以想要函数执行,必须显示的去调用函数。
在使用函数的时候,一定要保证声明在前,调用在后!
2.3.1 简单函数调用
函数调用非常简单,只需要: 函数名(实参)
即可。当然如果函数定义的时候没有形参,则就不用实参。
def show():
print("我是函数内的代码1")
print("我是函数内的代码2")
show() # 调用函数
show() # 一个函数可以多次调用。每次调用都会执行一次函数体的代码
show()
2.3.2 带形参的函数调用
函数声明的时候,在括号内的是形参。
那么在调用函数的时候应该传递相同属性的参数过去,函数调用的时候的参数,叫做实参!
形参和实参的个数必须匹配,但是有一种情况除外,后面再说。
def add(a, b):
print(a + b)
add(2, 3)
add(20, 3)
2.4函数的返回值
我们定义的函数可以完成一个的功能,很多情况下,功能完成之后需要给函数调用者返回一些数据,这些返回的数据就需要用到函数的返回值功能。
返回值就是函数执行完毕后返回给调用处的结果
2.4.1.return
的使用
比如:定义一个函数可以实现两个数的相加,然后返回给调用者计算的结果!
def add(a, b):
pass
n = a + b
return n
print(add(3, 5))
print(add(30, 5))
说明:
在函数内任何地方都可以出现
return
。return
的作用就是结束函数,并把return
后面的值返回给调用者。一旦碰到
return
,不管后面有多少代码,不管是否处于循环中,函数都会立即结束。如果整个函数内部没有出现
return
,则函数会自动执行到函数体最后一行代码。如果函数体内没有
return
,则函数运行结束的时候自动返回None
return
后面也可以不跟返回值,这种情况下主要是为了结束函数,也会返回None
(return None可以简写为return。)
案例1:一个给定的数,判断是否为质数
分析:定义一个函数,这个给定的数通过参数传递,最后结果:是否为质数,通过返回一个bool
值给调用者。质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
def is_prime(num):
for i in range(2, num):
if num % i == 0:
return False
return True
num = int(input("请输入一个整数:"))
if is_prime(num):
print("%d 是质数!" % num)
else:
print("%d 不是质数!" % num)
案例2:计算输入的任意两个数之间所有的质数的和
分析:刚才已经定义了判断一个是否为质数,现在需要再定义一个可以计算两个数之间所有的质数的和的函数,并把计算结果返回给调用者。
def is_prime(num):
for i in range(2, num):
if num % i == 0:
return False
return True
def add_prime(num1, num2):
sum = 0
for num in range(num1, num2+1):
if is_prime(num):
sum += num
return sum
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第2个整数:"))
print("%d 到 %d 的之间所有的质数的和是:%d" % (num1, num2, add_prime(num1, num2)))
2.4.2.返回多个值
使用return
一次只能返回一个值。
有些场景下,我们需要返回多个值。这种情况下我们我们可以把返回值的封装到list
或tuple
中,接受者拿到这个list
或tuple
直接解包就可以使用了。
最好封装在tuple
中,因为tuple
是不可变的, 所以效率比较高。
def foo(x):
return x ** 2, x ** 3, x ** 4
x = 4
a, b, c = foo(x)
print("%d 的平方是:%d, 3次方式:%d, 4次方是:%d" % (x, a, b, c))
2.5 文档注释
以前我们使用 #
来我们的代码添加注释,只使用单行注释。
我们定义了一个好函数,函数的描述等信息也应该让调用者很容易获取到,这个时候就用到文档注释。
文档注释将来可以直接生成 api
文档方便阅读。
如果要给函数添加文档注释,直接在函数内部的首行放置一个字符串即可。字符串可以是单行的(" "或者' '
),也可以是是多行的(""" """ 或 ''' '''
)。
但是一般使用多行字符串来定义
作为国际惯例:
- 注释的第一行,一般是对函数的简述。
- 然后一个空行。
- 然后开始进行详细描述函数功能等。
def foo(x):
"""该函数是对参数做一些计算
计算参数的多个次幂
:param x: 要计算次幂的数字
:return: 返回2次幂、3次幂、4次幂组成的元组
"""
return x ** 2, x ** 3, x ** 4
print(foo.__doc__) # 打印函数的文档注释
Python第六章-函数01-函数的概念和使用的更多相关文章
- Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- Python第六章-函数06-高阶函数
函数的高级应用 二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本 ...
- Python第六章 面向对象
第六章 面向对象 1.面向对象初了解 面向对象的优点: 1.对相似功能的函数,同一个业务下的函数进行归类,分类 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...
- Python第六章-函数04-递归函数和拉姆达表达式
五.递归函数 什么叫递归(recusive)? 你拿两个镜子互相面对着, 然后去看镜子, 会发现每个镜子中很多个镜子, 层层的嵌套, 无穷尽, 这就是一种递归! 从前有坐山, 山里有座庙, 庙里有个老 ...
- Python第六章-函数02-函数的作用域
函数 三.作用域规则 有了函数之后,我们必须要面对一个作用域的问题. 比如:你现在访问一个变量,那么 python 解析器是怎么查找到这个变量,并读取到这个变量的值的呢? 依靠的就是作用域规则! 3. ...
- Python第六章-函数05-迭代器&生成器
python作为一个既面向对象,又支持函数式编程的语言,函数的使用方面有很多特点. 比如:闭包,装饰器,迭代器等 函数的高级应用 容器:生活中常见的容器有哪些?袋子,盆子,水杯,书包,铅笔盒... 容 ...
- python3 第二十六章 - 内置函数之Number相关
数学函数 函数 返回值 ( 描述 ) 实例 abs(x) 返回数字的绝对值,如abs(-10) 返回 10 print(abs(-10)) =======输出:====== 10 ceil(x) 返回 ...
- Head first python前六章小结
看这本Head first python已经有十几天了,到第七章开始讲Web开发.移动应用开发,后半年我主要是想往后端的方向发展,所以这本书暂时告一段落.这篇博客没有太多的注释,主要是内容比较简单,只 ...
随机推荐
- 苹果会放弃iPhone吗?
苹果会放弃iPhone吗?一般来讲,这是一个相当白痴的问题,苹果放弃iPhone的概率比唐僧放弃取经的概率要低20倍.前段时间回老家,正在学习英语的小侄子问我:"叔叔,苹果用英语怎么说呀? ...
- Hi3518_SDK
第一章 Hi3518_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章 首次安装SDK 1.Hi3518 SDK包位置 在"Hi3518_V10 ...
- js获取当前日期是一年中的第几天
js获取当前日期为一年中的第几天 const currentYear = new Date().getFullYear().toString(); // 今天减今年的第一天(xxxx年01月01日) ...
- js判断PC端还是移动端的代码小坑
我在写官网的时候做了pc和移动端两个,在通过网上查找了这样的代码,看着完全没问题,等放进去页面中后,PC端页面一直刷新,根本停不下来,找了类似js还是同样的问题.通过不断尝试后才发现,问题就是多了一行 ...
- safari坑之 回弹
博客地址: https://www.seyana.life/post/20 今天在使用safari浏览博客的时候, 发现在拉至顶部并产生回弹之后,头部导航隐藏了, 除非在上拉的时候,刚好达到顶部而不超 ...
- Yuchuan_Linux_C编程之六 Makefile项目管理
一.整体大纲 二.makefile的编写 一个规则 两个函数 三个变量 1. 一个规则 三要素:目标, 依赖, 命令 目标:依赖 命令: 第一条规则是用来生成终 ...
- springmvc与swagger2
首先呢我们导入相关的jar包文件 为了方便copy我copy一份 <!-- 导入java ee jar 包 --> <dependency> ...
- 看过无数Java GC文章,这5个问题你也未必知道!
看过无数Java GC文章,这6个问题你也未必知道! 读者朋友们可能已经看过太多关于Java垃圾回收相关的文章,如果没有,墙裂安利大家看下面这篇: 看完这篇垃圾回收,和面试官扯皮没问题了 本文不再重复 ...
- .net core WebAPI+EF 动态接收前台json,并动态修改数据库
用API开发的人都知道,常用的后台接收参数就是建个DTO,然后前台把这个DTO传过来.后台再更新,例如如下例子: public async Task<IActionResult> PutM ...
- django 从零开始 13 返回文件
进行一些操作返回文件,flask和django差不多,基本都是在返回response 并且对其中的返回头部写入返回文件信息 # image def image(request): f = open(r ...