什么是python函数的嵌套和作用域?lambda与函数有什么不同?

一:函数的嵌套

函数的嵌套定义是指一个函数里用def语句来创建其它的函数。(在一个函数def的内部,还有其它的def语句)

示例:

def fn_outer():

print(‘fn_outer被调用!’)

def fn_inner():

print(‘fn_inner被调用’)

fn_inner()

fn_inner()

print(‘fn_outter调用结束’)

fn_outer()

print(‘==========’)

fx = fn_outer()

fx()

分析:在程序外部首先定义一个函数:fn_outer,并调用打印输出,接着在函数fn_outer内部又定义了一个函数:fn_inner,并在内部调用两次,最后函数fn_outter调用结束。代码如下图:

二:python的作用域

1、作用域也叫名字空问,是访问变量时,查找变量名的范围空间。

2、Python的四个作用域(LEGB)

局部作用域 Local function(局部函数的作用域)

外部嵌套函数作用域 Enclosing Function Locals

函数定义所在模块(文件)的作用域 Global(Mudule)

Python内置模块的作用域 Builtin(python)

3、变量名的查找规则

L –》E—》G—》B

在默认情况下,对变量名赋值会创建或改变本作用域内的变量

三:global语句

1、作用:

告诉解释器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称全局变量。全局声明(global)将变量赋值映射到模块文件内部的作用域。

2、语法:

global 变量1,变量2,……

示例:

V = 100

def fn():

global v

v = 200

fn()

print(v)

说明:

全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)

全局变量在函数内部不经过声明就可以直接访问

不能先声明局部的变量,再用global声明为全局变量,此做法不符合规则

Global变量列表里的变量不能出现在此作用域内的形参列表里。

三:nonlocal语句

1、作用:

告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。

语法:

nonlocal 变量名1, 变量名2,……

说明:

1、语句只能在被嵌套函数内部进行使用。

2、访问nonlocal变量将外部嵌套函数的作用域的变量进行操作

3、当有两层或两层以上的函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作。

4、Nonlocal语句的变量列表里的变量名,不能出现在此函数的参数列表中。

四:Lambda表达式(又称匿名函数)

1、作用:

创建一个匿名函数对象,同def类似,但不提供函数名。

2、语法:

Lambda[参数1,参数2,……]:表达式 []里的内容可以省略

3、示例:

def myadd(x, y)

return x + y

以上函数可以改写为:

myadd = lambda x, y : x + y

print(‘2 + 3 = ‘, myadd(x, y))

4、语法说明:

1、lambda只是一个表达式,它用来创建一个函数对象。

2、当lambda表达式调用时,先执行冒号后(:)的表达式,并返回表达式的结果的引用。

3、Lambda表达式创建的函数只能包含一条‘表达式’。

4、Lambda比函数简单,且可以随时创建和销毁,有利于减少程序的偶合度(函数各个模块之间的牵连关系)。

五:练习

1、写一个lambda表达式,判断这个数的2次方+1是否能被2整除,如果能整除返回True,否则返回False。

说明:

此时lambda的参数一个,表达式返回的值是这个数的平方加1。

2、写一个lambda表达式,求两个变量的最大值。

说明:lambda有两个参数(x, y),表达式为max(x, y)


推荐我们的Python学习扣qun:784758214 ,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF,实战源码】,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每天都有大牛定时讲解Python技术,分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

总结:

函数的作用域一共有4种,global声明的是全局变量,如在外部函数嵌套里声明了global,会把局部变量变为全局变量输出;Nonloca只能在嵌套的函数内部使用,改变的是外部函数的变量;lambda是可以实现和函数一样功能的语句。有关函数等内容小编就介绍到这里,如果朋友们喜欢小编的内容,请加粉、互评、关注!谢谢!

发布了40 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/ITHHH777/article/details/104211224
今日推荐