转自白月黑羽Python3教程之函数:http://www.python3.vip/doc/tutorial/python/0005/

什么是函数

人类语言里面,我们不仅会给人和物起名字, 比如 小张, 足球, iphone

有时候,我们还要给 一件事情,一串动作起名字,指代 某个流程。

比如:我们公司的面试流程是

把求职者带到3号会议室
请求职者 完成答卷
让测试经理来面试 求职者
让技术总监面试 求职者

我们会把上面这 一连串的事情,起名叫 面试流程。

面试流程就代表了这一串动作。

以后,我们想告诉 HR 给谁面试的时候,只要说,走面试流程 ,就行了。

不需要说, HR ,请你做如下的事情

把求职者带到3号会议室
请求职者 完成答卷
让测试经理来面试 求职者
让技术总监面试 求职者

  

你们会这么说吗?

不会,因为这样太麻烦了。我给它起名字面试流程,只要走 面试流程,HR 自然知道是什么意思。这样就方便多了。

函数定义


同样的道理,在编程上,如果我要多次输出面试的流程,就像下面的代码,

print("把求职者带到3号会议室")
print("请求职者 完成答卷")
print("让测试经理来面试 求职者")
print("让技术总监面试 求职者")

  

每次都全部写一遍太烦了, 就可以定义一个名字来代表要执行这四条语句

定义一个名字 对应多个语句操作, 称之为定义函数

所以:定义函数 就好像是给 一段代码 起了个名字

Python中,我们是这样定义函数的:

def interview():
print("把求职者带到3号会议室")
print("请求职者 完成答卷")
print("让测试经理来面试 求职者")
print("让技术总监面试 求职者")

  

def 是关键字 表示定义一个函数,后面是函数的名字,紧接着后面需要一个括号 ,这个括号中间,根据需要还可以有n个参数,这里我们先不讲它。最后是一个冒号,下面的缩进的代码表示这个函数名字代表的具体动作是什么,称之为函数体。

函数体的代码是需要缩进的。我们建议缩进四个空格。

函数调用

这样定义好了以后,后面的代码要指代这个面试的流程,只需要写名字 interview 就行了。 比如:

print(interview)

运行一下,发现会输出内容如下

<function interview at 0x05292468>

表示这个 interview 是 一个函数类型的对象。

特别要注意的是,解释器执行代码的时候,执行到定义函数的代码,并不会执行函数体里面的代码。 要执行函数体里面的代码,必须调用函数。

Python中调用函数的语句,就是在 函数名后面加上括号。比如,要执行 interview 这个名字代表的动作,就在后面加上括号 interview()

如下:

interview()
print('后续代码')

interview() 就叫 调用函数 interview ,有时也叫做 执行函数 interview。

要注意的是,当解释器执行完被调用函数内部的代码后,还会返回到调用它的代码处,继续执行后面的代码。上面的例子里面,就是在 执行完 interview 对应的函数内部代码后, 会返回调用处,进行执行后面的 这条语句

print('后续代码')

大家仔细看看我们的代码, 里面除了有 interview 这个函数,还有什么函数? 对了print

其实,我们这里 print 这个名字 也是一个函数的名字, 表示一个动作就是把里面的对象 显示到屏幕上,这个动作实现的具体代码在哪里?

python语言的开发者 知道 这是我们常用的操作, 所以在python解释器内部已经帮我们实现好了 这样一个函数, 称之为内置函数。

关注我,私信我【Python】,还可以免费获取一套精心整理的电子书籍哟!

可以点击文章末尾【了解更多】,或者百度搜索【白月黑羽】,通过在线教程一起来学Python

函数参数

这个print函数调用的时候,有个和我们上面定义的 interview 有明显的不同,大家有没有发现?看看

interview()

print("把求职者带到3号会议室")

区别在哪里? 对了,括号里面有内容。函数调用括号里面的内容 称之为函数的 参数。有的函数要完成功能,需要告诉它一些信息。比如print函数,如果你不告诉它要打印的内容是什么,它怎么能打印信息到屏幕上呢?

参数的作用 就是: 提供 函数完成功能 所必须的信息

有参数的函数像这样

def func(para1,para2):
...

函数的参数都是放在函数定义的括号里面的。比如上面示例代码中的 para1,para2

参数其实也是一个变量,所以他们的命名规则和变量的命名规则一样。参数可以没有,可以是一个,也可以是多个。参数之间用逗号隔开。

调用有参数的函数时,需要传入对应个数的参数。是一个参数,就传入一个,两个就是传入两个,我们上面interview的例子里面,如果我们要加上显示出面试者的名字,就可以这样

def interview(interviewee):
print("求职者是 " + interviewee)
print("把求职者带到3号会议室")
print("请求职者 完成答卷")
print("让测试经理来面试 求职者")
print("让技术总监面试 求职者")
interview('王小五')

