函数的作用
函数就是将一段有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的要求
函数在开发过程中,可以高效的实现代码重用
函数的使用步骤
先定义,后调用。
定义函数
def 函数名(参数):
代码1
代码2
.........
调用函数
函数名(参数)
注意:不同的需求,参数可有可无。
在python中,函数必须先定义后使用
函数的参数作用
def add_num2(a,b):
result = a+b
print(result)
add_num2(10,20)
a,b形参,传入的数据是实参
函数参数的四种写法
位置参数
调用函数时根据函数定义的参数位置来传递参数
def user_info(name,age,gender):
print(f'您的名字{name},年龄{age}},性别是{gender}')
user_info('Tom','22','男')
注意:传递和定义参数的顺序以及个数必须一致,否则数据无意义
关键字参数
函数调用,通过 键=值 形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
def user_info(name,age,gender):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('小明',age=20,gender='男')
注意:函数调用时如果有位置参数时,位置参数必须在关键字参数的面前,但关键字参数之间不存在先后顺序。
缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
def user_info(name,age,gender='男'):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('Tom',20)
注意:函数调用时,如果为缺省参数传一个新值则修改默认参数值;否则使用这个默认值
不定长参数
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)
的场景。此时,用包裹位置参数,或者包裹关键参数,来进行参数传递,会显得非常方便
包裹位置传递
def user_info(*args):
print(args)
user_info('Tom')
user_info('Tom',18)
注意:所有传进的参数都会被args变量手机,它会根据传进参数的位置合并一个元组,*argss是元组类型,这就是包裹位置传递
包裹关键字传递
def user_info(**kwargs):
print(kwargs)
user_info(name='Tom',age=18,id=123)
#{'name':'Tom',age=18,'id':123}
综上:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程
函数的返回值作用
def buy():
return '烟'
goods = buy()
print(gooods)
注意:做计算时要用到return返回值返回计算后的结果
return的作用:
复制函数返回值
退出当前函数:导致return下方所有代码(函数体内部)不执行
函数的返回值作为参数传递
def test1():
return 50
def test2(num):
print(num)
result = test1()
test2(result)
一个函数要有多个返回值
def return_num():
return 1,2
result = return_num()
print(result)
注意:
return a,b 写法,返回多个数据的时候,默认是元组类型
return后面可以连接列表、元组或字典,以返回多个值
函数的说明文档
定义函数的说明文档
def 函数名(参数):
"""说明文档的位置"""
代码
.....
help(函数名)
查看函数的说明文档
函数嵌套调用
一个函数里面又调用了另外一个函数
def print_line():
print('_'*20)
def print_lines(num):
i = 0
while i < num:
print_line()
i += 1
print_lines(5)
def sum_num(a,b,c):
return a + b + c
result = sum_num(1,2,3)
def average_num(a,b,c):
sumResult = sum_num(a,b,c)
return sumResult / 3
averageResult = average_num(1,2,3)
print(averageResult)
变量作用域
变量作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量
局部变量
是定义在函数体内部的变量,即只在函数体内部生效
def testA():
a = 100
print(a)
testA() #100
print(a)#报错
变量a是定义在testA函数内部的变量,在函数外部访问则立即报错
局部变量的作用:在函数体内部,临时保存数据,当函数调用完成时,即销毁局部变量
全局变量
是在函数体内、外都能生效的变量
a = 100
def testA():
...
...
修改全局变量可以在函数内直接定义它在函数中的变量
def test1():
return 50
def test2(num):
print(num)
result = test1()
test2(result)
拆包和交换变量值
拆包:元组
def return_num():
return 100,200
num1,num2 = return_num()
print(num1) #100
print(num2)#200
拆包:字典
dict1 = {'name':'Tom','age':18}
a,b = dict1
#对字典进行拆包,取出来的是字典的key
print(a) #name
print(dict1[a])#Tom
交换变量值
假如有变量a = 10 和b = 20,交换两个变量的值
方法一:借助第三变量存储数据
c = 0
c = a
a = b
b = c
方法二
a,b = 1,2
a,b = b,a
print(a) #2
print(b) #1
引用
结论:在python中,值是靠引用来传递来的