---恢复内容开始---
为什么要有函数?
当你的老板要你写一个程序
1 def 函数0(): 2 # 如果cpu占用率>90 3 # 发送邮件 4 # 发出警报 5 6 def 函数1(): 7 # 如果cpu占用率小于60大于90 8 # 发送邮件 9 # 发出警报 10 def 函数2(): 11 # 如果cpu占用率小于60 12 # 发送邮件 13 # 发出警报
现在很多功能在重复,当有写部分需要重复许多便再去敲的话代码重复率就太高了而且代码堆在哪也难看啊
那么现在有两个问题,
1.一个好的程序是要求我们简单明了的这么,这么多一样的堆在一起,更不适合别人看
2.当你要修改代码的时候,你就要把所有的都改了,这样的话程序就太不合理了
所以必须改进
函数是什么?
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
函数定义
1 def name (): 2 print() 3 return 4 # def +函数名+小括号+冒号 5 # 代码块 6 # 返回值
函数调用
1 name()
函数名加小括号就将函数调用一遍
带参函数:
1 def name (name): 2 print(name) 3 return 4 5 name("name")
仔细看此时括号里面的name就变成的一个变量可以引用
那么此时就称括号里的参数为新参
第五行括号里面的参数将会传进去那么此时称之为实参。
默认参数
1 def stu_register(name,age,country,course): 2 print("----注册学生信息------") 3 print("姓名:",name) 4 print("age:",age) 5 print("国籍:",country) 6 print("课程:",course) 7 8 stu_register("王山炮",22,"CN","python_devops") 9 stu_register("张小小",21,"CN","linux") 10 stu_register("刘老根",25,"CN","linux")
那么此时将会按照顺序为其复制
stu_register(age=66,country='wocao')
这个是关键字赋值,注意关键字参数必须要在默认参数的后面
那么我们在来看一下非固定参数
def wocao(*args): print(args) wocao('what','the','shit')
结果为
('what', 'the', 'shit')
将会打印一个列表
也就是说*args会将传入的值存储进入一个列表
那么还有一种非固定参数就是**kwargs
def wocao(*args,**kwargs): print(args) print('********') print(kwargs) wocao('what','the','shit',name='curry',age=16,list_all=['what','the','fuck'])
好的现在我们来看一下结果会是怎么样
1 ('what', 'the', 'shit') 2 ******** 3 {'name': 'curry', 'age': 16, 'list_all': ['what', 'the', 'fuck']}
结果显而易见了 当使用关键字传值时,**kwargs的作用是将没有的值作为一个字典储存起来。
返回值return
1 def wocao(*args,**kwargs): 2 return kwargs 3 # 我们来做一个数据接收他看看效果 4 data=wocao('what','the','shit',name='curry',age=16,list_all=['what','the','fuck']) 5 print(data)
结果是这样的
{'name': 'curry', 'age': 16, 'list_all': ['what', 'the', 'fuck']}
也就说我们将kwargs作为这个函数的返回值传了出来 如果我定义了一个变量接收
那么返回结果就将被这个函数接收
---恢复内容结束---