【Python入门自学笔记专辑】——函数嵌套-Lambda表达式

【Python入门自学笔记专辑】——函数嵌套-Lambda表达式

函数嵌套

前言

 Python的函数有很多地方不同于c++,它的函数可以嵌套!c++程序员:望尘莫及,太可怕了!不过Python主要是基于c语言开发的,c工程师还是可以自豪的,c语言是要自己做功能,而python自带功能。学哪个各有好处。

正题

 好了扯远了,继续说Python函数,python的一个函数可以嵌套多个函数,多个函数还可以嵌套。

def func():
    def func1():
        print("func1")
    def func2():
        print("func2")
        def func2_1():
            print("func2.1")
print("hello world")

比如上面的这个程序,func函数中嵌套了两个函数——func1func2func2又嵌套了func2_1,Python是支持这种情况的。
比如:

def func():
    def func1():
        print("func1")
    def func2():
        print("func2")
        def func2_1():
            print("func2.1")
    print("func")
func()

那么输出结果是:

func

先来一个温馨提示:如果要调用函数,必须把函数放在调用的那行上面
再看代码:

def func():
    choose = int(input("> "))
    def func1():
        print("func1")
    def func2():
        print("func2")
        def func2_1():
            print("func2.1")
    if choose == 1:
        func1()
    elif choose == 2:
        func2()
    print("func")
func()
func()

运行结果:

> 1
func1
func
> 2
func2
func

分析:
 先调用进func函数,然后定义两个函数func1func2然后选择,函数必须在选择的上面,不信大伙可以试试。

可能出现的错误

1
def func():
    if choose == 1:
        func1()
    elif choose == 2:
        func2()
    choose = int(input("> "))
    def func1():
        print("func1")
    def func2():
        print("func2")
        def func2_1():
            print("func2.1")
    print("func")
func()
报错信息:
UnboundLocalError: local variable 'func1' referenced before assignment
原因

 语句在函数上面,无法调用

解决办法

 把调用语句和函数换位置

2
def func():
    choose = int(input("> "))
    def func1():
        print("func1")
    def func2():
        print("func2")
        def func2_1():
            print("func2.1")
    if choose == 1:
        func1()
    elif choose == 2:
        func2()
    print("func")
func1()
报错信息
NameError: name 'func1' is not defined
原因

 调用函数最多一层,比如在函数外面,不可能跨越两层调用func1函数,跨级太多😸。

解决办法

 先调用进func函数,再调用func1,更高级的办法我也不知道😄呵呵o( ̄︶ ̄)o

Lambda表达式

前言

 理解了函数类型和函数对象😀,学习Lambda就简单了,就是一种函数吧,准确的说,是个解决一两步的方法,小方法。😆

正题

 Lambda是一种匿名函数,匿名函数也是函数,有函数类型,也可以创建函数对象。
 定义Lambda表达式格式如下:
lambda 参数列表 : Lambda体
 Lambda是关键字声明,这是一个Lambda表达式,“参数列表”与函数的参数列表是一样的,但不需要小括号括起来,冒号后面是“Lambda体”,Lambda表达式的主要代码在此处编写,类似于函数体😏。


 **注意:**Lambda体部分不能是一个代码块,不能包含多余语句,只能有一条语句,语句会计算一个结果返回给Lambda表达式,但是与函数不同的是,不需要使用return语句返回。与其他语言中的Lambda表达式相比,Python中提供的Lambda表达式只能处理一些简单的运算。


实例:

#-*- coding = utf-8 -*-

def calculate_fun(opr):
    '''
    #定义相加函数
    def add(a, b):
        return a + b
    
    #定义相减函数
    def sub(a, b):
        return a - b
    '''
    if opr == '+':
        # return add
        return lambda a, b : (a + b)
    else:
        # return sub
        return lambda a, b : (a - b)
    
f1 = calculate_fun('+')
f2 = calculate_fun('-')

print(type(f1))

print("10 + 5 = {0}".format(f1(10, 5)))
print("10 - 5 = {0}".format(f2(10, 5)))

运行结果:

<class 'function'>
10 + 5 = 15
10 - 5 = 5

这个Lambda返回看来是“function”?
 上面的程序注释部分原本是一个旧程序,大家可以把Lambda部分去掉,把注释部分恢复,可以再试试。😄
 上面代码return lambda a, b : (a + b)替代了add()函数,return lambda a, b : (a - b)替代了sub()函数,使得函数更快。

The END

幕后

 今天我又学习python了😎,哈哈,本人努力为大家写了一篇好文,也是给自己这个Python小白写的整理,Lambda这些东东还是有难度的,在VScode上忙碌2小时,弄明白了!😄,所以麻烦点一个赞,谢谢!😋
在这里插入图片描述

posted @ 2020-03-13 16:50  Aeterna_Gungnir  阅读(464)  评论(0编辑  收藏  举报