第六章函数
6.1函数概述
代码复用
补充
1.函数的使用过程
- 定义
- 调用
- 执行
- 返回
2.函数作用
- 使程序模块化
- 减少冗余
- 提高效率
6.2函数的定义和调用
6.2.1定义函数
def 关键字
格式
def 函数名 ([参数列表]):
["""文档字符串"""]
函数体
[return语句]
-
def 关键字:函数的开始标志
-
函数名:函数的唯一标识,遵循标识符的命名规则
-
参数列表:负责接收传入函数中的数据,可以包含一个或多个参数,也可以为空
-
冒号:函数体的开始标志
-
文档字符串:有一对三引号包裹的,用于说明函数功能的字符串,可以省略
-
函数体:实现函数功能的具体代码
-
return语句:函数结束非标志,返回处理结果
-
- 没返回值不需要print()
- 有返回值调用函数用变量保存返回值或直接print()打印
6.2.2调用函数
格式:函数名 ([参数列表])
嵌套定义
定义的函数里再定义函数
定义的内层函数只能在定义的外层函数里调用
例えば
def add_modify(a,b):
result = a+b
print(result)
def test():
print("我是内层函数")
add_modify(10,20)
#运行结果
30
def add_modify(a,b):
result = a+b
print(result)
def test():
print("我是内层函数")
test()
add_modify(10,20)
#运行结果
30
我是内层函数
6.3函数参数的传递
形式参数(简称形参):定义函数时设置的参数
实际参数(简称实参):调用函数时传入的参数
6.3.1位置参数的传递
调用函数时,将实参按照相应位置依次传递给形参
例えば
def add_modify(a,b):
result = a+b
print(result)
add_modify(10,100) #10->a 100->b
6.3.2关键字参数的传递
形参=实参
例えば
def add_modify(a,b):
result = a+b
print(result)
add_modify(a=10,b=100)
“ / ” 仅限位置形参
限定部分形参只接受采用位置参数传递方式的实参
例えば
def add_modify(a,b,/,c):
result = a+b+c
print(result)
add_modify(10,100,c=1000)
6.3.3默认参数传递
没有传值给形参时,直接使用形参默认值
例えば
def add_modify(a=10,b=100):
result = a+b
print(result)
add_modify(1000)
#结果 1100
补充
将有默认值的形参往后排
如果形参有多个,调用函数是只填入一个实参,默认传给第一个形参
例えば
#错误写法
def add_modify(a=10,b):
result = a+b
print(result)
add_modify(10) #此时,b获取不到值
#正确写法
def add_modify(a,b=100):
result = a+b
print(result)
add_modify(1000)
6.3.4参数的打包与解包
1.打包
在形参前加上“ ***** ”,可以接收以元组形式打包的多个值
在形参前加上“ ****** ”,可以接受以字典形式打包的多个值
例えば
def test(*args):
print(args)
test(11,22,33,44,55)
#运行结果
(11,22,33,44,55)
def test_one(**kwargs):
print(kwargs)
test_one(a=11,b=22,c=33,d=44,e=55)
#运行结果
{'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
2.解包
“ * ”可将元组拆分为多个值
“ ** ”可将字典拆分为多个键值对
例えば
def test (a,b,c,d,e):
print(a,b,c,d,e)
nums = (11,22,33,44,55)
test(*num)
#结果
11 22 33 44 55
num = {'a':11,'b':22,'c':33,'d':44,'e':55}
test(**num)
#结果
11 22 33 44 55
6.3.5混合传递
按优先级从高到低依次为按位置参数传递、按关键字参数传递、按默认参数传递、按打包传递
6.4函数的返回值
如果函数的返回值存在两个以上,则以元组的形式保存
补充
- return 可以出现在函数任何位置
- 可以返回0个,1个,多个返回值
6.5变量作用域
6.5.1局部变量和全局变量
1.局部变量
在函数内部定义的变量,只能在函数内部使用
2.全局变量
可以在整个程序的范围内起作用,不受函数范围影响
在函数内部可以使用,但不能直接修改
LEGB原则
程序中搜索变量时所遵循的原则
L:局部作用域
E:嵌套作用域
G:全局作用域
B:内置作用域
6.5.2 global和nonlocal关键字
1.global关键字
将局部变量声明为全局变量
global 变量
例えば
number = 10
def test_one():
global number
number += 1
print(number)
test_one()
print(number)
#结果
11
11
2.nonlocal 关键字
在局部作用域中修改嵌套作用域中声明的变量
nonlocal 变量
def test():
number = 10
def test_in():
nonlocal number
number = 20
test_in()
print(number)
test()
#结果
20
6.6实例
1.定义函数:判断是否为回文
def hw(a) :
# a = input("请输入一个整数:")
c = str(a)
b = list(c)
e = list(c)
b.reverse()
if b == e:
print("{} 是回文".format(a))
else:
print("{}不是回文".format(a))
hw(11111)
#结果
11111 是回文