代码块可以使得一段python代码作为一个单元、一个整体执行。以下是 官方手册 的描述。
所以,有以下几种类型的代码块:

  1. 模块文件是一个代码块
  2. 函数体是一个代码块
  3. class的定义是一个代码块
  4. 交互式(python idle)的每一个命令行都是一个独立的代码块
  5. 脚本文件是一个代码块
  6. 脚本命令是一个代码块(python -c “xxx”)
  7. eval()和exec()中的内容也都有各自的代码块

代码块的作用是组织代码,同时意味着退出代码区块范围就退出了作用域范围。例如退出函数区块,就退出了函数的作用域,使得函数内的本地变量无法被函数的外界访问。

此外,python是解释性语言,读一行解释一行,这意味着每读一行就忘记前一行。但实际上更严格的说法是读一个代码块解释一个代码块,这意味着读代码块中的内容时,是暂时记住属于这个代码块中所读内容的,读完整个代码块后再以统筹的形式解释这个代码块。
先说明读一行解释一行的情况,也就是每一行都属于一个代码块,这个只能通过python的交互式工具idle工具来测试:

>>> x=2000
>>> y=2000
>>> x is y
False
>>> x=2000;y=2000
>>> x is y
True

理论上分号是语句的分隔符,并不会影响结果。但为什么第一个x is yFalse,而第二个x is yTrue
首先分析第一个x is y。由于交互式工具idle中每一个命令都是一个单独的语句块,这使得解释完x=2000后立刻就忘记了2000这个数值对象,同时忘记的还有x变量本身。然后再读取解释y=2000,因为不记得刚才解释的x=2000,所以会在内存中重新创建一个数值结构用来保存2000这个数值,然后用y指向它。换句话说,x和y所指向的2000在内存中是不同的数据对象,所以x is y为False
下面的x is y返回True:

>>> x=2000;y=2000
>>> x is y
True

因为python按行解释,一个命令是一个代码块。对于x=2000;y=2000,python首先读取这一整行,发现x和y的数值对象都是2000,于是做个简单优化,等价于x,y=2000,2000,这意味着它们属于一个代码块内,由于都是2000,所以只会在内存中创建一个数据对象,然后x和y都引用这个数据对象。所以,x is y返回True。
idle工具中每个命令都是独立的代码块,但是py文件却是一个完整的代码块,其内还可以嵌套其它代码块(如函数、exec()等)。所以,如果上面的分行赋值语句放在py文件中,得到的结果将是True。
例如:

x = 2000
y = 2000
print(x is y)   # True
def f1():z=2000z1=2000print(x is z)   # Falseprint(z is z1)  # True
f1()

python先读取x=2000,并在内存中创建一个属于全局作用域的2000数据对象,再解释y=2000的时候,发现这个全局对象2000已经存在了(因为x和y同处于全局代码块内),所以不会再额外创建新的2000对象。这里反映出来的结果是"同一个代码块内,虽然仍然是读一行解释一行,但在退出这个代码块之前,不会忘记这个代码块中的内容,而且会统筹安排这个代码块"。
同理def f1()内的代码块,因为z是本地作用域的变量,更标准的是处于不同代码块内,所以会在本地作用域内存区创建新的数据对象2000,所以x is z返回False。根据前面的解释,z1 is z返回True。
再回顾python3作用域中例3:

x= 1
def func():print xx= 2
print func()

报错信息:

UnboundLocalError: local variable 'x' referenced before assignment

当执行到def语句的时候,因为def声明函数,函数体是一个代码块,所以按照代码块的方式读取属于这个代码块中的内容。首先读取print(x),但并不会直接解释,而是会记住它,并继续向下读取,于是读取x=4,这意味着x是一个本地变量。然后统筹安排整个代码块,将print(x)的x认为是本地变量而非全局变量。注意,直到def退出的时候都还没有进行x的赋值,而是记录了本地变量x,赋值操作是在函数调用的时候进行的。当调用函数func()的时候,发现print(x)中的x是本地变量,但因为还没有赋值,所以报错。
但是再看下面的,为什么又返回True?

>>> x=256
>>> y=256
>>> x is y
True

因为Python在启动的时候就在内存中预先为常用的较小整数值(-5到256)创建好了对象,因为它们使用的非常频繁(有些在python的内部已经使用了)。所以,对于这个范围内的整数,都是直接引用,不会再在内存中额外创建新的数值对象,所以x is y总是返回true。甚至,这些小值整数可以跨作用域:

x = 3
def f1():y=3print(x is y)   # True
f1()

原文链接:https://www.cnblogs.com/f-ck-need-u/asp/9925021.html#%E4%BB%A3%E7%A0%81%E5%9D%97%E7%BB%86%E8%BF%B0%E5%BF%85%E7%9C%8B

python3代码块相关推荐

  1. Python3常用代码块汇总

    本文章主要用于平时Python3学习和使用中积累的比较常用的代码块.代码都是经过验证可行的. 一.基本数据类型 字符串 字符串常识: 可以利用反斜杠(\)对双引号转义:",或者用单引号引起这 ...

  2. 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

  3. python代码块-python代码块

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 开发准备cas 的 python sdk 包含了用于访问和操作 cas ...

  4. python中控制代码块逻辑关系_一、Python基础知识

    1.1 Python简介 (1)解释型语言 解释型语言在运行程序的时候才逐行翻译.运行. ①优点: 有良好的平台兼容性,在任何环境中都可以运行(安装了解释器)灵活,修改代码的时候直接修改就可以,可以快 ...

  5. python代码块使用缩进来表示_python 基础语法

    1.编码 默认情况下,Python3源码文件以UTF-8编码,所有字符串都是unicode字符串.当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- 上述定义允 ...

  6. Markdown语法(二)——链接代码块

    前言:继上一篇简单的阐述标题和分割线后,笔者一直在排版美观的路上努力.这篇文章介绍下如何在文章中插入一些其他的元素:图片.链接.代码块. 链接   我们都希望在网页上显示一个网址时,它可以被直接点击而 ...

  7. Vs code 进行硬件设计实用插件-语法高亮、语法检查、自动例化、Testbench生成、对齐、代码块等

    目录 1. ISE.Vivado编辑器设置 1.1 ISE 设置 1.2 Vivado 设置 2. 语法高亮.语法检查和自动例化 2.1 配置ctags 2.2 配置语法检查 2.3 自动例化 3. ...

  8. python中使用什么表示代码块、不需要使用大括号_Python3 基础语法

    Python3 基础语法 阅读 (129) | 发布于 2020-05-11 18:12:32 编码 # -*- coding: utf-8 -*- 这是代码的编码方式.不是程序要处理的数据的编码方式 ...

  9. python快速注释html5_python注释代码块

    atom python怎么注释代码块 script插件 是运行代码时使用,安装成功后,可以打开.py文件,快捷键ctrl+shift +b 运行python代码. 插件升级: 插件的初始安装可以使用a ...

最新文章

  1. HDOJ 1236 排名(练耐心题)
  2. 2018ICPC南京赛区网络选拔B The writing on the wall (单调栈)
  3. 博物馆守卫问题(世界名画展览馆)
  4. REBOOT Reload - 可安装在优盘的 Windows 和 DOS 启动盘
  5. java创建对象过七夕,想 new 个对象过七夕,她却抛了异常
  6. 论文阅读 - Beat Tracking by Dynamic Programming
  7. 【美团语音交互部】 NLP/知识图谱/语音识别等算法职位开放招聘!
  8. ruby hash添加数据_如何在Ruby中向Hash添加元素?
  9. ASP.NET的CreateUserWizard
  10. Dotnet程序集自动生成版本号
  11. 讨论:癌症能被人类攻克吗
  12. OpenCV(图像处理)—访问像素的三种方法
  13. 罗技驱动HUB安装,安装不上,一次性解决问题
  14. linux文件类型elf,ELF文件格式的三种类型
  15. 庄子:谁知南华秋水意?
  16. 【聚客通scrm】-微信个人号sdk实现的微信云控方案
  17. c语言unit id是什么,小程序再升级之什么是UnitionID
  18. ubantu软件安装
  19. Ubuntu 14.04(64位)安装和使用docker
  20. 美元兑人民币汇率对黄金价格的预测

热门文章

  1. python工程师证书-【一个合格的Python工程师需要达到怎样的编程水平】
  2. python入门教程非常详细-Python 基础教程
  3. yolov5 v3.0训练出现KeyError错误
  4. UVa10382 - Watering Grass(贪心算法)
  5. 数学:Burnside引理与Pólya定理
  6. 毕业设计第四次任务书
  7. 什么是Asp.net Core?和 .net core有什么区别?
  8. tomcat 随windows启动
  9. show processlist结果筛选(转)
  10. iOS数据存储简要笔记