我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python全栈作用域和闭包怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python全栈作用域和闭包怎么使用

本篇内容介绍了“Python全栈作用域和闭包怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. return返回值

# ### return 自定义函数的返回值"""概念:return 把函数内部的数据返回到函数的外面,返回到函数的调用处1.return + 六大标准数据类型 , 除此之外还可以返回函数 或者 是类对象2.return 在执行时,意味着终止函数,后面的代码不执行.3.如果不定义return返回值,默认返回None"""# (1) return + 六大标准数据类型def func():# return 111# return 6.89# return "你好帅啊,我爱死你乐"# return [1,2,3]# return {"a":1,"b":2}return 1,2,3 # 返回元组res = func()print(res)# (2) return 在执行时,意味着终止函数,后面的代码不执行.def func():print(1)print(2)return 3print(4)res = func()print(res)def func():for i in range(5):if i == 3:return 4print(i)res = func()print(res)# (3) 如果不定义return返回值,默认返回Nonedef func():passres = func()print(res) # None# 注意点 打印的数据和返回的数据不是等价的,返回的数据是可以自定义的;res = print(1234)print(res)  # None# 模拟+-*/计算器"""功能:   完成计算参数:   2个数字和运算符返回值: 计算后的结果"""def calc(num1,num2,sign):if sign == "+":return num1 + num2elif sign == "-":return num1 - num2elif sign == "*":return num1 * num2elif sign == "/":if num2 == 0:return "除数不能为零"return num1 / num2else:return "抱歉,超出了我的运算范围."res = calc(3,5,"+")res = calc(3,5,"-")res = calc(3,5,"*")res = calc(3,0,"/")res = calc(3,0,"&")print(res)

2. 全局变量_局部变量

# ### 全局变量和局部变量"""1.概念局部变量:在函数内部定义的变量就是局部变量全局变量:在函数外部定义的变量或者在函数内部使用global关键字声明是全局变量2.作用域:局部变量的作用范围仅仅在函数的内部全局变量的作用范围横跨整个文件3.生命周期:该变量的作用时长内置命名空间 -> 全局命名空间  -> 局部命名空间 (开辟空间顺序)内置属性 > 全局属性 > 局部属性 (作用时长:长->短)"""# 1 局部变量def func():# 定义一个局部变量a = 1# 获取当前的局部变量print(a)# 修改一个局部变量a = 2print(a)func()# print(a) error# 2.全局变量# 定义一个全局变量b = 10# 获取当前的全局变量print(b)# 修改一个全局变量b = 20print(b)def func():print(b)func()# 3.函数内部定义全局变量def func():global cc =30func()print(c)# 4.函数内部修改全局变量d = 50def func():global dd = 51func()print(d)"""总结:global的使用如果当前不存在全局变量,可以在函数内部通过global关键字来定义全局变量如果当前存在全局变量,可以在函数内部通过global关键字来修改全局变量"""

Python全栈作用域和闭包怎么使用

3. 函数名的使用

# ### 函数名的使用"""# python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限"""def func():print( "我是func函数")# (1)动态创建a = 1print(a)a = funca()# (2)动态销毁del a# a()# func()# (3)当参数传递def func2():return "我是func2函数"def func1(f):return f() # "我是func2函数"res = func1(func2)print(res)# (4)作为值返回def func3():print( "我是func3函数" )def func4(f):return fres = func4(func3)print(res)res()print("<===>")# (5)函数名可以作为容器类型数据的元素lst = [func,func3]for i in lst:i()print("<=========>")# ### __doc__ 或者help查看文档def big_chang_cishen(something):"""功能: 教你怎么吃大肠参数: 吃的内容返回值: 是否满意"""print("把{}洗一洗".format(something))print("直接找肠子头,放嘴里,吸一下")print("擦擦嘴,满意的放下肠子头")return "吃完了,真好吃~"big_chang_cishen("生肠子")# 方法一res = big_chang_cishen.__doc__print(res)# 方法二help(big_chang_cishen)

4. 函数的嵌套

4.1 函数的嵌套

