python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l

直接上代码def l(list): def d(): return list return d #运行l = l([1,2,3,4])print l()

这个情况是正常的。

问题在于d函数为什么不能传入list,然后我现在尝试了一下这个代码:def l(list): def d(list): return list return d #运行l = l([1,2,3,4])#提示错误print l()#正常print l([1,3,5,7,9])

请问这个怎么解释呢?

我个人理解的是,类似于“继承”的情况,当d函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???

看看LEGB原则,就会明白是怎么回事。

https://zhuanlan.zhihu.com/p/...

运行

l = l([1,2,3,4])

提示错误

print l() 这个错误是你没有传参数。

楼主需要理解的是: 作用域

case 1: 函数l返回函数d的地址,d只做为返回值,并没有被调用执行.In [3]: print(l([1,2,3,4])).d at 0x7f49243ece18>

参数list传入l,作用域在函数l内,可以被d访问(注意参数是传给l的,不是d).

如果要访问list.如下调用:

`In [2]: print(l([1,2,3,4])()) [1, 2, 3, 4]相当于:In [5]: d = l([1,2,3,4]) # 返回d的地址 In [6]: d()          #调用d,d没有参数,不需要传参 Out[6]: [1, 2, 3, 4]case 2: 同样l返回d的地址,但此时返回的函数d需要传参(注意l的参数list和d的参数list是不一样的).In [8]: d = l([1,2,3,4])  # 返回函数d的地址,参数list此时并没有用到 In [9]: d([5,6,7,8])    # 需要参数的函数d Out[9]: [5, 6, 7, 8]

原有代码中:def l(list): def d(list): return list return d #

下面的用于说明:你原来代码中的 l 指向不同:def l(list): def d(list): return list return d #运行print 'id(l) is {}'.format(id(l))l = l([1,2,3,4])#提示错误# print l()#正常print 'id(l) is {}'.format(id(l))print l([1,3,5,7,9])

代码写成这样你可能就理解了:def l(_list): def d(_l): return _list + _l return d a = l([1,2,3,4])print a([1])

最后说两点:

编橙之家文章,

python函数def里面嵌套def,python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l...相关推荐

  1. python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...

    直接上代码 def l(list): def d(): return list return d #运行 l = l([1,2,3,4]) print l() 这个情况是正常的. 问题在于d函数为什么 ...

  2. python中的元类_理解python中的元类

    一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...

  3. python中的常量_深入理解Python中的内置常量

    前言 大家都知道Python内置的常量不多,只有6个,分别是True.False.None.NotImplemented.Ellipsis.__debug__.下面就来看看详细的介绍: 一. True ...

  4. python中*args和**kwargs的理解,Python中的*args和**kwargs的理解与用法

    一.简述 1.*args和**kwargs 这两个是python中方法的可变参数. 2.*args表示任何多个无名参数,它是一个tuple: 3.**kwargs表示关键字参数,它是一个dict.并且 ...

  5. python中的命名空间_深入理解Python中的命名空间和范围

    Python中的命名空间和范围 在Python中,每个包.模块.类.函数和方法函数都拥有一个"名称空间",其中解析了变量名称.下面本篇文章就来带大家认识一下Python中的命名空间 ...

  6. python批量分析表格_老板让我从几百个Excel中查找数据,我用Python一分钟搞定!...

    以下文章来源: 早起Python 作者:陈熹 大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 一. ...

  7. python中get啥意思_理解Python中的.get()方法

    本问题已经有最佳答案,请猛点这里访问. sentence ="The quick brown fox jumped over the lazy dog." characters = ...

  8. python中绝对路径的区别,理解Python中的绝对路径和相对路径

    本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...

  9. python中加入绝对路径_理解Python中的绝对路径和相对路径

    本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...

最新文章

  1. Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】
  2. 执行 java -jar xxx.jar 是不是创建进程问题
  3. Java GC系列(1):Java垃圾回收简介
  4. 需求评审流程该如何高效的走下去
  5. PostgreSQL 的 target_list分析(一)
  6. java中的object... args参数
  7. kindle电子书转换成pdf azw转pdf
  8. 华硕笔记本bios设置u盘启动
  9. 阿里云服务器设置安全组最新图文教程 新手必看!
  10. java string 几个字节_java中字符串占几个字节
  11. Qt 判断鼠标在某一控件上
  12. iOS非金额两位小数转化为大写中文
  13. 实用工具---python环境安装注意事项
  14. VUE element ui 动态合并单元格问题
  15. C++ 多态(二) : 虚函数、静态绑定、动态绑定、单/多继承下的虚函数表
  16. Linux环境下的c语言编程
  17. 火车票余票问题的算法解析(续)
  18. 399-群组业务代码
  19. 软文无本生利自动赚钱法
  20. java 内嵌chrome_Java嵌入谷歌内核简单浏览器

热门文章

  1. Android Studio编译好的apk放在哪里?
  2. win10计算机无法睡眠怎么办,Windows10笔记本电脑无法睡眠怎么处理
  3. Python游戏开发,pygame模块,Python实现愤怒的小鸟【附带源码】
  4. 修改服务器里的端口,怎么修改windows服务器登陆端口号
  5. php 转义 回车 空格 file put content,为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解...
  6. C语言考研复试知识点整理
  7. 条令考试小程序辅助器_在线考试题库小程序开发有哪些功能?
  8. html脱离标准文档流,关于css脱离标准文档流的两种方式
  9. linux系统最大支持多大硬盘容量,LINUX操作系统对硬件支持有上限么?最大多少内存?多大硬盘容量?...
  10. mybatis mysql cursor_MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集