前言:
嵌套函数指定是在函数的内部再定义一个函数,但是需要注意的是,在函数内部定义的函数,无法被外部所访问,通俗来讲就是函数在哪里定义的就只能在同级别位置进行调用
函数嵌套定义
通过将函数定义在已存在的函数内容,称为:嵌套函数
def func1():
print('this is func1')
def func2(): # 此函数为嵌套函数
print('this is func2')
- 1
- 2
- 3
- 4
- 5
调用嵌套函数
能否通过在外部调用到func2函数
def func1():
print('this is func1')
def func2(): # 此函数为嵌套函数
print('this is func2')
func1()
func2()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行效果
正确调用方法
def func1():
print('this is func1')
def func2():
print('this is func2')
func2() # 通过在同级别位置调用这个函数
func1()
def func1():
def func2():
print('this is func2')
return func2 # 调用func1 将func2函数对象返回给调用者
res = func1() # 调用func1,返回了func2的返回对象
# res = func2
res() # 调用的就是func2
打印结果:'this is func2'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
练习:定义多个功能的内部函数
模拟我们日常使用的一些内置方法:如len、sum
def calculation(value,mode=0): # 可根据输入模式执行对应功能,默认为0
def lens(element): # 计算传入值的长度,模拟了 len方法
count = 0
for i in element:
count += 1
return count # 把结果返回给调用这个函数的代码
def sums(element): # 计算传入值的总和,模拟了 sum方法
count = 0
for i in element:
count += i
return count # 把结果返回给调用这个函数的代码
if mode == 0: # 判断输入模式对应功能
# 将外部函数传入的值传递给内部功能函数
return lens(value) # 返回函数处理的结果
elif mode == 1:
return sums(value) # 返回函数处理的结果
lis = [10,20,30]
res = calculation(lis,mode=1) # 模式输入1就是计算列表内元素的总和
print(res)
打印结果:60
strs = 'Hello World'
res = calculation(strs) # 不输入模式默认就是计算元素的长度
print(res)
打印结果:11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
练习:找出传递内容的最大值
模拟了max内置方法,向函数传递多个值,可以获取到最大的那个值
def count_max(x,y): # 对比传递进来的两个数,返回最大的那个数
if x > y:
return x
else:
return y
def res_max(*args):
count = 0 # 定义计数
max_value = 0 # 取最大值,必须放在循环外面,因为需要待循环结束作为返回值
'''
每次count都要对应到下一个值,所以在最后一次时
如果count=5 args有6个元素 最后一个在args里面+1
可以获取到最后一个元素,那么count再次加1之后,
如果总长度不减一,那么count再找下一个元素就不能找到,会索引报错
'''
while count < len(args) - 1:
if count == 0: # 第一次传递元组里面1,2个进行对比
max_value = count_max(args[count],args[count + 1])
count += 1
else: # 后面的每一次都是拿上一次的最大值,与下一个值相比
max_value = count_max(max_value, args[count + 1]) # 注意看:count在这里要+1
count += 1
return max_value
print(res_max(50,20,18,60,72))
打印结果:72
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请
点赞 收藏+关注
谢谢支持!