广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
14.4.1 理解匿名函数
匿名函数,从其字面意思来进行理解。所谓的匿名即不具名,没有名称。匿名函数,也就是没有函数名的函数。
在Python中,通过lambda表达式来定义匿名函数。
14.4.2 lambda表达式
关于lambda表达式,可以在交互模式中执行help("lambda")来查看其定义 :
>>> help("lambda")Lambdas*******lambda_expr ::= "lambda" [parameter_list] ":" expressionlambda_expr_nocond ::= "lambda" [parameter_list] ":" expression_nocondLambda expressions (sometimes called lambda forms) are used to createanonymous functions. The expression "lambda parameters: expression"yields a function object. The unnamed object behaves like a functionobject defined with:def <lambda>(parameters):return expressionSee section Function definitions for the syntax of parameter lists.Note that functions created with lambda expressions cannot containstatements or annotations.Related help topics: FUNCTIONS
从help("lambda")的输出,我们可以知道lambda表达式用来创建匿名函数:
Lambda expressions (sometimes called lambda forms) are used to create anonymous functions.
lambda表达式的语法结构:
lambda parameters: expression
parameters表示函数的形参列表,参数以逗号进行分隔,形参列表与具名函数一样,可以为空。expression表示你要实现的表达式的代码逻辑,表达式的值会直接返回给函数调用方,无需通过return进行返回。
具名函数即为有函数名的函数。通过def来定义的函数,就叫具名函数。
为便于同学们对匿名函数进行理解,现在分别使用具名函数,匿名函数来编写一段相同逻辑的代码:
# __desc__ = 使用具名函数和匿名函数来编写一段相同逻辑的代码 # 1. 定义具名函数accumulate,将参数进行累加 def accumulate(small, large): return small + large x = 1 y = 2 z = accumulate(x, y) # z的输出为3 # 2. 定义匿名函数,将参数进行累加 # 由于是匿名函数,所以不能直接调用该匿名函数,需要将匿名函数保存到一个变量中, # 再进行调用 anonymous_accumulate = lambda x, y:x+y # 通过变量来调用匿名函数时,与具名函数的调用方式一样 z = anonymous_accumulate(x, y) # z的输出为3在上文代码中定义了一个匿名函数,然后将其赋值到变量anonymous_accumulate中。Python中的变量,是一个存储内存地址的容器,变量anonymous_accumulate实际保存的是匿名函数的内存地址。Python在执行匿名函数时,先从变量中取出匿名函数的内存地址,然后再进行调用。
14.4.3 lambda表达式与具名函数
lambda表达式与具名函数相比,在形式上更加简单,只需一行代码就能搞定。但也同时限制了lambda表达式不能实现复杂的代码逻辑。如要实现复杂的代码逻辑,还应当使用具名函数。lambda表达式使用起来很灵活,可以作为参数传递,作为返回值来传回给调用方,也可以直接嵌入到其它数据结构中。
(1) 使用lambda表达式作为参数的默认值
代码实例:
# __desc__ = 使用lambda表达式作为默认参数 # 1. 定义具名函数accumulate,将参数进行累加 def accumulate(small, large, add_weight=lambda x:x+1): """参数add_weight的默认值为一个匿名函数""" small = add_weight(small) return small + large x = 1 y = 1 z = accumulate(1,2) # z的输出为4如果使用具名函数的话,就没有这样的灵活性。当然我们在调用的时候,也可以直接将具名函数作为参数进行传递:
# __desc__ = 使用lambda表达式作为默认参数 # 1. 定义具名函数accumulate,将参数进行累加 def accumulate(small, large, add_weight=lambda x:x+1): """参数add_weight的默认值为一个匿名函数""" small = add_weight(small) return small + large # 使用def定义一个加权函数 def add_weight(x): return x+1 x = 1 y = 1 # 将具名函数add_weight作为参数进行传递 z = accumulate(1,2, add_weight) # z的输出同样为4(2) 将lambda表达式嵌入到字典结构中
代码实例:
# __desc__ = 将lambda表达式嵌入到字典结构中 # 定义一个commands字典,表示各种命令 commands = {"add": lambda x,y:x+y, "sub": lambda x, y:x-y} x = 1 y = 2 # 1.执行加法运算 z = commands["add"](x,y) # z的输出为3 # 2.执行减法运算 z = commands["sub"](x,y) # z的输出为-1(3) 将lambda表达式作为返回值
代码实例:
# __desc__ = 将lambda表达式作为值进行返回 # 在具名函数中返回lambda表达式 def get_accumulate_lambda(x,y): initial_value = 2020 return lambda :x+y+initial_value accumulate = get_accumulate_lambda(0,1) z = accumulate() # z的输出为2021当然,也可以直接将具名函数作为返回值进行返回,但不如匿名函数这样简洁。
代码实例:
# __desc__ = 将lambda表达式作为值进行返回 # 在具名函数中返回lambda表达式 def get_accumulate(x,y): # 在函数中定义函数 def accumulate(): initial_value = 2020 return x+y+initial_value # 定义的函数作为返回值进行返回 return accumulate accumulate = get_accumulate(0,1) z = accumulate() # z的输出为2021上文的代码实例中,定义的accumulate其实是一个闭包函数。关于闭包函数,会在函数的高级用法中进行详细讲解。
14.4.4 知识要点
(1) 匿名函数,即不具名,没有函数名的函数。(2) 在Python中通过lambda表达式来定义匿名函数。使用匿名函数时,要先通过变量来保存匿名函数的地址。这样就可以在下文中进行调用。(3) lambda表达式与具名函数相比,在形式上更加简单,只需一行代码。
14.4.5 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: