函数

为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数。

可以这么说,对于任何的编程语言,函数都是一个非常重要的概念。

python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数编程语言中的优秀特性。

本章内容非常重要!

一、 函数的概念和作用

1.1什么是函数

函数就是把完成特定功能的一段代码封装起来。给该功能起一个名字(函数名)。

哪里需要实现该功能就在哪里调用该函数。

函数可以在任何时间任何地方调用。

所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用。

1.2 函数的作用

函数是能完成某一功能的代码段

函数是可重复执行的代码段

函数方便管理和维护,便于复用

二、函数的使用

2.1 函数的使用步骤

定义函数:封装独立的功能

调用函数:就是执行函数。(调用几次就函数执行几次)

2.2 函数的定义

使用函数之前一定要先定义。

python 的函数定义非常简单。

函数定义语法:

def 函数名([形参列表]):

函数体

说明:

def 是定义函数的关键字。(define function)

函数名是这个函数的符号(引用),调用这个函数的时候我们需要函数名。

函数名后的圆括号是必须的。

形参列表表示我们可以定义多个形参,接受函数调用时传递过来的参数。形参不是必须的,根据需要决定是否需要定义形参

圆括号后面必须有一个冒号:.

新起一行,必须有缩进来定义函数体。函数体就是函数每次调用的时候都会执行的代码。

示例代码:

# 定义无参函数

defshow():

print("我是函数内的代码1")

print("我是函数内的代码2")

# 定义有参函数,形参在函数内部可以作为普通变量使用。

defshow1(a, b):

print(a + b)

定义函数名称的规则:

可以由字母,下划线,和数字组成

数字不能开头

不能与关键字重名

多个单词小写使用下划线拼接:get_sum

2.3 函数的调用

定义函数的目的是为了让函数做一些事情。

但是函数如果仅仅定义不会自己去执行。

时刻记住一句话,函数只有被调用才能被执行!

所以想要函数执行,必须显示的去调用函数。

在使用函数的时候,一定要保证声明在前,调用在后!

2.3.1 简单函数调用

函数调用非常简单,只需要: 函数名(实参)即可。当然如果函数定义的时候没有形参,则就不用实参。

defshow():

print("我是函数内的代码1")

print("我是函数内的代码2")

show() # 调用函数

show() # 一个函数可以多次调用。每次调用都会执行一次函数体的代码

show()

2.3.2 带形参的函数调用

函数声明的时候,在括号内的是形参。

那么在调用函数的时候应该传递相同属性的参数过去,函数调用的时候的参数,叫做实参!

形参和实参的个数必须匹配,但是有一种情况除外,后面再说。

defadd(a, b):

print(a + b)

add(2, 3)

add(20, 3)

2.4函数的返回值

我们定义的函数可以完成一个的功能,很多情况下,功能完成之后需要给函数调用者返回一些数据,这些返回的数据就需要用到函数的返回值功能。

返回值就是函数执行完毕后返回给调用处的结果

2.4.1.return的使用

比如:定义一个函数可以实现两个数的相加,然后返回给调用者计算的结果!