我们在定义的时候,并不知道将来调用的时候是谁来面试。但是没有关系。可以作为参数,定义在这里。面试者来了,我们在调用函数的时候,会将面试者的名字作为参数传递过来。再执行

interview('王小五')

的时候, 解释器就会到 函数 interview 准备去执行里面的代码,并且在执行函数代码前,会将参数变量interviewee 赋值为 '王小五'

函数的缺省参数

假设,我们要实现一个函数,统计学生考试超过指定分数的人数。

def overScoreStudents(studentScoreList, score):
count = 0
# 下面的代码用到了循环和判断,后面章节会学习到
for ss in studentScoreList:
if ss >= score:
count += 1 return count

在调用这个函数的时候,大部分时候 都是统计超过及格分数线60的人数。像这样

overScoreStudents(ssList,60)

所以,我们调用该函数的时候,第二个参数通常都是填写 60 。这样显得就有些麻烦。这时候,可以在定义函数的时候,给它加上缺省值,像下面这样:

def overScoreStudents(studentScoreList, score=60):
...

这样,在在调用这个函数的时候,如果score参数还是传入60 就可以不用写了,像这样

overScoreStudents(ssList)

解释器发现该函数参数score有缺省值,就会自动帮我们传入缺省值60 给 参数score。当然如果我们调用的时候传入了参数,比如像下面这样,score参数就会将 70 传给参数score。

overScoreStudents(ssList, 70)

Python基础之白话说函数的更多相关文章

  1. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  2. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  3. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  4. python基础学习1-内置函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- 系统内置函数 n =abs(-1) #绝对值 print(n) #bytes()函数 s="离开&q ...

  5. Python基础知识之5——函数基础

    函数 函数是一个独立且封闭完成特定功能的代码块,可以在任何地方被调用.Python内置了很多函数,我们可以直接调用,使用的时候,先查询下Python的官方文档即可: http://docs.pytho ...

  6. Python基础_内置函数

        Built-in Functions     abs() delattr() hash() memoryview() set() all() dict() help() min() setat ...

  7. python基础(15):内置函数(一)

    1. 内置函数 什么是内置函数? 就是python给你提供的,拿来直接⽤的函数,比如print,input等等,截⽌到python版本3.6.2 python⼀共提供了68个内置函数.他们就是pyth ...

  8. python基础补漏-04-常用函数

    ----lambda 首先我们说,很遗憾 在python中lambda 仅仅只是一个表达式 那么如何去使用呢? 这个是lambda最简单的使用方式  一般跟map一起配合使用 --map (fun,l ...

  9. 【Python基础学习六】函数

    1.创建函数 Python中函数的关键字def来定义. def fibs(num): f=[0,1] for i in range(1,num): f.append(f[-1]+f[-2]) retu ...

随机推荐

  1. 属性动画和Activity、Fragment过渡动画等

    主题是关于动画的,但是不是什么动画的内容都包括.先泛泛的介绍一下,然后详细的介绍一下翻代码找见的一个好玩的动画的使用.以下的内容包括Android 3和Android 3.1等引入的API,在使用中请 ...

  2. 一个发送邮件的java类,包含多种发送方法

    import java.util.Calendar;import java.util.Date; import java.util.Properties; import javax.mail.Addr ...

  3. 找不到UserDetails.java

    真是一个奇葩的问题,dubbo接口 在controller中引用是可以正常的,但是放到service层中,就一直报找不到UserDetails.java,从路径看,看不出来是什么包里面的类 结果把路径 ...

  4. linux下如何编写shell脚本

    我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术log里记录下来 ...

  5. 《SQL必知必会》笔记

    SQL必知必会(第4版) 作者:[美]Ben Forta 本书介绍了sql在不同数据库工具(Oracle.SQLite.SQL server.MySQL.MariaDB.PostgreSQL...)是 ...

  6. AngularJS 承诺 Promise

    一.概念解释 全称是未来与承诺,Futures and promises,是一种编程模式,不是AngularJS首创.javascript里有个流行库Q,而AngularJS是$q,其就是从Q引入的: ...

  7. 服务器重启报错:提示fstab readonly报错!( /etc/fstab 只读无法修改的解决办法)

    摘自:http://blog.csdn.net/gray13/article/details/7432866 一.问题描述:服务器重启报错:提示fstab readonly报错! 二.问题原因:挂载的 ...

  8. [mysql]当mysql查询语句查询的结果为空时,返回query结果是什么类型的呢?

    php > $con = mysql_connect('localhost' , 'hnb' , 'alyHnb2015'); php > print_r($con);Resource i ...

  9. Linux查看History记录加时间戳小技巧

    Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...

  10. jQuery---ajax---error函数及其参数详解

    使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理,本文详细说明了ajax中error函数和函数中各个参数的用法. 一般error函数返回的参数有三个 ...