# ### 函数的嵌套"""互相嵌套的两个函数![请添加图片描述](https://img-blog.csdnimg.cn/f3ab3fd8502e43eebd473306c0e28633.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54as5aSc5rOh6p645p2e,size_20,color_FFFFFF,t_70,g_se,x_16):包裹在外层的叫做外函数,内层的就是内函数"""def outer():# inner()def inner():print("我是inner函数")""""""# (1)内部函数可以直接在函数外部调用么 不行# inner()# (2)调用外部函数后,内部函数可以在函数外部调用吗 不行# outer()# inner()# (3)内部函数可以在函数内部调用吗 可以outer()# (4)内部函数在函数内部调用时,是否有先后顺序 有的# 先定义在调用# 在其他语言中有预加载的机制,提前把函数驻留到内存中,然后再去编译脚本内容# python没有预加载函数的机制,只能先定义在调用;# 外函数是outer  中间函数是inner  最里层是smaller ,调用smaller函数def outer():def inner():def smaller():print("我是smaller函数")smaller()inner()outer()# LEGB 原则def outer():def inner():def smaller():print(a)smaller()inner()outer()"""LEGB原则(就近找变量原则)#找寻变量的调用顺序采用LEGB原则(即就近原则)B —— Builtin(Python);Python内置模块的命名空间      (内建作用域)G —— Global(module); 函数外部所在的命名空间        (全局作用域)E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)L —— Local(function);当前函数内的作用域            (局部作用域)依据就近原则,从下往上 从里向外 依次寻找"""

Python全栈作用域和闭包怎么使用

Python全栈作用域和闭包怎么使用

Python全栈作用域和闭包怎么使用

4.2 nonlocal的使用

# ### nonlocal的使用 (用来修改局部变量)"""nonlocal遵循LEGB原则(1) 它会找当前空间上一层的变量进行修改(2) 如果上一层空间没有,继续向上寻找(3) 如果最后找不到,直接报错"""# (1)它会找当前空间上一层的变量进行修改def outer():a = 10def inner():nonlocal aa = 20print(a)inner()print(a)outer()# (2)如果上一层空间没有,继续向上寻找def outer():a = 20def inner():a = 15def smaller():nonlocal aa = 30print(a)smaller()print(a)inner()print(a)outer()# (3)如果最后找不到,直接报错"""nonlocal 只能修改局部变量,""""""a = 20def outer():def inner():def smaller():nonlocal aa = 30print(a)smaller()print(a)inner()print(a)outer()error"""# (4) 不通过nonlocal 是否可以修改局部变量呢?okdef outer():lst = [1,2,3]def inner():lst[-1] = 3000inner()print(lst)outer()

5. 闭包函数的定义

# ### 闭包函数"""互相嵌套的两个函数,如果内函数使用了外函数的局部变量并且外函数把内函数返回出来的过程,叫做闭包里面的内函数叫做闭包函数是不是闭包?1.内函数用了外函数的那个局部变量2.外函数返回内函数"""# 1.基本语法形式def zhaoshenyang_family():father = "马云"def hobby():print("我对钱没有一丝丝的兴趣,我不看重钱,这是我爸爸{}说的".format(father))return hobbyfunc = zhaoshenyang_family()func()print("<==1==>")tup = func.__closure__print(tup[0].cell_contents) # 马云print(tup)print("<==2==>")# 2.闭包的复杂形式def zhaowanli_family():gege = "王思聪"didi = "鞋王,高振宁"money = 1000def gege_hobby():nonlocal moneymoney -= 500print("我交朋友不在乎他有没有钱,反正都没有我有钱.我就喜欢交女朋友... 钱物还剩下{}".format(money))def didi_hobby():nonlocal moneymoney -= 400print("家里有鞋柜,各式各样的奢侈鞋,一双大概20~30万,钱物还剩下{}".format(money))def big_master():return [gege_hobby,didi_hobby]return big_masterfunc = zhaowanli_family()print(func)lst = func()print(lst)# 获取哥哥函数gege = lst[0]gege()# 获取弟弟函数didi = lst[1]didi()# 3.使用 __closure__ , cell_contents 判定闭包"""如果返回的元组中有数据说明是闭包,谁的生命周期被延长就打印谁"""tup = func.__closure__print(tup)# 先获取第一个单元格  cell_contents获取对象中的内容func1 = tup[0].cell_contentsprint("<11111>")"""打印闭包函数didi_hobby中,生命周期被延长的属性"""print(func1.__closure__[0].cell_contents)func1()# 在获取第二个单元格  cell_contents获取对象中的内容func2 = tup[1].cell_contentsprint("<22222>")"""打印闭包函数gege_hobby中,生命周期被延长的属性"""print(func2.__closure__[0].cell_contents)func2()

