两行python代码,你是否可猜到运行结果

参考: http://www.cnblogs.com/way_testlife/archive/2011/07/20/2111549.html#2156893

代码如下

#!/usr/bin/env python
#-*- encoding: utf-8 -*- def func(a, b=[]):
b.append(a)
print b ''' 运行结果如下:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
['hello', 'world', 5]
原因:b列表没有释放,默认参数b保留了前面调用所进行的修改。
'''
func(1)
func(2)
func(3)
func(4)
l = ['hello', 'world']
func(5, l) '''运行结果如下:
will.change
{'Name': 'Allen'}
will.change
{'Hobby': 'basketball'} 原因分析:
这里有一个变量名解析的原则:LEGB。即当引用一个变量时,
Python 按以下顺序依次进行查找,
从本地变量中,在任意上层函数的作用域,在全局作用域,最后在内置作用域中查找。
本地变量 < 任意上层函数的作用域 < 全局变量 < 内置作用域
第一个完成查找的就算成功。变量在代码中被赋值的位置通常就决定了它的作用域。 函数TT中的Name就是函数T的参数1,
而(Name=2)是作为字典传给kwargs的,用Name做字典的key很有迷惑性啊。其实(Name=2)中的Name和(print Name)中的Name完全两回事。
'''
def T(Name):
def TT(**kwargs):
print Name
print kwargs
return TT T('will.change')(Name = 'Allen')
T('will.change')(Hobby = 'basketball')

运行如下

[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
['hello', 'world', 5]
will.change
{'Name': 'Allen'}
will.change
{'Hobby': 'basketball'}

原因分析

见程序中的注释

两行python代码,你是否可猜到运行结果的更多相关文章

  1. 解决“无法连接到Python代码运行助手。请检查本机的设置”问题

    廖雪峰老师python课程里有个代码运行助手,可以让你在线输入Python代码,然后通过本机运行的一个Python脚本来执行代码,很方便的一个脚本工具,但是很多人用过之后出现了这样的提示:“无法连接到 ...

  2. 三行Python代码,让你的数据处理脚本快别人4倍

    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺 ...

  3. python代码风格-PEP8

    转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...

  4. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  5. 【转】python代码风格-PEP8

    转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...

  6. 一起来写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家,而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

  7. 一起写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家.而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

  8. 老李分享:pep8 python代码规范

    老李分享:pep8 python代码规范 什么是PEPPEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书 . PEP8 译者:本文基于 20 ...

  9. Python代码缩进与测试模块

    一.Python代码缩进 Python 函数没有明显的  begin 和  end ,没有标明函数的开始和结束的花括号.唯一的分隔符是一个冒号 ( : ),接着代码本身是缩进的. 例如:缩进  bui ...

随机推荐

  1. c++ 引用底层实现

    红色是我添加的,其他地方是原作者的. 主要是看了上面的这篇“从底层汇编理解 c++ 引用实现机制“的文章之后,觉得不错.就转了过来,同时,对文中的程序都在自己的机器上验证了一下. 使用的G++版本:g ...

  2. JavaBean与Map<String,Object>相互转换

    一.为什么要实现javaBean与Map<String,Object>相互转换 Spring中的BaseCommandController对象可以将传递过来的参数封装到一个JavaBean ...

  3. tomcat日志 之 catalina.log & localhost.log

    体会 catalina.out catalina.log 是tomcat的标准输出(stdout)和标准出错(stderr) cataliana.{yyyy-MM-dd}.log和localhost. ...

  4. 使用FileZilla向linux系统上传文件

  5. ios 使用ASIHTTPRequest来检查版本更新

    - (void) alertWithTitle: (NSString *)_title_ msg:(NSString *)msg delegate:(id)_delegate cancelButton ...

  6. mac java环境变量配置

    在终端输入java -version命令,如果没安装系统会自动弹出个东西让你安装,下载完之后打开,再点java -version,如果有显示就说明安装成功了. 在终端输入  ç 可以得到JAVA_HO ...

  7. ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案

    遇到问题: 在做计算机视觉课程作业,运动目标检测与跟踪时,在ubuntu系统下用kazam录制了一小段运动目标检测的视频,然后在课上展示时播放不出来,想着Mp4格式的不应该播放不出来啊.网上寻求了一番 ...

  8. virtIO之VHOST工作原理简析

    2017-07-19 一.前言 之前有分析过虚拟化环境下virtIO的实现,virtIO相关于传统的虚拟IO在性能方面的确提高了不少,但是按照virtIO虚拟网卡为例,每次虚拟机接收数据包的时候,数据 ...

  9. 由SOAP说开去 - - 谈谈WebServices、RMI、RPC、SOA、REST、XML、JSON

    引子: 关于SOAP其实我一直模模糊糊不太理解,这种模模糊糊的感觉表述起来是这样: 在使用web服务时(功能接口),本来我就可以通过安卓中固有的http类(使用http协议),来发送http请求,并且 ...

  10. Maven安装(linux系统)

    解压: 修改配置: export JAVA_HOME=/usr/java/jdk1..0_80 export MAVEN_HOME=/software/apache-maven- export PAT ...