函数
- 定义函数
def 函数名():
代码1
代码2
- 调用函数
函数名()
一.函数的参数
- 形参: 函数定义时书写的参数(非真实数据)
- 实参: 函数调用时书写的参数(真实数据)
def add_num1(a,b):#定义函数时同时定义了接收用户数据的参数a和b,a和b是形参
result = a+b
print(result)
add_num1(3,4) # 调用函数时传入了真实的数据3和4,真实数据为实参
参数类型
1.位置参数:调用函数时根据函数定义的参数位置来传递参数
def a(name,age,gender):
print(f'名字是{name},年龄是{age},性别是{gender}')
a('tom',20,'女')
==注:==传递和定义参数的顺序及个数必须一致
2.关键字参数:函数调用,通过键=值的形式指定
==注:==函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数自检不存在先后顺序
3.缺省参数(默认参数):用于定义参数,为参数提供默认值,调用函数时不传该默认参数的值,(所有的位置参数必须出现在默认参数之前,包括函数的定义和调用)
def a(name,age,gender='男'): # gender='男'就是默认参数
print(f'名字是{name},年龄是{age},性别是{gender}')
a('tom',20) #返回名字是tom,年龄是20,性别是男
a('小明',20,'女') # 返回名字是小明,年龄是20,性别是女 给了参数,修改默认值
函数调用时,如果为缺省参数传值则默认参数值,否则使用这个默认值
4.不定长参数:也叫可变参数,由于不确定调用的时候会传递多少参数的场景,可用包裹位置参数,或者包裹关键字参数,来进行参数的传递
(1)包裹位置传递 *args
#接收所有的位置参数,返回一个元组
def a(*args): #*args是形参
print(args)
a('tom',21) # 返回元组('tom', 21)
传进的所有参数都会被args标量手机,会会根据传进参数的位置合并成一个元组,arg是元组类型
(2)包裹关键字传递 ** kwargs
def a(**kwargs): #**kwargs是形参
print(kwargs)
a(name='tom',age=21) # 返回字典 {'name': 'tom', 'age': 21}
二.函数的返回值作用
1.写法:return 表达式
2.return作用:
负责函数返回值
退出当前函数,导致return下方的所有代码(函数体内部)不执行
3.当多个返回值时,
(1)return a,b写法,返回对个数据的时候,默认是元组类型
(2)return后面也可以连接列表,元组,字典,以返回多个值
三.函数的嵌套
函数嵌套:一个函数里面调用另外一个函数
例1:
# 打印图形
def print_line1():
print('-' * 20)
def print_line2(num):
i=0
while i< num:
print_line1()
i+=1
print_line2(5)
例2:
#2.求任意3个数的和
def sum_num(a,b,c):
return a+b+c
def averge_result(a,b,c):
sumaverage = sum_num(a,b,c)
return sumaverage /3
averageresult = averge_result(1,2,3) # 首先调用averge_result函数,然后调用sum_num函数
print(averageresult)
四.变量作用域
- 局部变量
定义在函数体内部的变量,只在函数体内部生效
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
- 全局变量
在函数体内、外都能生效的变量
1.如果函数里面直接把a=200赋值,此时的a不是全局变量的修改,而是相当用户子函数内部声明了一个新的局部变量
2.函数体内部修改全局变量,先global声明a为全局变量,然后在变量重新赋值
五.拆包
组包:把零散数据组合成一个整体
拆包:跟组包相反
1.拆包元组
def return_num():
return 100,200
#result = return_num()
#print(result) #返回的是元组(100,200)
num1,num2= return_num()
print(num1)
print(num2) # 返回的是100 回车200,就拆包成功
2.交换变量的值
a,b = 1,2
a,b=b,a
print(a) # 返回2
print(b) # 返回1
六.了解引用值可变类型
可变类型和不可变类型的区别:数据能够直接修改,可以修改是可变,不能修改是不可变类型
-
不可变类型
整型
浮点型
字符串
元组 -
可变类型
列表
字典
集合
a= [10,20]
b=a
print(b) # 返回[10,20] 赋值
a.append(30)
print(a) # 返回[10, 20, 30]
print(b) # 返回[10, 20, 30] 因为列表是可变类型