前言
编程函数 != 数学函数,要理解的是编程思维,而不是套公式
函数 = 方法,实现一个特定的操作.
一个人早上从起床到出门,都发生了啥???
- 睁眼 穿衣服 洗漱 吃早餐 出门
一、初识函数(function)
把一些会用到的代码包装起来(封装),取一个有意义的名字,以后要用的时候就直接调用它就可以!!!
函数的优点:
-
遇到重复功能的时候,直接调用即可,省事
-
提升代码结构性,分工明确,提高代码的可读性
-
需要拓展功能时,修改比较方便
数值类型: 存储一个数据
序列,散列类型: 存储多个数据
函数: 存储多段代码
写了一些代码,能做到特定的功能,用一个东西把它装起来方便以后使用 --> 函数
二、函数基础
函数的命名规则与变量的命名规则是一致的:
-
1.由数字,字母,下划线组成
2.首字符不能是数字,不能有特殊符号
3.见名知意
4.不能用关键字
5.区分大小写
def --> 定义
fun --> 函数的简写,用来做函数名函数也有代码块的概念,也是通过缩进来控制的
-
基本定义:
def 函数名(): 代码内容 def fun(): print("你好,我是个函数")
-
函数的使用:
函数名() fun()
-
定义空函数:函数内容不能为空,还没想好要写啥
def 函数名(): pass def fun(): pass
-
定义了返回值的函数
def 函数名(): 代码块 return 返回值 def add(): a = 6+6 return a print(add())
函数得先定义再调用执行
函数的使用分为两步:
1.定义函数 def
2.调用函数 函数()函数的用法:
1.直接调用函数函数名() fun()
2.获取函数的返回值
print(函数名()) # 输出该函数的返回值 print(fun()) 变量名 = 函数名() # 把函数的返回值赋给了变量 a = add()
三、啥是返回值(return)
返回值 = return.把值返回给函数的本身
可以把代码块理解为过程,返回值为结果.代码执行的是一步步的过程,如果要直接知道结果,那就直接获取返回值
你是个老板,你安排事情让员工去做
员工做事的过程 = 代码块(代码内容)
最后提交的结果 = return(返回值)
有的函数是没有返回值的,如果没有定义return返回值,它的默认值为None为空
就像现实中一样,很多事情的看法不一样,有的事情看中的是过程,结果无所谓(没有返回值)
有的事情,过程无所谓,我只需要结果.直接获取返回值
在return后写的语句,不会再执行,可以理解return是函数版break,后面的代码不会运行
def fun():
print(520)
return 666
print("上午好")
函数 --> 做一件事
代码块 --> 做事的过程
返回值 --> 做事的结果
四、函数参数
形参: 先放个东西,过来霸个位置
实参: 真人到场
坐车:
形参 = 票 --> 保留位置
实参 = 人 --> 坐上位置
形参是没有实际值的,只是作为占位,在实际使用时,会用实参来代替形参.实参需要有具体值
定义带参函数:
def 函数名(参数):
print(参数)
定义函数时,括号里的参数为"形参",先占个位置
调用带参函数:
函数名(参数)
调用时,括号里放的参数就是"实参",实参要有具体的值
形参 == 形式主义,走个形式,没有具体值
实参 == 实际值,有具体的数据
def add(a,b):
sum = a+b
return sum
print(add(70,35))
做人要老实,有几个形参就传几个实参.不要多也不要少
返回值的:
-
类型是不限的,你可以返回数值,列表,元组,集合,字典
-
数量是不限的,你可以返回多个值,中间用逗号隔开
五、参数进阶
-
必备参数:有几个形参就要有几个实参,数量要匹配一致,多了少了都会报错
定义时: def 函数名(参数1,参数2) 调用时 函数(参数1,参数2) def add(num1,num2): print(num1,num2) add(666,70)
-
默认参数: 在声明参数的时候,就先定义一个参数的值
定义时: def 函数名(参数1,参数2 = 值): 调用时: 函数名(参数1) def add(num1,num2 = 70): print(num1+num2) add(35)
形参再定义时就已经赋值了,在调用时就可以不接受传参.如果再传值会覆盖默认值
默认参数赋值是写在右边的,写左边会报错 -
不定长参数1:
一次性可以接受多个值
有的时候写一个函数,不确定要传几个参数,就用不定长参数.数据接收后,为元组类型定义时: def 函数名(*参数名): def 函数名(*args): 参数名不是固定的,但是有个潜规则,一般是叫args 调用时: 函数名(多个数据) fun(1,3,5,7,9) def add2(*args): sum = args[0] + args[1] print(sum) add2(1,70,666,True)
*表示的是不定长参数:长度是不固定的,可以传很多个值,传进来的值为元组类型.所以也可以进行切片,索引
-
不定长参数2
一次性可以传多个值,传输的值类型为字典
定义时: def 函数名(**kwargs): 调用时: 函数名(**{字典}) def add3(**kwargs): print(kwargs) add3(**{"张三":"Good","小八":"靓仔","李四":"OK"}) **表示的是传入一个字典类型的不定长参数,kwargs也不是固定的名字
六、内置函数(基础篇)
python自带的一些功能函数,可以直接使用
print() 输出语句
input() 输入语句
type() 获取数据类型
min() 获取最小值
max() 获取最大值
len() 获取数据长度(有几个数据)
sum() 获取数据的总值
七、文档字符串
针对函数的注释,看起来和注释一样,但是用起来不一样.注释只能看,文档字符串可以被调用输出
def fun():
""" 你好,我是一个文档字符串 """
print("我是一个测试函数")
输出方式:
函数名.__doc__
print(print.__doc__)
核心作用就是查看函数的说明文档(文档尽量简洁,描述本质功能)
1.这个函数的作用
2.这个函数里参数的作用
总结
数值类型: 保存一个数据
序列,散列类型: 保存多个数据
函数: 保存一段代码
所谓函数,就是一个高级点的容器,说白了也是装数据的,只不过装的东西更多更灵活
函数的使用分为两步:
1.声明函数
def 函数名():
代码块
2.使用函数
函数名()
return是作为返回值,一般作用是直接输出结果
函数内的代码,内容是过程
形参: 并没有实际的值,只是先占个位置,定义阶段使用
实参: 有实际的值,在运行时就会取代形参,调用阶段使用
如果你注重的是这个函数的实现过程,那么就调用这个函数 函数名()
如果你注重的是这个函数的运算结果,那么就输出这个函数 print(函数名())