Python全栈作用域和闭包怎么使用

Python全栈作用域和闭包怎么使用

Python全栈作用域和闭包怎么使用

6. 闭包的特点_意义

# ### 闭包特点"""特点:在闭包函数中,内函数使用了外函数的局部变量,该变量会与内函数发生绑定,延长该变量的生命周期,持续到脚本执行结束."""def outer(val):def inner(num):return val + numreturn innerfunc = outer(10)res = func(15)print(res)# ### 闭包的意义"""全局变量的作用域大,容易被篡改"""num = 0def click_num():global numnum += 1 # num = num + 1print(num)click_num()click_num()click_num()num = 100click_num()click_num()# 改造,用闭包来实现"""闭包的意义:闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问."""def outer():x = 0def click_num():nonlocal xx += 1print(x)return click_numclick_num = outer()click_num()click_num()click_num()x = 100click_num()click_num()

小提示:

def outer():      a = 10      def inner():            a = 20            print(a)       inner()       print(a)outer()这里的输出结果是20 10,嵌套里的两个a变量互不干扰列表可以直接可以在内外函数直接传递值,修改列表的时候不需要使用nolocal来修改变量的值。闭包可以延长局部变量的周期  没办法在函数的内部去修改一个全局变量的,必须通过一个global(跟nonlocal一个道理的)

7. 小练习

# # 1.定义函数:接收任意个参数,打印其中的最小值def func(*args):lst = []for i in args:if isinstance(i , (float,int)):lst.append(i)print(lst)return lst[0]res = func(-100,1,2,423,"sdf")print(res)# 2.定义函数:传入一个参数n,返回n的阶乘(5! = 5*4*3*2*1)def func(n):total = 1for i in range(n,0,-1):total *= ireturn totalprint(func(5))# 3.写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等)# # 将容器中的每个元素依次添加到新的列表中返回#例:传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)# 方法一def func(*args):lst =[]for i in args:for j in i:lst.append(j)return lstres = func([1,2,3],(5,6,7),"abc")print(res)# 方法二def func(*args):return list(args)res = func(*[1,2,3],*(5,6,7),*"abc")print(res)# 4.写函数,用户传入要修改的文件名,与要修改的内容,执行函数,修改操作# 方法一def func(filename,str1,str2):with open(filename,mode="r+",encoding="utf-8") as fp:strvar = fp.read()print(strvar)res = strvar.replace(str1,str2)with open(filename,mode="w+",encoding="utf-8") as fp:fp.write(res)func("ceshi2.py","内置函数","外置函数")# 方法二def func(filename,str1,str2):with open(filename,mode="r+",encoding="utf-8") as fp:strvar = fp.read()res = strvar.replace(str1,str2)# print(fp.tell())fp.seek(0)# 清空fp.truncate()fp.write(res)func("ceshi2.py","外置函数","内置函数")# 5.写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数# 方法一def func(strvar):dic = {"num":0,"word":0,"space":0,"other":0}for i in strvar:if i.isdecimal():dic["num"] += 1 # dic["num"] = dic["num"] + 1elif i.encode().isalpha():dic["word"] += 1elif i.isspace():dic["space"] += 1else:dic["other"] += 1return dic# strvar = input("请输入字符串")# print(func(strvar))"""print("你".isalpha())# 中文 => Falseprint("你".encode().isalpha())# 字母 => Trueprint("a".encode().isalpha())"""# 方法二def func(strvar):dic = {"num":0,"word":0,"space":0,"other":0}lst = []for i in range(97,123):lst.append(chr(i))lst.append(chr(i-32))for i in strvar:if i in "0123456789":dic["num"] += 1elif i in lst:dic["word"] += 1elif i == " ":dic["space"] += 1else :dic["other"] += 1return dic# strvar = input("请输入字符串")# print(func(strvar))# 6.写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,返回处理后的结果.#例:参数为:dic = {"k1": "v1v1", "k2": [11,22,33,44]}def func(dic):if isinstance(dic,dict):for k,v in dic.items():print(k,v)dic[k] = v[:2]return dicelse:return "不是字典"dic = {"k1": "v1v1", "k2": [11,22,33,44]}print(func(dic))print(func([1,23,42,34,23,4234]))# 7传入多个容器类型数据,计算所有元素的个数def func(*args):total = 0 for i in args:print(i)total += len(i)return totalres = func("123",[5,6,7],("你好","123423"))print(res)# 改造,不去判断字符串本身的长度def func(*args):total = 0 for i in args:print(i)if isinstance(i,str):total += 1elif isinstance(i,(tuple,list,set,dict)):total += len(i)return totalres = func("123",[5,6,7],("你好","123423"))print(res)

