python函数def里面嵌套def,python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l...
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...相关推荐
- python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...
直接上代码 def l(list): def d(): return list return d #运行 l = l([1,2,3,4]) print l() 这个情况是正常的. 问题在于d函数为什么 ...
- python中的元类_理解python中的元类
一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...
- python中的常量_深入理解Python中的内置常量
前言 大家都知道Python内置的常量不多,只有6个,分别是True.False.None.NotImplemented.Ellipsis.__debug__.下面就来看看详细的介绍: 一. True ...
- python中*args和**kwargs的理解,Python中的*args和**kwargs的理解与用法
一.简述 1.*args和**kwargs 这两个是python中方法的可变参数. 2.*args表示任何多个无名参数,它是一个tuple: 3.**kwargs表示关键字参数,它是一个dict.并且 ...
- python中的命名空间_深入理解Python中的命名空间和范围
Python中的命名空间和范围 在Python中,每个包.模块.类.函数和方法函数都拥有一个"名称空间",其中解析了变量名称.下面本篇文章就来带大家认识一下Python中的命名空间 ...
- python批量分析表格_老板让我从几百个Excel中查找数据,我用Python一分钟搞定!...
以下文章来源: 早起Python 作者:陈熹 大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 一. ...
- python中get啥意思_理解Python中的.get()方法
本问题已经有最佳答案,请猛点这里访问. sentence ="The quick brown fox jumped over the lazy dog." characters = ...
- python中绝对路径的区别,理解Python中的绝对路径和相对路径
本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...
- python中加入绝对路径_理解Python中的绝对路径和相对路径
本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...
最新文章
- Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】
- 执行 java -jar xxx.jar 是不是创建进程问题
- Java GC系列(1):Java垃圾回收简介
- 需求评审流程该如何高效的走下去
- PostgreSQL 的 target_list分析(一)
- java中的object... args参数
- kindle电子书转换成pdf azw转pdf
- 华硕笔记本bios设置u盘启动
- 阿里云服务器设置安全组最新图文教程 新手必看!
- java string 几个字节_java中字符串占几个字节
- Qt 判断鼠标在某一控件上
- iOS非金额两位小数转化为大写中文
- 实用工具---python环境安装注意事项
- VUE element ui 动态合并单元格问题
- C++ 多态(二) : 虚函数、静态绑定、动态绑定、单/多继承下的虚函数表
- Linux环境下的c语言编程
- 火车票余票问题的算法解析(续)
- 399-群组业务代码
- 软文无本生利自动赚钱法
- java 内嵌chrome_Java嵌入谷歌内核简单浏览器
热门文章
- Android Studio编译好的apk放在哪里?
- win10计算机无法睡眠怎么办,Windows10笔记本电脑无法睡眠怎么处理
- Python游戏开发,pygame模块,Python实现愤怒的小鸟【附带源码】
- 修改服务器里的端口,怎么修改windows服务器登陆端口号
- php 转义 回车 空格 file put content,为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解...
- C语言考研复试知识点整理
- 条令考试小程序辅助器_在线考试题库小程序开发有哪些功能?
- html脱离标准文档流,关于css脱离标准文档流的两种方式
- linux系统最大支持多大硬盘容量,LINUX操作系统对硬件支持有上限么?最大多少内存?多大硬盘容量?...
- mybatis mysql cursor_MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集