两行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'}

原因分析

见程序中的注释

最新文章

  1. 相克军_Oracle体系_随堂笔记012-undo
  2. Stanford NLP 学习笔记2:文本处理基础(text processing)
  3. VC++ 判断文件或文件夹是否存在的快捷方法 _access
  4. spring batch部分
  5. 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)
  6. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts.dispatcher.FilterDispatcher是什么区别?
  7. HIHO 线段树(单点)
  8. Openjudge计算概论-DNA排序
  9. 学习资料 数据查询语言DQL
  10. 解决DataSnap支持的Tcp长连接数受限的两种方法
  11. 获取Application中的spring容器
  12. HTML5 web开发时遇到的一个奇葩问题。
  13. C/C++ 知识点---C语言关键字(32个)
  14. HX711初步处理记录
  15. 【.NET Core项目实战-统一认证平台】第一章 功能及架构分析
  16. nginx &amp;&amp; apache 图片代理
  17. a链接QQ客服 在小框口中打开 感觉不错
  18. SpringCloud设定Feign底层实现
  19. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
  20. VC中链接错误,提示string重定义

热门文章

  1. HDU 4462Scaring the Birds(枚举所有状态)
  2. MQTT-SN协议乱翻之功能描述
  3. windows下的mysql迁移到linux下
  4. Codeforces 603E Pastoral Oddities
  5. 在github上参与开源项目日常流程
  6. poj3764 The XOR Longest Path【dfs】【Trie树】
  7. C++ Websites
  8. Only a type can be imported. classname resolves to a package的解决
  9. HanLP https://pypi.python.org/pypi/sumy/
  10. 十六.MySQL存储过程