defadd(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和它本身以外不再有其他因数。

defis_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:计算输入的任意两个数之间所有的质数的和

分析:刚才已经定义了判断一个是否为质数,现在需要再定义一个可以计算两个数之间所有的质数的和的函数,并把计算结果返回给调用者。

defis_prime(num):

for i in range(2, num):

if num % i == 0:

return False

return True

defadd_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是不可变的, 所以效率比较高。

deffoo(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 文档方便阅读。

如果要给函数添加文档注释,直接在函数内部的首行放置一个字符串即可。字符串可以是单行的(" "或者' '),也可以是是多行的(""" """ 或 ''' ''')。

但是一般使用多行字符串来定义

作为国际惯例:

注释的第一行,一般是对函数的简述。

然后一个空行。

然后开始进行详细描述函数功能等。

deffoo(x):

"""该函数是对参数做一些计算

计算参数的多个次幂

:param x: 要计算次幂的数字

:return: 返回2次幂、3次幂、4次幂组成的元组

"""

return x ** 2, x ** 3, x ** 4

print(foo.__doc__) # 打印函数的文档注释

理解函数的相关概念python_Python函数的概念和使用相关推荐

  1. 理解虚基类、虚函数与纯虚函数的概念

    引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写 一写,下面就和大家讨论一下虚基类.虚函数与纯虚函数,一看名字就让人很容易 ...

  2. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  3. c语言为什么提供函数声明机制,通过实战理解C语言精要——函数篇

    本文为作者原创,转载请注明出处,感谢您的阅读与分享,希望本文能让您有所收获. 前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容 ...

  4. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  5. 带参函数_更好的理解Python第五弹函数预处理与指针

    编译预处理 预处理概念:在编译之前进行处理 在C语言中,预处理行为宏定义,文件包含,条件编译 指令 用处 # 无 #define 定义一个宏 #undef  取消定义一个已经定义的宏 #include ...

  6. 多个数字数组_1分钟彻底理解JavaScript的数组与函数

    1 - 数组 1.1 数组的概念 - 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式. - 数组是指**一组数据的集合**,其中的每个数据被称作**元素**,在数组中可以**存放任意类 ...

  7. vue函数如何调用其他函数?_编程|如何简单理解函数的传参、返回、调用

    1 函数内部变量的局部性 在一个函数中定义的变量(包括实参),其作用域仅限于定义它的函数中,在其它的函数不能使用,这种变量称为"局部变量". 局部变量的作用域:函数内部声明和定义的 ...

  8. 【react】---函数化编程的理解,柯里化函数及返柯里化函数的理解...

    虚拟DOM  与 js概念的理解 01.纯函数的理解: 02.柯里化函数 编写一个函数add(3)(4)(5)  得出结果  12    //通过柯里化  函数就可以实现 一个函数内,执行过程中,返回 ...

  9. 深入理解数据库当中的聚合函数

    核心内容: 1.聚合函数的相应概念 2.聚合函数的分类 3.聚合函数用法的注意事项 4.具体实例应用 1.聚合函数的相应概念 在数据库当中,函数分为两种:单行函数和多行函数,相应概念如下: 单行函数: ...

最新文章

  1. 还在为cximage编译问题而发愁吗?
  2. 投资提升亦令云安全引发高度关注
  3. mysql保留2位小数字段如何设置 浮点数
  4. 关于“WireX Botnet”事件Android样本分析报告
  5. 百度AI原生云实践: 基于容器云打造 AI 开发基础设施
  6. OpenCV扫描图像,查找表和时间测量
  7. .NET中的文件IO操作实例
  8. PyTorch 1.0 中文官方教程:数据加载和处理教程
  9. 带参数的插入语句的问题
  10. java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters invo
  11. 计蒜客模拟赛D2T3 蒜头君救人:用bfs转移状压dp
  12. Linux 部分(tcp\ip)系统内核优化
  13. 谈谈反向代理Nginx
  14. Android混合开发(一)——移动端与前端交互之JSBridge引入
  15. js rsa java解密_RSA使用js加密,使用java解密
  16. 误删代码,回收站又被清空还没有备份教你如何解决
  17. Postman打开报错could not open postman 无法打开如何解决
  18. 如何取消掉计算机更新图标,本文演示win10电脑更新图标怎么去掉的具体操作方式...
  19. 漫谈程序员系列:软件开发的十八般乐趣
  20. PHP赛事贝格尔编排法--单循环

热门文章

  1. 如何更改应用路径_【电脑】实用技巧分享:如何更改电脑桌面路径?
  2. 设计灵感|简约复古风格海报设计这样玩
  3. 时下超火的在线教育移动应用UI套件设计素材
  4. idea抽取重复方法快捷键_使用 IDEA 几分钟就重构了同事800 行quot;又臭又长quot; 的类!真香!...
  5. asp.net web开发框架_Python之Web开发框架学习 发送电子邮件
  6. Intel VMM-虚拟机监控器
  7. Linux内核 eBPF基础:ftrace基础-ftrace_init初始化
  8. Linux开机启动过程(13):start_kernel()->setup_arch()完结
  9. ethtool 原理介绍和解决网卡丢包排查思路(附ethtool源码下载)
  10. 关系型数据库(Relational Database)与非关系型数据库(NoSQL)的区别:(MySQL,Redis,Memcache,MongoDB)