两行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. Python学习之k-近邻算法

    1. K-近邻算法 # coding=utf-8 from numpy import * import operator def createDataSet(): group = array([[1. ...

  2. Ubuntu远程登录服务器--ssh的安装和配置

    ssh是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全. 安装ssh sudo apt-get update sudo apt-get install openssh-serve ...

  3. linux 中怎样返回上一层目录的命令?

    可以使用cd命令,cd命令的功能是切换到指定的目录:命令格式:cd [目录名]目录名有几个符号有特殊的含义,“..”代表上一级目录.“~”代表HOME目录.“-”代表前一目录.因此返回上一级目录可以使 ...

  4. 几行小代码,将Testlink的xml用例导入至excel

    最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意. 那求人不如尔 ...

  5. 有关velocity的资料(等待整理)

    proxy-target-class="true" 与proxy-target-class="false"的区别: proxy-target-class属性值决 ...

  6. mysql数据库新插入数据,需要立即获取最新插入的id

    在MySQL中,使用auto_increment类型的id字段作为表的主键.通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况, ...

  7. 传智播客微金所项目实战移动web开发

    1.源码笔记 我的源码+笔记(很重要):链接: http://pan.baidu.com/s/1kULKqcJ 感谢传智播客项目相关视频:1.6天 链接: https://pan.baidu.com/ ...

  8. Oracle下select语句

    先看scott下自带的emp表 empno:编号  ename:名字  Job:职位  mgr:上级编号 hiredate:入职时间 sal:薪水 comm:奖金 deptno:部门编号 部门表dep ...

  9. Golang OOP、继承、组合、接口

    http://www.cnblogs.com/jasonxuli/p/6836399.html   传统 OOP 概念   OOP(面向对象编程)是对真实世界的一种抽象思维方式,可以在更高的层次上对所 ...

  10. LaTeX:Question & Answer

    tikz 宏包中循环 foreach 的使用方法 矩阵环境输入 displaystyle 分式与垂直间距的设置 在 LaTeX 中使用 mathrsfs 宏包遇到 "rsfs7.tfm&qu ...