1、块级作用域

想想此时运行下面的程序会有输出吗?执行会成功吗?

#块级作用域if 1 == 1:name = "lzl"print(name)for i in range(10):age = iprint(age)

我们先看下执行结果

#输出lzl9

代码执行成功,没有问题;在Java/C#中,执行上面的代码会提示name,age没有定义,而在Python中可以执行成功,这是因为在Python中是没有块级作用域的,代码块里的变量,外部可以调用,所以可运行成功;

2、局部作用域

回顾之前学过的知识,我们学函数的时候,函数是个单独的作用域,Python中没有块级作用域,但是有局部作用域;看看下面的代码

#局部作用域
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def  func():name = "lzl"print(name)

运行这段代码,想想会不会有输出?

 Traceback (most recent call last):File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module>print(name)NameError: name 'name' is not defined

运行报错,我相信这个大家都能理解,name变量只在func()函数内部中生效,所以在全局中是没法调用的;对上面代码做个简单调整,再看看结果如何?

#局部作用域
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def  func():name = "lzl"func()          #执行函数
print(name)

对之前的代码添加了一句代码,在变量name打印之前,执行了一下函数,此时打印会不会有变化?

 Traceback (most recent call last):File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module>print(name)NameError: name 'name' is not defined

执行依然报错,还是回到刚才那句话:即使执行了一下函数,name的作用域也只是在函数内部,外部依然无法进行调用;把前两个知识点记住,接下来要开始放大招了

3、作用域链

对函数做下调整,看看下面的代码执行结果如何?

#作用域链
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
name = "lzl"
def f1():name = "Eric"def f2():name = "Snor"print(name)f2()
f1()

学过函数,肯定知道最后f1()执行完会输出Snor;我们先记住一个概念,Python中有作用域链,变量会由内到外找,先去自己作用域去找,自己没有再去上级去找,直到找不到报错

4、终极版作用域

好,铺垫了够了,终极版的来了~~

#终极版作用域name = "lzl"def f1():print(name)def f2():name = "eric"f1()f2()

想想最后f2()执行结果是打印“lzl”呢,还是打印“eric”?记住自己的答案,现在先不把答案贴出来,先看看下面这段代码:

#终极版作用域
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
name = "lzl"def f1():print(name)def f2():name = "eric"return f1ret = f2()
ret()#输出:lzl

执行结果为“lzl”,分析下上面的代码,f2()执行结果为函数f1的内存地址,即ret=f1;执行ret()等同于执行f1(),执行f1()时与f2()没有任何关系,name=“lzl”与f1()在一个作用域链,函数内部没有变量是会向外找,所以此时变量name值为“lzl”;理解了这个,那么刚才没给出答案的那个终极代码你也知道答案了

#终极版作用域
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
name = "lzl"def f1():print(name)def f2():name = "eric"f1()f2()# 输出:lzl

是的,输出的是“lzl”,记住在函数未执行之前,作用域已经形成了,作用域链也生成了

5、新浪面试题

li = [lambda :x for x in range(10)]

判断下li的类型?li里面的元素为什么类型?

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''print(type(li))print(type(li[0]))# <class 'list'># <class 'function'>

可以看到li为列表类型,list里面的元素为函数,那么打印list里面第一个元素的返回值,此时返回值为多少?

#lambada 面试题li = [lambda :x for x in range(10)]res = li[0]()
print(res)#输出:9

li第一个函数的返回值为9还不是0,记住:函数在没有执行前,内部代码不执行

Python 五个知识点搞定作用域相关推荐

  1. python内置作用域_python内置金融数据Python 五点搞定作用域

    1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗?#块级作用域 if 1 == 1: name = "lzl" print(name) for i in range( ...

  2. 九十五、轻松搞定Python中的Excel办公自动化系列

    @Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  3. 【山河送书第五期】:《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》参与活动,送书三本!!

    <码上行动:利用Python与ChatGPT高效搞定Excel数据分析> 前言 内容提要 本书亮点 购买链接 参与方式 往期赠书回顾: 前言 在过去的 5 年里,Python 已经 3 次 ...

  4. 巧用iptables五招免费搞定SYN洪水攻击

    转载来源 :巧用iptables五招免费搞定SYN洪水攻击 :https://www.toutiao.com/i6772397997692027399/ 摘要: SYN Flood是种典型的DoS攻击 ...

  5. 免费抠图神器!五秒在线搞定抠图

    第一款:remove.bg(2018年) 网站链接:Remove Background from Image – remove.bg 详细介绍参考:5秒自动抠图!可能是2018年最强大的去背景神器! ...

  6. konka电视怎么修改服务器,康佳网络电视如何升级 简单五步就搞定

    原标题:康佳网络电视如何升级 简单五步就搞定 智能电视引入了系统之后,虽然给我们带了很多的方便,但是同样也增加了不少的操作.不少朋友不知道该如何为自己的智能电视进行升级,今天笔者就用康佳电视为例,为大 ...

  7. Python 五点搞定作用域

    转: http://www.pythontab.com/html/2016/pythonjichu_0908/1063.html 1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? 1 ...

  8. 六、乘胜追击,将剩下的Git知识点搞定

    @Author : By Runsen @Author : 2020/5/15 上次,我写到GIt.还有一点尾巴. 学编程语言前,不了解Git,怎么入坑(四) 开始Github和码云之旅,新手如何上路 ...

  9. 【Python基础】刷爆网络的动态条形图,3行Python代码就能搞定

    上次出了一个在网站「Flourish」画动态条形图的文章[动态条形图视频教程],需要登录网址很多人可能觉得不方便,现在有大佬出了个Python包,只需几行代码就能搞定动态条形图,非常强大,给大家分享下 ...

最新文章

  1. opencvsharp 如何提取十字交叉点坐标_如何提取OpenFOAM计算结果的体心坐标
  2. Qt加载本地字体 .ttc或.ttf
  3. c高级语言程序设计B试题,2019-2010-2-《高级语言程序设计(C)》期末考试-题
  4. [Student.Achieve] 学生教务管理系统开源
  5. javaScript学习笔记之类型转换
  6. Java学习笔记3——集合框架
  7. Webpack实战(六):如何优雅地运用样式CSS预处理
  8. 吴恩达|机器学习作业目录
  9. Servlet学习的两个案例之网站访问次数的统计
  10. mysql语言基础实验报告_sql语言实验报告
  11. 精选32个最新Python实战项目(附源码),拿走就用
  12. nokia n9 android 4.4,再现新神机 诺基亚N9运行Android4.1系统
  13. 陈丹琦 关系抽取 2020 sota
  14. 5 个最好的免费开源反病毒工具(PC版)
  15. Flurry——统计和分析用户行为
  16. 梯度反方向是函数值局部下降最快的方向
  17. 微信小游戏制作学习笔记
  18. python爬取百度图片,自定义关键字和页数
  19. OSPF 总结—— ospf邻居关系无法建立原因 + OSPF选路影响因素
  20. 【FXCG】美元指数对人民币汇率的影响

热门文章

  1. com.lbx:xTools
  2. vue 打卡图片_掀起ins打卡潮的《小丑》台阶到底有什么魔力?
  3. 中国云计算行业研究报告
  4. 音乐能力与计算机能力结合,作曲与作曲技术理论专业(计算机作曲与音乐制作)培养方案...
  5. 几种常用的差异分析方法简介
  6. 2021-07-22
  7. 会计中阿拉伯数字变数字繁体大写
  8. 纯净简洁绿色的解压缩软件
  9. centos搭建proxypool
  10. Python可视化打包神器,绝了!