函数基础
1. 函数基础
1.1 什么是函数
函数是保存代码的工厂,也可以说是一个保存代码的容器,把具体功能封装到一个函数里面 方便以后调用
1.2为何要用函数
为了减少代码冗余,增加代码可读性
为了便于维护
1.3如何用函数
1.3.1定义函数 语法 定义函数发生的事情
函数的使用原则 先定义.后调用
def 函数名(形参1,形参2.....):
```
这个函数的介绍
```
代码体1
代码体2
代码体3
.......
return
(1):申请一块内存区域,代码体放进去
(2):把内存地址赋值给,函数名
1.3.2调用函数
函数名字()
根据函数名绑定的内存地址 指向保存代码的内存区域 执行代码体
也可以这么说,函数的内存地址()触发函数体代码的运行
1.3.3函数定义阶段:只检测语法不执行代码
def name():
asdfg
print("今天心情真高兴")
print("哈圣诞节哦我"
结:asdfg语法没有错误, ,,,, print("哈圣诞节哦我" : 有语法错误
1.3.4函数调用阶段:才会执行函数体代码
def name():
print("今天心情真高兴")
pwd()
def pwd():
print('from pwd')
结论:调用name正常运行 在pwd之上调用报错显示pwd未定义
2.函数定义与调用
2.1函数定义三种形式
2.1.1有参函数
def zhang(x,y):
print(x + y)
zhang(1+2)
2.2.2无参函数
def zhang():
print('好好学习,天天向上')
2..2.3空函数
def zhang()
pass
return有三种形式 如下
def haha(x):
return x
x=haha(5)
print(x)
返回结果 5
def haha(x,y,z):
return x ,y,z
x=haha(5,6,2)
print(x)
返回结果(5, 6, 2) 返回多个值就自动存成元组
def haha(x):
pass
x=haha(5)
print(x)
返回结果 None 没有return默认返回None
def haha(x):
return None
x=haha(5)
print(x)
返回结果 None ; return返回None
2.2函数调用三种形式
def foo(x,y):
return x + y
2.2.1语句形式
foo(1,2)
2.2.2表达式
res = foo(1,2) * 10
print(res)
2.2.3函数的调用可以当做一个参数传给另外一个函数
res = foo(foo(1,2),3)
print(res)
3.函数参数
函数的参数分为两大类
1、形参: 在函数定义阶段括号内指定的参数(变量名),称之为形式参数,简称形参
2、实参: 在函数调用阶段括号内指定的参数(变量值),称之为实际参数,简称实参
形参分为
3.1 位置形参:在函数定义阶段,按照从左到右的顺序依次定义的“变量名”
def meng(x,y,z):
print(x,y,z)
meng(1,2,3)
---------------------------------------------------------
3.2默认形参:在函数定义阶段,就已经为某个形参赋值了,该形参称之为默认形参
def meng(x,y=18):
print(x,y)
meng(10)
def foo(y=22,x):
def foo(x,y=222):
def meng(x,y,z)
def foo(x,y=222): y尽量是不可变类型 不要用字典列表 集合
---------------------------------------------------------
3.3 位置实参:在函数调用阶段,按照从左到右的顺序依次传入的“变量值”
def meng(x,y,z):
print(x,y,z)
meng(1,2,3)
---------------------------------------------------------
3.4 关键字实参:在函数调用阶段,按照key=value的形式赋值
def meng(x,y,z):
print(x,y,z)
meng(y=12,z=33,x=10)
def foo(x,y,z):
print(x,y,z)
foo(10,20,30,y=40)
----------------------------------------------------------
3.5*args与**kwargs用在形参中:汇总行为
3.5.1 *用在形参中: *会将溢出的位置实参存成元组然后赋值给紧跟其后的形参名
def foo(x,*args):
print(x)
print(args)
foo(20,30,50,4,134,46)
输出结果
20
(30, 50, 4, 134, 46)
---------------------------------------------------------
3.5.2 **用在形参中:**会将溢出的关键字实参存成字典然后赋值给紧跟其后的形参名
def foo(x,**kwargs):
print(x)
print(kwargs)
foo(1,y=2,z=4,s=50)
输出结果
1
{'y': 2, 'z': 4, 's': 50}
---------------------------------------------------------
3.6*与**用在实参中:打撒
3.6.1 *用在实参中: *会将紧跟其后值打撒成位置实参
def foo(x,y,z):
print(x,y,z)
foo(*(11,22,33))
foo(*"hello")
---------------------------------------------------------
3.6.2**用在实参中: **后只能跟字典,**会将紧跟其后字典打撒成关键实参
def foo(x,y,z):
print(x,y,z)
foo(**{'x':111,'y':222,'z':333})
---------------------------------------------------------