Python语言防坑小技巧
一.赋值即定义
1.运行以下代码会出现报错
#!/usr/bin/env python
#_*_conding:utf-8_*_
x = 100
def outer():def inner():x += 100 #其实这里等效于"x = x + 100",我们直到这是一个赋值语句,会优先计算右边的等式,即"x + 100".而在此时由于x变量赋值即定义,即此时的x和全局作用域的x并非同一个对象。print(x)return inner
foo = outer()
foo()
2.使用global关键字解决以上报错
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/env python
#_*_conding:utf-8_*_
x = 100
def outer():def inner():global x #注意,我们先要在inner作用域中使用全局作用域的同名x变量就得优先使用"global"关键字进行声明。x += 100print(x)return inner
foo = outer()
foo()#以上代码输出结果如下:
200
3.不推荐使用global
global总结
x+=1这种是特殊形式产生的错误的原因?先引用后赋值,而python动态语言是赋值才算定义,才能被引用。解决办法,在这条语句前增加x=0之类的赋值语句,或者使用global告诉内部作用域,去全局作用域查找变量定义
内部作用域使用x = 5之类的赋值语句会重新定义局部作用域使用的变量x,但是,一旦这个作用域中使用global声明x为全局的,那么x=5相当于在为全局作用域的变量x赋值
global使用原则
外部作用域变量会内部作用域可见,但也不要在这个内部的局部作用域中直接使用,因为函数的目的就是为了封装,尽量与外界隔离
如果函数需要使用外部全局变量,请使用函数的形参传参解决
一句话:不用global。学习它就是为了深入理解变量作用域.
二.列表中的"+“与”+="的区别
1.观察以下代码
#!/usr/bin/env python
#_*_conding:utf-8_*_def demo(x=[]):x += [1] #就地修改前一个列表,在其后追加后一个列表。就是extend方法。print(x)print(demo.__defaults__) #我们可以查看默认参数列表demo() demo()print(demo.__defaults__)
#发现demo函数被调用2次后,默认参数的值也在跟随着变化!其原因是demo()执行完后弹栈会消亡,但解释器始终保留了一份"def demo(x=[])"的函数签名,这里面的x变量会随着解释器的消亡而消亡,除非我们使用"del"关键字去现实的删除该函数!如果我们这样干的话,后续就无法访问到该函数啦!#以上代码输出结果如下:
([],)
[1]
[1, 1]
([1, 1],)#!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjiedef demo(x=[]):x += [1] #就地修改前一个列表,在其后追加后一个列表。就是extend方法。print(x)print(demo.__defaults__) #我们可以查看默认参数列表demo() demo()print(demo.__defaults__) #发现demo函数被调用2次后,默认参数的值也在跟随着变化!其原因是demo()执行完后弹栈会消亡,但解释器始终保留了一份"def demo(x=[])"的函数签名,这里面的x变量会随着解释器的消亡而消亡,除非我们使用"del"关键字去现实的删除该函数!如果我们这样干的话,后续就无法访问到该函数啦!#以上代码输出结果如下:
([],)
[1]
[1, 1]
([1, 1],)
2.列表防坑总结
列表的"+“和”+="的区别:
"+"表示两个列表合并并返回一个全新的列表。
"+="表示,就地修改前一个列表,在其后追加一个列表。就是extend方法。
3.注意引用变量的是可以被就地修改的(以函数的默认值参数为例)
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/env python
#_*_conding:utf-8_*_def demo2(x=1,y="abc",z={},*args,m=100,n,**kwargs):print(x,y,z) #打印位置参数print(m,n) #打印key-only关键词参数print(z.setdefault("abc","mn")) #我们为"z"变量设置一组键值对print(demo2.__defaults__,demo2.__kwdefaults__)
#我们知道"__defaults__"保留的是位置参数相关信息,而"__kwdefaults__"保留的是关键字相关信息demo2(n=200)demo2(z = {},n = 200)print(demo2.__defaults__,demo2.__kwdefaults__) #我们发现默认的"z"变量值是被咱们有意修改啦~#以上代码输出结果如下:
(1, 'abc', {}) {'m': 100}
1 abc {}
100 200
mn
1 abc {}
100 200
mn
(1, 'abc', {'abc': 'mn'}) {'m': 100}
Python语言防坑小技巧相关推荐
- 填坑总结:python内存泄漏排查小技巧
摘要:最近服务遇到了内存泄漏问题,运维同学紧急呼叫解决,于是在解决问题之余也系统记录了下内存泄漏问题的常见解决思路. 本文分享自华为云社区<python内存泄漏排查小技巧>,作者:luti ...
- 菜鸟教程python3 mysql_python基础教程使用Python操作MySQL的小技巧
1.获取插入数据的主键id import pymysql database = pymysql.connect( host="127.0.0.1", port=3306, user ...
- 10个Python进行数据分析的小技巧
Pandas中数据框数据的Profiling过程 Profiling(分析器)是一个帮助我们理解数据的过程,而Pandas Profiling是一个Python包,它可以简单快速地对Pandas 的数 ...
- c语言io口置1,AVR C语言编程的小技巧-IO口置位
avr AVR C语言编程的小技巧-IO口置位 给单片机IO口置位是编程用的比较多的操作,这是我在学习C语言编程中的一点小小心得,希望大家觉得有用! AVR 单片机的IO口是标准的双向端口,首先要设置 ...
- c语言io口置1,AVR_C语言编程的小技巧-IO口置位.doc
AVR C语言编程的小技巧-IO口置位 给单片机IO口置位是编程用的比较多的操作,这是我在学习C语言编程中的一点小小心得,希望大家觉得有用!AVR 单片机的IO口是标准的双向端口,首先要设置IO口的状 ...
- 三周写出高性能的Python代码,这些小技巧你值得一试。
1一个不上进的 Python 使用者 我是一个有 C 语言背景的开发者.最近转做了 Python,平时用 Python 还算 6,这周在给新员工分享工作之后,有个小孩跑来问我:"哥,你是学 ...
- 6行代码,带你学会Python最有用的小技巧【收藏不后悔】
这篇博文主要介绍了Python有关的代码片段,通过简洁易懂的代码,给一些基础不是特别好的朋友提供便利,有利于学习,仅提供了几种小技巧的方法,希望对你们有帮助. 一.将 Python 3 和 pip 3 ...
- python少量数据分析代码_10个可以快速用Python进行数据分析的小技巧!
一些小提示和小技巧可能是非常有用的,特别是在编程领域.有时候使用一点点黑客技术,既可以节省时间,还可能挽救"生命". 一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正 ...
- Python技术分享:Python学习的一些小技巧
"人生苦短,我选Python".那么,你真的掌握了Python吗?下面小千为大家介绍初学Python的17个学习小技巧! 1.交换变量 有时候,当我们要交换两个变量的值时,一种常规 ...
最新文章
- 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码
- 用命令行查看局域网的其他在线的ip
- Java中的显示锁 ReentrantLock 和 ReentrantReadWriteLock
- JMeter脚本获取变量名、检验字符串值
- python文件读取输出-Python 读写文件中数据
- libc glibc glib 的关系
- nssl1156-今天你AK了吗?【康托展开,高精度,二分答案,树状数组】
- Linux netfilter源码分析(4)
- 编程语言----00程序员常用网站
- C#中跨线程操作控件
- [转载] 学Python的笔记(在网上自学的总结)
- paip.jdbc 连接自动释放的测试
- python遍历文件夹内文件并检索文件中的中文内容
- 如何从12306网站下载自己喜欢的手机铃声
- 数字化施工管理太玄乎?“要点+案例”让你一看就懂
- R语言技巧:读取excel文件
- 工作一周随笔记———一个即将踏入编程的少年
- EF的Code First开发系列之动手写第一个Code First应用
- webp文件怎么打开?webp压缩工具推荐
- TTL怎么计算拉电流和灌电流_配电线路安全电流如何计算?低压供电线路导线怎么选择?图文详解...