第六讲:Python的函数和方法
目录:
一、函数
Python中的函数:
- 定义:
- 组织好的、可重复使用的、可以实现某个功能的代码段.
- 功能:
- 大大减少程序中重复代码段的使用.
函数的定义
基本定义格式:
def 函数名(参数):
代码1.
代码2.
......
示例代码:
# 定义一个返回给定数据的绝对值的函数.
def my_abs(a):
if a > 0:
return a
else:
return -a
调用函数:
基本调用格式:
函数名()
示例代码:
""" 1、定义一个函数 """
def my_abs(a):
if a > 0:
return a
else:
return -a
""" 2、调用函数 """
result = my_abs(9)
print(result)
注意:
- 不同的需求,参数可有可无.
- 调用函数必须放在定义函数之后.
1.2 函数中的参数
必要传参(位置参数)
定义函数时,根据需求必需要传递的参数, 而且,在调用函数时根据函数定义的参数位置顺序来传递参数.
示例代码:
def test(start, end):
""" 计算从开始到结束之间所有数字的和,包括结束. """
s = 0
for i in range(start, end + 1):
s += i
return s
print(test(1, 100))
注意:传递和定义参数的顺序及个数必须一致.
关键字传参
函数调用,通过“键=值
”形式加以指定.
可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.
示例代码:
def test(start, end):
""" 计算从开始到结束之间所有数字的和,包括结束. """
s = 0
for i in range(start, end + 1):
s += i
return s
print(test(end=10, start=1))
注意: 函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序.
默认传参
用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值.
示例代码:
def test(start, end, init_value = 0):
""" 计算从开始到结束之间所有数字的和,包括结束. """
s = init_value
for i in range(start, end + 1):
s += i
return s
print(test(end=100, start=0))
print(test(1, 10, 10))
注意:所有位置参数必须出现在默认参数前,包括函数定义和调用.
不定长传参(可变参数)
不定长传参用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
此时,来进行参数传递,会显得非常方便.
注意:如果函数同时使用默认传参和不定长传参,那么不定长参数必须放在默认参数之后,否则会报错.
- 不定长普通参数
def test(*numbers):
print(type(numbers))
for i in numbers:
print(i)
test(10, 20)
不定长普通参数传入函数中通过一个
元组 numbers
接收.
- 不定长关键字参数
def test(**kws):
print(type(kws))
for k,v in kws.items():
print(f'参数的名字:{k},参数的值:{v}')
test(a=10, b=20, c=30)
不定长关键字参数传入函数中通过一个
字典 kws
接收.
1.3 函数的返回值
return语句
用于函数调用后,返回需要的计算结果,并且退出函数,选择性地使用return语句
, 默认是返回None
.
返回值用法:
return语句
用于返回函数的值,并且退出函数;因此return
之后的语句不会被执行.
def test():
print('执行test1函数')
""" 返回10 """
# return 10
""" 返回None """
return
# 以下代码不会被执行.
print('hello')
result = test()
print(result)
return a, b
写法,返回多个数据的时候,默认是元组类型.
def test(a):
p = a ** 2
l = a ** 3
""" 返回的值被元组接收 """
return p, l
# 拆包:把容器中每一个元素拆分出来.
r1, r2 = test(9)
# 使用一个元组接收.
result = test(9)
print(type(result))
print(r1, r2)
print(result)
return
后面可以连接列表、元组或字典,以返回多个值.
def test(a):
p = a ** 2
l = a ** 3
""" 返回的值被列表接收 """
return [p, l]
# 拆包:把容器中每一个元素拆分出来.
r1, r2 = test(9)
# 使用一个列表接收.
result = test(9)
print(type(result))
print(r1, r2)
print(result)
二、局部变量和全局变量
2.1 局部变量
定义:
- 在函数内部定义的变量.
作用范围:
- 这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的.
使用注意事项:
- 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量.
- 当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了.
2.2 全局变量
定义:
- 定义在函数的外面.
作用范围:
- 全局变量在整个
.py文件
中声明,全局范围内可以使用,即所有函数内部都可以使用这个变量.
使用注意事项:
- 当函数内出现局部变量和全局变量相同名字时,函数内部中的
变量名 = 数据
,此时理解为定义了一个局部变量,而不是修改全局变量的值.- 如果要修改全局变量,必须使用
global
.
- 如果要修改全局变量,必须使用
2.3 局部变量和全局变量的使用代码示例
""" 1、局部变量和全局变量 """
# 全局变量.
str1 = 'abcdef'
def test1(a):
b = 100
return a + b
print(test1(10))
''' 以下代码会报错! '''
# print(a) # 局部变量
# print(b) # 局部变量
""" 2、在函数中修改全局变量 """
num = 20 # 全局变量
def test2():
global num # 标识这个函数内部不是定义一个局部变量,而是修改全局变量.
num = 10
# 以下打印的结果为num = 10.
print(f'当前函数的局部变量是:{num}')
test2()
三、课堂小结
学习Python时间规划:
- 严格按照三七分比例规划时间:
- 三分:看视频课、听老师讲课.
- 每个人能够集中精力听讲的时间不超过20分钟!
- 七分:自己练习代码和实操项目.
- 只有自己敲过代码,才能真正理解并掌握代码.
- 仅靠听课是远远不够的!
- 三分:看视频课、听老师讲课.
好的建议:
- 听课过程中,老师讲完一个知识点后,立即暂停视频,自己动手实操代码和项目进行练习.