前言
这次我们来深入了解一下函数的“真面目”,函数其实就是一个实现一段功能的代码块,可以理解为一个方法,一个功能。对外是一个整体,对内,函数也有自己的运算逻辑。我们可以把函数想象成一辆车子,对外,车子是实现出行这一项功能的,对内,车子本身的内部系统有自己的运行方式。
一、函数的返回值
return 关键字
return语句有以下三个特征需要了解:
- return 语句会提前退出函数
def func():
print('我是return语句前面的代码')
return
print('我是return语句后面的代码')
func()
# 输出结果如下:
我是return语句前面的代码
- return 返回的值到函数调用处需要用变量接收
def func():
a = '我是字符串a'
b = '我是字符串b'
return a
a = func() # 接收的变量名自定义
print(a)
# 输出结果如下:
我是字符串a
- return 在函数体内返回多个值的时候需要用逗号隔开
def func():
a = '我是字符串a'
b = '我是字符串b'
return a, b
a, b = func()
print(a, b)
# 输出结果如下:
我是字符串a 我是字符串b
二、函数的作用域
作用域:作用于某一部分区域
这里只讲解两种作用域,即局部作用域和全局作用域
a = '我是函数体外的全局变量'
def func():
print(a)
func()
print(a)
# 输出结果如下:
我是函数体外的全局变量
我是函数体外的全局变量
由上图得知,当局部没有找到变量a时,就会往上一级寻找全局变量
a = '我是函数体外的全局变量'
def func():
a = '我是函数体内的局部变量'
print(a)
func()
print(a)
# 输出结果如下:
我是函数体内的局部变量
我是函数体外的全局变量
由上图得知,局部作用域只是作用于一小部分区域,全局作用域范围更广
总结:局部作用域只是作用于一小部分区域,而全局作用域是作用于整个py文件,可以在py文件的任意地方使用
三、作用域的优先级
局部作用域 > 全局作用域 > 内建作用域
作用域范围越小,作用域的优先级就越大
四、其他内置方法
- range()
- range(start, stop, step) :生成一个序列
- start : 起始值,默认为0
- stop : 结束值,不包含
- step :步长,默认为1
- range(start, stop, step) :生成一个序列
for i in range(9):
print(i)
# 输出结果如下:
0
1
2
3
4
5
6
7
8
- filter()
- filter(func, iterbale) : 用于过滤不符合条件的元素,返回filter对象
- func : 自定义函数
- iterable : 可迭代对象
- filter(func, iterbale) : 用于过滤不符合条件的元素,返回filter对象
def func(n):
return n % 2 == 0
# 自定义函数
li = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 可迭代对象
new_li = filter(func, li) # 传入自定义函数和可迭代对象,返回filter对象
print(new_li) # 输出filter对象
print(list(new_li)) # 将filter对象强转为列表
# 输出结果如下:
<filter object at 0x0000029F35582548>
[2, 4, 6, 8]
- zip()
- zip(iter1,iter2…) : 用于将可迭代对象作为参数,将对象中的元素一一对应打包,返回一个zip对象
- iter : 可迭代对象
- zip(iter1,iter2…) : 用于将可迭代对象作为参数,将对象中的元素一一对应打包,返回一个zip对象
li1 = [1, 2, 3] # 可迭代对象一
li2 = [4, 5, 6] # 可迭代对象二
print(zip(li1, li2)) # zip打包,返回zip对象
print(list(zip(li1, li2))) # 强转为列表
print(dict(zip(li1, li2))) # 强转为字典
# 输出结果如下:
<zip object at 0x00000216B58E2448>
[(1, 4), (2, 5), (3, 6)] # 列表
{1: 4, 2: 5, 3: 6} # 字典
总结
关于函数就分享到这里,欢迎各位大佬评论交流,也欢迎各位大佬批评指正