函数-4.1函数
一、是什么
函数:一个功能独立的代码块
示例:
# 定义一个函数,能够完成打印信息的功能 def print_info(): print('------------------------------------') print(' 人生苦短,我用Python ') print('------------------------------------')
二、作用
函数在编程中是非常重要的一个知识点,答的大体功能如下
- 能够将部分代码划分为一个整体的功能
- 只需定义函数1次就可以使用N次,可以大大减少了代码的冗余
- 代码看上去更加整洁美观
示例1:未使用函数
如下通过print
输出了2遍“佛祖镇楼”
# 输出第1遍 佛祖镇楼 print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" (| -_- |) ") print(" O\\ = /O ") print(" ____/`---'\\____ ") print(" . ' \\| |// `. ") print(" / \\||| : |||// \\ ") print(" / _||||| -:- |||||- \\ ") print(" | | \\\\\\ - /// | | ") print(" | \\_| ''\\---/'' | | ") print(" \\ .-\\__ `-` ___/-. / ") print(" ___`. .' /--.--\\ `. . __ ") print(" ."" '< `.___\\_<|>_/___.' >'"". ") print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ") print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ") print(" ======`-.____`-.___\\_____/___.-`____.-'====== ") print(" `=---=' ") print(" ") print(" ............................................. ") print(" 佛祖镇楼 BUG辟易 ") print(" 佛曰: ") print(" 写字楼里写字间,写字间里程序员; ") print(" 程序人员写程序,又拿程序换酒钱。 ") print(" 酒醒只在网上坐,酒醉还来网下眠; ") print(" 酒醉酒醒日复日,网上网下年复年。 ") print(" 但愿老死电脑间,不愿鞠躬老板前; ") print(" 奔驰宝马贵者趣,公交自行程序员。 ") print(" 别人笑我忒疯癫,我笑自己命太贱; ") print(" 不见满街漂亮妹,哪个归得程序员?") # 输出第2遍 佛祖镇楼 print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" (| -_- |) ") print(" O\\ = /O ") print(" ____/`---'\\____ ") print(" . ' \\| |// `. ") print(" / \\||| : |||// \\ ") print(" / _||||| -:- |||||- \\ ") print(" | | \\\\\\ - /// | | ") print(" | \\_| ''\\---/'' | | ") print(" \\ .-\\__ `-` ___/-. / ") print(" ___`. .' /--.--\\ `. . __ ") print(" ."" '< `.___\\_<|>_/___.' >'"". ") print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ") print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ") print(" ======`-.____`-.___\\_____/___.-`____.-'====== ") print(" `=---=' ") print(" ") print(" ............................................. ") print(" 佛祖镇楼 BUG辟易 ") print(" 佛曰: ") print(" 写字楼里写字间,写字间里程序员; ") print(" 程序人员写程序,又拿程序换酒钱。 ") print(" 酒醒只在网上坐,酒醉还来网下眠; ") print(" 酒醉酒醒日复日,网上网下年复年。 ") print(" 但愿老死电脑间,不愿鞠躬老板前; ") print(" 奔驰宝马贵者趣,公交自行程序员。 ") print(" 别人笑我忒疯癫,我笑自己命太贱; ") print(" 不见满街漂亮妹,哪个归得程序员?")
示例2:使用函数
如下通过函数输出了2遍“佛祖镇楼”
# 定义一个函数,完成了独立输出“佛祖镇楼”的功能 def print_fozu(): print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" (| -_- |) ") print(" O\\ = /O ") print(" ____/`---'\\____ ") print(" . ' \\| |// `. ") print(" / \\||| : |||// \\ ") print(" / _||||| -:- |||||- \\ ") print(" | | \\\\\\ - /// | | ") print(" | \\_| ''\\---/'' | | ") print(" \\ .-\\__ `-` ___/-. / ") print(" ___`. .' /--.--\\ `. . __ ") print(" ."" '< `.___\\_<|>_/___.' >'"". ") print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ") print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ") print(" ======`-.____`-.___\\_____/___.-`____.-'====== ") print(" `=---=' ") print(" ") print(" ............................................. ") print(" 佛祖镇楼 BUG辟易 ") print(" 佛曰: ") print(" 写字楼里写字间,写字间里程序员; ") print(" 程序人员写程序,又拿程序换酒钱。 ") print(" 酒醒只在网上坐,酒醉还来网下眠; ") print(" 酒醉酒醒日复日,网上网下年复年。 ") print(" 但愿老死电脑间,不愿鞠躬老板前; ") print(" 奔驰宝马贵者趣,公交自行程序员。 ") print(" 别人笑我忒疯癫,我笑自己命太贱; ") print(" 不见满街漂亮妹,哪个归得程序员?") # 调用2次函数,每次输出1个佛祖镇楼 print_fozu() print_fozu()
三、分类
函数根据是否是自己编写可以分为2类
- 别人已经写好拿来直接用的函数,成为包括Python内置函数或者第三方包中的函数,更省事
- 开发者自己编写的函数(通常称为自定义函数);根据需要自己编写,更灵活
在整个函数相关知识学习中,我们主要以研究“自定义函数”为主,当“自定义函数”都弄明白了弄懂了,那么用别人的写好的函数就信手拈来了
四、自定义函数
上面的知识我们知道,函数就是一个独立功能的代码块,想要用函数一定要掌握2块知识
- 定义函数(即怎样制作函数)
- 调用函数(即怎样使用函数)
下面我们就来研究函数的定义以及调用
1. 定义函数
定义函数格式如下:
def 函数名(形参): 函数体
说明:
- 函数名:一定有,按照命名规则起个名字,注意Python中建议使用“小写加下划线”的方式,例如
print_info
而不用PrintInfo
- 函数体:一定有,就是整个函数真正要执行的代码,注意函数体前面缩进4个空格
- 形参:可有可无,专门用过来存储调用时传递给函数的数据用的
2. 示例
下面定义一个函数,完成打印菜单的功能
def print_menu(): print("-----------------------") print(" 欢迎光临 ") print("数字1: 黄瓜炒肉") print("数字2: 冬瓜炒肉") print("数字3: 西瓜炒肉") print("数字4: 南瓜炒肉") print("数字5: 北瓜炒肉") print("-----------------------")
说明:
- 函数名:
print_menu
- 函数体:第2~9行的代码
- 形参:无
注意:
- 定义了函数,这个函数不会被执行。就好比你发明了一个功能,这个功能不能自己用自己,必须等待别人使用才行,如果想让函数执行,就需要调用函数
3. 调用函数
通俗的讲:定义函数相当于打造了一个工具,调用函数相当于使用这个工具完成想要做的事情
调用函数的格式如下
函数名(实参)
说明:
- 函数名:一定有,想要调用的函数的名字
- 实参:可有可无,调用函数时给它传递的数据
注意:
- 调用的函数的名字必须是先定义好的才能够调用,否则会失败
4. 示例
# 定义了一个函数,实现打印菜单功能 def print_menu(): print("-----------------------") print(" 欢迎光临 ") print("数字1: 黄瓜炒肉") print("数字2: 冬瓜炒肉") print("数字3: 西瓜炒肉") print("数字4: 南瓜炒肉") print("数字5: 北瓜炒肉") print("-----------------------") # 调用函数 print_menu()
运行结果:
----------------------- 欢迎光临 数字1: 黄瓜炒肉 数字2: 冬瓜炒肉 数字3: 西瓜炒肉 数字4: 南瓜炒肉 数字5: 北瓜炒肉 -----------------------
说明:
- 函数定义一定要在函数的调用之前,其原因:Python解释器在解析
.py
文件时会从文件的开头开始解析,会先遇到函数的定义,然后当遇到函数的调用时就知道它在哪,所以函数要先定义才能调用
5. pass
如果一个函数,暂时不确定函数体的代码,可以用pass
先占用位置,这样即没有语法错误,也能够让开发人员知道 这个函数功能没有实现,可以在后面进行编写
def 函数名(): passs
示例:要定义4个函数,实现加减乘除的功能,但还不清楚具体功能怎样写,此时就可以用pass
# 定义了4个函数 def add_2_nums(): pass def min_2_nums(): pass def mult_2_nums(): pass def div_2_nums(): pass # 分别调用函数 add_2_nums() min_2_nums() mult_2_nums() div_2_nums()
如果想清楚了具体的函数应该怎样实现,那么把pass
删除,补上需要的代码即可
# 定义了4个函数 def add_2_nums(): print("接下来要进行加法操作...") num1 = input("请输入第1个数:") num2 = input("请输入第2个数:") print("%s+%s=%d" % (num1, num2, int(num1) + int(num2))) def min_2_nums(): print("接下来要进行减法操作...") num1 = input("请输入第1个数:") num2 = input("请输入第2个数:") print("%s-%s=%d" % (num1, num2, int(num1) - int(num2))) def mult_2_nums(): print("接下来要进行乘法操作...") num1 = input("请输入第1个数:") num2 = input("请输入第2个数:") print("%s*%s=%d" % (num1, num2, int(num1) * int(num2))) def div_2_nums(): print("接下来要进行除法操作...") num1 = input("请输入第1个数:") num2 = input("请输入第2个数:") print("%s/%s=%d" % (num1, num2, int(num1) / int(num2))) # 分别调用函数 add_2_nums() min_2_nums() mult_2_nums() div_2_nums()
注意:
- Python代码规范中提到,定了多个函数,那么函数与函数之间空2行
6.定义一次执行N次
一个函数可以进行多次调用,每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了
def test(): num = 100 num += 1 print("在test函数中num=%d" % num) test() test()
运行结果:
在test函数中num=101 在test函数中num=101
说明:
- 第7行调用了第一次test函数,当test函数结束后num为101
- 第8行调用了第二次test函数,依然会从test函数的开头开始执行,所以结果依然是101
五、内置函数
内置函数:Python自带的函数,尽情的用,对我们的开发有极大的帮助
Python之所以越来越受到开发者的喜爱,原因之一就是:它丰富的内置函数,基本上需要的功能Python都有了
常用的内置函数如下示例
cmp
>>> cmp([1, 2], [3, 4]) -1 >>> cmp([1, 2], [1, 1]) 1 >>> cmp([1, 2], [1, 2, 3]) -1 >>> cmp({"a":1}, {"b":1}) -1 >>> cmp({"a":2}, {"a":1}) 1 >>> cmp({"a":2}, {"a":2, "b":1}) -1
注意:cmp在比较字典数据时,先比较键,再比较值。
len
>>> len("hello abcdef") 12 >>> len([1, 2, 3, 4]) 4 >>> len((3,4)) 2 >>> len({"a":1, "b":2}) 2
注意:len在操作字典数据时,返回的是键值对个数。
max
>>> max("hello abcdef") 'o' >>> max([1,4,522,3,4]) 522 >>> max({"a":1, "b":2}) 'b' >>> max({"a":10, "b":2}) 'b' >>> max({"c":10, "b":2}) 'c'
del
del有两种用法,一种是del加空格
,另一种是del()
>>> a = 1 >>> a 1 >>> del a >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> a = ['a', 'b'] >>> del a[0] >>> a ['b'] >>> del(a) >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
time
开发中,经常需要打印一些调试的信息,此时就又必须要输出时间,这就需要一些时间函数
import time # 引入time模块 currentTime = time.time() print("当前时间戳为:", currentTime)
运行结果:
当前时间戳为: 1598952056.126486
random
import random a = random.uniform(1, 5) print("a =", a) b = random.randint(10, 50) print("b =", b) c = random.randrange(0, 51, 2) print("c =", c)
运行结果(每次结果都可能不同)
a = 2.018423712655862 b = 14 c = 14
内置函数有很多,在后面的课程中我们根据实际情况加以使用
切记:用到哪些内置函数就查询哪些内置函数,不用背,但要会查询会应用即可