bool是int的子类

a = True
print isinstance(a, int)
print True == 1
print False == 0

运行结果:

True
True
True

列表循环中的变量泄露

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 情况一
i = 1
li = [i for i in range(5)]
print i
# 情况二
i = 1
for i in range(5):pass
print i

运行结果:

4
4

列表推导式和for循环对于它们的迭代变量没有私有的作用域,为了避免泄漏变量的问题,不要在循环中使用外部同名变量。

lambda在闭包中会保存局部变量

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
alist = [lambda : i for i in range(5)]
print alist
for j in alist:print j()

运行结果:

4
4
4
4
4

原因是当赋值给alist的时候,lambda表达式就执行了i循环,直到 i =4,i会保留。

问题的本质在与python中的属性查找规则,LEGB(local,enclousing,global,bulitin),在上面的例子中,i就是在闭包作用域(enclousing),而Python的闭包是迟绑定,这意味着闭包中用到的变量的值,是在内部函数被调用时查询得到的。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 解决方法1:换成生成器
alist = (lambda : i for i in range(5))
for j in alist:print j()# 解决方法2:变闭包作用域为局部作用域
alist = [lambda i=i: i for i in range(5)]
for j in alist:print j()

运行结果:

0
1
2
3
4

重用全局变量

x=10
def demo():print xx=20print x
demo()

运行结果:

UnboundLocalError: local variable 'x' referenced before assignment

原因是某个作用域只要有该变量的赋值语句,该变量就是局部变量。在赋值之前局部变量不存在,所以报错。

解决方法:

x=10
def demo():global x  # 使用前加全局变量,后果是x变成了全局变量print xx=20print x
demo()

运行结果:

10
20

Python坑:bool是int的子类、列表循环中的变量泄露、lambda在闭包中会保存局部变量、重用全局变量相关推荐

  1. 微课|中学生可以这样学Python(例6.2):列表循环左移位

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第6章  函数 6.6  精彩例题分析与解答 例6.2  列表循环左移位 京东购买链接:https ...

  2. Python的bool类型

    写习惯了C#的代码,在想要将一个字符串'False'转换为bool型的时候,很自然的写了如下的Python代码: 看到上面的结果了没?是True.突然记起Python中除了''."" ...

  3. Python学习入门基础 -- 第四章 列表、元组、字典、字符串变量使用、变量进阶

    Python基础入门知识点总结传送门 第一章 认识Python.Python常用集成开发环境PyCharm 第二章 注释.变量基本使用.变量的命名 第三章 运算符.判断if语句.while和for循环 ...

  4. python变量进阶(可变不可变,局部变量和全局变量)

    变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引 ...

  5. python 闭包中引用的变量值变更问题

    python的闭包当内层函数引用外层函数的局部变量时,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变. 如下: def count():fs = []for i in range(1, 4) ...

  6. python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题

    python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...

  7. python之基础数据类型初识,int,bool,str 转化,for循环

    基础数据类型 一.总览 1.小知识 2. 基础数据类型总览 二.int.bool 1.int 2.bool 三.字符串str 1.索引切片步长 2.字符串中常见方法 1.capitalize() 2. ...

  8. python快乐数字_和你学Python之Python数据类型之数字、字符串和列表

    圣诞节快乐 昨天学了python基础,今天开始学习数据类型,加油鸭! 惨绿青年:python有6种数据,分别是number(数字).string(字符串).list(列表).dictionary(字典 ...

  9. python 列表转字符串_和你学Python之Python数据类型之数字、字符串和列表

    昨天学了python基础,今天开始学习数据类型,加油鸭! 惨绿青年:python有6种数据,分别是number(数字).string(字符串).list(列表).dictionary(字典).tupl ...

最新文章

  1. (转)winform下TCP通信的简单应用
  2. python基础知识~ 函数详解2
  3. 计算机存储的大小端模式解析
  4. cloc JAVA文件_工具-cloc代码行数统计工具
  5. 指纹图谱相似度评价软件_基于指纹图谱和网络药理学对当归四逆汤中桂枝的Qmarker预测分析...
  6. FineReport单行与数据库交互的方法
  7. Nodejs前端服务器压缩图片
  8. Android小項目之---ListView实现论坛管理效果(附源碼)
  9. java的Random类
  10. win11的附件在哪 windows11附件的查看方法
  11. c语言数组可以强制转换,C语言数组访问及强制转换
  12. 信息安全应急预案整理
  13. 亚马逊多账号操作如何判断关联
  14. springboot使用jdbc连接mysql数据库时测试连接错误
  15. WAIC | 九章云极方磊:Hypernets——自动化机器学习的基础框架
  16. Kubernetes系列(一)基于CentOS8部署Kubernetes1.19集群
  17. java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
  18. 速度最快的数据库---MEMSQL的安装与部署
  19. Linux内核与编程
  20. HTTP协议(深入http请求)

热门文章

  1. fft ocean注解
  2. Linux shell类型
  3. 《解释的工具:生活中的经济学原理 读书笔记6》
  4. HyperLink 鼠标经过时候显示全部文字
  5. 为什么说中国式报表特殊-3、报表格式
  6. 宇泽电影工作室网页HTML语言,4.4宇泽国际旅行社网页制作
  7. 【学习笔记】JS进阶语法一document对象
  8. 【Python 爬虫】 1、爬虫基础概念
  9. 【总结】MTO/MTS操作步骤及月末结算
  10. 网转 mm IOS 报表