2022年 11月 4日

Python函数嵌套

前言:

嵌套函数指定是在函数的内部再定义一个函数,但是需要注意的是,在函数内部定义的函数,无法被外部所访问,通俗来讲就是函数在哪里定义的就只能在同级别位置进行调用


函数嵌套定义

通过将函数定义在已存在的函数内容,称为:嵌套函数

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

技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点赞 收藏+关注 谢谢支持!