“Python全栈作用域和闭包怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python全栈作用域和闭包怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python全栈作用域和闭包怎么使用

本篇内容介绍了“Python全栈作用域和闭包怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. return返回值# ### ret
2023-06-21

Python中闭包与lambda的作用域怎么写

这篇文章主要介绍“Python中闭包与lambda的作用域怎么写”,在日常操作中,相信很多人在Python中闭包与lambda的作用域怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中闭包与l
2023-07-02

python闭包怎么定义和使用

闭包是指在函数内部定义的函数,并且该函数可以访问外部函数的变量。定义闭包的一般步骤如下:1. 在外部函数中定义一个内部函数。2. 内部函数引用了外部函数的变量。3. 外部函数返回内部函数。下面是一个简单的闭包示例:```pythondef
2023-10-11

Python的闭包怎么使用

本篇内容介绍了“Python的闭包怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.闭包的定义和使用当返回的内部函数使用了外部函数的
2023-06-30

Python全栈字符串和列表怎么使用

这篇文章主要讲解了“Python全栈字符串和列表怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python全栈字符串和列表怎么使用”吧!1. format格式化_填充符号使用1.1
2023-06-21

python基础-内置函数-作用域-闭包

内置函数-作用域-闭包-递归1.几个可能用到的内置函数查看内置函数: print(dir(__builtins__))常见函数: len 求长度 min 最小值 max 最大值 sorted 排序,从小到大
2023-01-31

Python中闭包与lambda的作用域解析

本篇文章给大家带来了关于Python的相关知识,其中主要整理了关于lambda的作用域的相关问题,还有Python中闭包的相关内容,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】Python闭包与lambda的作用域lambda写法def fun(): for i in range(3): yield lambda x : x * if0, f1, f
2022-08-08

基于Python函数的作用域规则和闭包(详解)

作用域规则 命名空间是从名称到对象的映射,Python中主要是通过字典实现的,主要有以下几个命名空间: 内置命名空间,包含一些内置函数和内置异常的名称,在Python解释器启动时创建,一直保存到解释器退出。内置命名实际上存在于一个叫__bu
2022-06-04

怎么在python中使用闭包和装饰器

本篇文章为大家展示了怎么在python中使用闭包和装饰器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、闭包闭包的形成条件:1.函数嵌套。2.内部函数使用了外部函数的变量或者参数。3.外部函数返回
2023-06-15

Golang函数的闭包特性和作用域链

Golang函数中的作用域链和闭包特性,需要具体代码示例一、函数的作用域链在Golang中,函数的作用域链是指函数中变量的访问权限范围。作用域链是一种层层嵌套的结构,每一层作用域都可以访问外层作用域的变量,而外层作用域无法访问内层作用域的
Golang函数的闭包特性和作用域链
2024-01-18

Python全栈的for循环怎么使用

这篇文章主要介绍“Python全栈的for循环怎么使用”,在日常操作中,相信很多人在Python全栈的for循环怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python全栈的for循环怎么使用”的疑
2023-06-21

JavaScript闭包和作用域链的定义实现

这篇文章主要为大家介绍了JavaScript闭包和作用域链的定义与实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-20

Python全栈迭代器和高阶函数怎么使用

本篇内容介绍了“Python全栈迭代器和高阶函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. lambda表达式# ### 匿
2023-06-21

python闭包的作用是什么

Python闭包的作用是将函数和其相关的引用变量封装在一个包裹(closure)中,以便在函数外部访问这些变量。具体而言,闭包允许函数访问其被定义时所在的环境中的变量,即使函数在其他环境中被调用。闭包在Python中有以下几个作用:1. 保
2023-10-11

python局部作用域怎么使用

这篇文章主要介绍“python局部作用域怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python局部作用域怎么使用”文章能帮助大家解决问题。说明1、在函数内赋值的变量和变元都,处于局部作用
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录