两行python代码,你是否可猜到运行结果
2024-08-25 18:36:38
两行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'}
原因分析
见程序中的注释
最新文章
- 相克军_Oracle体系_随堂笔记012-undo
- Stanford NLP 学习笔记2:文本处理基础(text processing)
- VC++ 判断文件或文件夹是否存在的快捷方法 _access
- spring batch部分
- 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts.dispatcher.FilterDispatcher是什么区别?
- HIHO 线段树(单点)
- Openjudge计算概论-DNA排序
- 学习资料 数据查询语言DQL
- 解决DataSnap支持的Tcp长连接数受限的两种方法
- 获取Application中的spring容器
- HTML5 web开发时遇到的一个奇葩问题。
- C/C++ 知识点---C语言关键字(32个)
- HX711初步处理记录
- 【.NET Core项目实战-统一认证平台】第一章 功能及架构分析
- nginx &;&; apache 图片代理
- a链接QQ客服 在小框口中打开 感觉不错
- SpringCloud设定Feign底层实现
- 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
- VC中链接错误,提示string重定义
热门文章
- HDU 4462Scaring the Birds(枚举所有状态)
- MQTT-SN协议乱翻之功能描述
- windows下的mysql迁移到linux下
- Codeforces 603E Pastoral Oddities
- 在github上参与开源项目日常流程
- poj3764 The XOR Longest Path【dfs】【Trie树】
- C++ Websites
- Only a type can be imported. classname resolves to a package的解决
- HanLP https://pypi.python.org/pypi/sumy/
- 十六.MySQL存储过程