【Python学习手册(第四版)】学习笔记12.1-语法规则拓展

news2024/12/26 11:37:15

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。

 本文是对【学习笔记10】-语句编写的通用规则 介绍过的语法概念进行复习并扩展。非常简单,应该是我写过的最简单的文章,阅读时间:约2-3分钟。


目录

语法规则

代码块分隔符

避免混合使用制表符和空格:Python中的新的错误检查

语句分隔符

示例

括号配对

反斜线

三重引号字符串常量

相同行上编写一个以上非复合语句


语法规则

一般来说,Python都有简单和基于语句的语法。但是,有些特性是我们需要知道的。

语句是逐个运行的,除非不这样编写

Python一般都会按照次序从头到尾执行文件中嵌套块中的语句,但是像if(还有循环)这种语句会使得解释器在程序内跳跃。Python经过一个程序的路径叫做控制流程,像if这类会对其产生影响的语句,通常叫做控制流程语句。

块和语句的边界会自动检测

Python的程序块中没有大括号或"being/end"等分隔字符;反之,Python使用首行下的语句缩进把嵌套块内的语句组合起来。同样地,Python语句一般是不以分号终止的,一行的末尾通常就是该行所写语句的结尾。

复合语句=首行+“:”+缩进语句

ython中所有复合语句都遵循相同格式:首行会以冒号终止,再接一个或多个嵌套语句,而且通常都是在首行下缩进的。缩进语句叫做块(有时叫做组)。在if语句中,elif和else分句是if的一部分,也是其本身嵌套块的首行。

 空白行、空格以及注释通常都会忽略

文件中空白行将忽略(但在交互模式提示符下不会)。语句和表达式中的空格几乎都忽略(除了在字符串常量内,以及用在缩进时)。注释总是忽略:它们以#字符开头(不是在字符串常量内),而且延伸至该行的末尾。

文档字符串(docstring)会忽略,但会保存并由工具显示。

Python支持的另一种注释,叫做文档字符串(简称docstring)。和#注释不同的是,文档字符串会在运行时保留下来以便查看。文档字符串只是出现在程序文件和一些语句顶端的字符串中。Python会忽略这些内容,但是,在运行时会自动将其附加在对象上,而且能由文档工具显示。文档字符串是Python更大型的文件策略的一部分。

代码块分隔符

Python会自动以行缩进检测块的边界,也就是程序代码左侧的空白空间。缩进至右侧相同距离的所有语句属于同一块的代码。

块内的语句会垂直对齐,就好像在一栏之内。块会在文件末尾或者碰到缩进量较少的行时结束,而更深层的嵌套块就是比所在块的语句进一步向右缩进。

例如,图12-1示范了下列程序代码的块结构。

嵌套块代码:一个嵌套块以再往右缩进的语句开始,碰到缩进量较少的语句或文件末尾时就结束。 

这段代码包含了三个模块:第一个(文件顶层代码)完全没有缩进,第二个(位于外层if语句内)则缩进四格,而第三个(位于嵌套if下的print语句)则缩进八格。

通常来说,顶层(无嵌套)代码必须于第1栏开始。嵌套块可以从任何栏开始。缩进可以由任意的空格和制表符组成,只要特定的单个块中的所有语句都相同即可。

也就是说,Python不在乎怎么缩进代码,只在乎缩进是否一致

每个缩进层级使用4个空格或者一个制表符,这是通常的惯例,但是Python世界中没有绝对的标准。

例如下面的错误示例:

这段代码的正确的缩进版本如下所示——即便对于这样的一个人工编写的示例,正确的缩进也会使得代码看上去更好:

在Python中,制造空白的一种主要用途就是用于代码左侧作为缩进。

缩进其实是Python语法中的一部分,而不仅仅是编程风格:任何特定单一块中的所有语句都必须缩进到相同的层次,否则Python会报告语法错误

把缩进变成语法模型一部分,也强化了一致性,Python的语法偶尔描述成是“所见即所得”——每行程序代码毫不含糊的缩进就告诉了读者它属于什么地方。这种一致的外观让Python程序更易于维护和重用。

避免混合使用制表符和空格:Python中的新的错误检查

尽管可以使用空格或制表符来缩进,在一段代码块中混合使用这两者不是好主意,请使用其中的一种。

从技术上讲,制表符考虑到保留足够的空间以便把当前的栏数按照8的倍数来移动,并且,如果持续混合制表符和空格的话,代码也可以工作。

然而,这样的代码可能很难修改。更糟糕的是,混合制表符和空格会使得代码难以阅读——制表符在另一个程序员的编辑器中看上去与在你的编辑器中的样子有很大不同

语句分隔符

Python的语句一般都是在其所在行的末尾结束的。不过,当语句太长、难以单放在一行时,有些特殊的规则可用于使其位于多行之中。

使用括号对可横跨数行

如果在封闭的()、{}或[]这类配对中编写代码,Python就可让你在下一行继续输入语句。例如,括号中的表达式以及字典和列表常量,都可以横跨数行。语句不会结束,直到Python解释器到达你输入闭合括号)、}或]所在的行。

超出该语句之外的第2行可在任何缩进层次开始,而且应该尽可能让它们垂直对齐以便于阅读。

以反斜线结尾可横跨数行

有点过时的功能,但是如果语句需要横跨数行,你也可以在前一行的末尾加上反斜线(\),以表示你要在下一行继续输入。

也可以在较长结构两侧加上括号以便继续输入,反斜线几乎都已经不再使用了。这种方法容易导致错误:偶尔忘掉一个\通常会产生语法错误,并且可能导致下一行默默地被错误地看做一条新语句,这会产生不可预期的结果。

字符串常量有特殊规则

三重引号字符串块可以横跨数行。相邻的字符串常量是隐式地连接起来的,当与前面提到的开放对规则一起使用的时候,把这个结果包含到圆括号中就可以允许它跨越多行。

其他规则

可以用分号终止语句:这种惯例有时用于把一个以上的简单(非复合)语句挤进单个的行中。

注释和空白行也能出现在文件的任意之处。注释(以#字符开头)则在其出现的行的末尾终止。

示例

括号配对

使用括号配对规则让行保持连续,可以把受界线限制的内容放在任意数目的行中:

>>> l = ['good',
     'bad',
     'ugly']

括号可以存放表达式、函数参数、函数的首行、元组和生成器表达式,以及可以放到花括号中的任何内容(字典以及集合常量、集合和字典解析)等内容。

反斜线

使用反斜线来使这一行继续也是可以的,但是这在实际的Python中并不是很常见。

>>> if a ==b and c == d and \
    d == e and f == g:
        print(1)

任何表达式都可以包含在括号内,如果程序代码需要横跨数行,通常可以改用开放对技术——直接把语句的部分包含在圆括号中:

>>> if (a ==b and c == d and 
   d == e and f == g):
	print(1)

实际上,反斜线不太好用,因为太容易不被注意并且太容易漏掉。

下面的例子,x通过反斜杠赋值为10,这是本来的意图;如果偶然漏掉了反斜杠,那么,x赋值为6,并且不会报告错误(+4本身是一个有效的表达式语句)。

在带有一个复杂赋值的实际程序中:

>>> x = 1 + 2 + 3 \
    + 4
>>> x
10
>>> 

三重引号字符串常量

如果两个字符串常量彼此相邻地出现,它们会合并,就好像在它们之间已经放置了一个+——当和开放对规则一起使用的时候,包括在圆括号中就允许这种形式跨越多行。

例如:

>>> s = """
aa
bb
cc"""
>>> s
'\naa\nbb\ncc'

>>> s = ('aa'
     'bb'    #评论忽略
     'cc')    
>>> s
'aabbcc'

第一个示例在换行处插入换行字符,并且把'\naaaa\nbbbb\ncccc'赋给S,第二个示例隐式地合并,并且把S赋值为'aaaabbbbcccc'。第二种形式中的注释被忽略。

相同行上编写一个以上非复合语句

Python允许在相同行上编写一个以上的非复合语句(语句内未嵌套其他语句),由分号隔开。

有些程序员使用这种形式来节省程序文件的量,但是,如果坚持多数代码都是让一个语句一行,会使程序更具可读性:

>>> x = 1; y = 2;print(x)
1
>>> 

Python可把复合语句的主体上移到首行,只要该主体只是简单(非复合)语句。简单if语句及单个测试和动作常常用到这种用法:

>>> if 1: print('hi')

hi
>>> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习Mybatis及其简单配置

目录 JDBC的弊端 为什么要有ORM模型? 什么是ORM模型? Mybatis和hibernate 区别: Mybatis解决了jdbc的问题 为什么选择myBatis(优势)? 什么是MyBatis 主配置文件(config文件) Mapper文件…

TwinCAT3 C++环境安装教程

文章目录 下载windos插件:下载地址,安装这个插件是为了能在 TwinACT 3 工程环境创建和编辑 C模块。 点击下载的文件,打开其中的KitSetup.exe 在打开的窗口中选择"Build Environment"后点击OK 弹出的窗口点击ok 选择“I agree”后点击…

从零逐步实现SVM(含公式推导)上

支持向量机(SVM)相关概念 支持向量:支持或支撑平面上把两类类别划分开的超平面的向量点线性可分支持向量机:通过硬间隔最大化,学习一个线性分类器线性支持向量机:通过软间隔最大,学习一个线性分…

掌握时间的秘密:pytz 库的神奇之旅

文章目录 掌握时间的秘密:pytz 库的神奇之旅背景:为何选择 pytz?pytz 库是什么?如何安装 pytz?函数的使用方法场景应用常见问题与解决方案总结 掌握时间的秘密:pytz 库的神奇之旅 背景:为何选择…

【Vue3】默认插槽

【Vue3】默认插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内…

学习c语言第18天(字符串和内存函数)

1.函数介绍 1.1 strlen size_t(就是无符号整形) strlen(const char * str); 字符串已经\0作为结束标志,strlen函数返回的是在字符串中\0前面出现的字符个数(不包 含\0) 参数指向的字符串必须要以\0结束。 注意函数的返回值为size_t,…

Java并发—Java内存模型以及线程安全

目录 一、Java内存模型 JMM的核心概念 二、什么是线程安全? 1、原子性 2、有序性 3、可见性 三、如何确保线程安全? 1、sychronized关键字 2、Lock接口和其实现 3、volatile关键字 4、Atomic原子类 5、ThreadLocal 6、不可变对象 7、并发集…

电商数据采集封装API的详细步骤分享(API测试实例)

在当今的电商行业中,数据采集已成为企业获取市场洞察、优化运营策略、提升用户体验的重要手段。而封装电商数据采集的API接口,则是将这一复杂过程标准化、模块化的有效方式。本文将详细分享电商数据采集封装API的步骤,并通过一个实际的API测试…

努力努力努力的第十四天(2024.7.31)

昨天日期写错了写成2020.7.30,应该是2024.7.31(手滑了哈哈哈) 1.行列转换 效果演示: 这是未经行列转换操作的t_score表: 这是经过行列转换后的t_score表: 第一步:确定初步的做法 使用分组查询(group by…

20240731在WIN10下数框框的方法【CPU】

20240731在WIN10下数框框的方法【CPU】 2024/7/31 20:14 百度:WINDOWs 10 多核CPU 数框框 win10怎么数框框 1、首先打开win10系统,进入任务管理器。 2、其次点击CPU使用率窗口,鼠标悬停在右边的窗口按右键。 3、最后将图形更改为:…

【计算机网络】http协议的原理与应用,https是如何保证安全传输的

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

优化|高性能模块预测控制求解器

本文介绍的是另外一种针对模块控制MPC问题的一种高效求解方法。High-Performance Small-Scale Solvers for Linear Model Predictive Control,Gianluca Frison, Hans Henrik Brandenborg Srensen, Bernd Dammann, John Bagterp Jrgensen [1]。本文讲了HPIPM的前身&a…

Phalco安装过程以及踩的一些坑(mac环境)

一 背景 公司用Phalcon框架好长时间了,中途发现了一些Phalcon使用的上的问题,于是想在本地搭建一套Phalcon的环境,方便排查问题使用。 二 Mac系统下的安装 看了很多说法,最终发现还是官网给力,安装Phalcon使用下列命令即可(前提条件是PHP已安装好,工具pecl也安装好了):…

2024-07-31 Android studio gradle、sdk、ndk 等路径记录

一、gradle的下载路径:C:\Users\user\.gradle\wrapper\dists 二、NDK下载路径C:\Users\user\AppData\Local\Android\Sdk\ndk 三、SDK下载路径:C:\Users\user\AppData\Local\Android\Sdk\platforms

数据结构的基本概念与算法

数据结构的基本概念与算法 什么是数据? 数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合;总结来说 -> 数据就是计算机程序加工的原料; 数据元素、数据项&#xf…

Python+Vue3+onlyoffice开发私有化文档管理系统实战笔记 20240731

之前进度 表字段设计如下: const columns [{title: 名称,key: name,dataIndex: name,},{title: 类型,key: category,dataIndex: category,},{title: 作者,key: author,dataIndex: author,},{title: 路径,key: path,dataIndex: path,},{title: 最近访问时间,key: l…

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术–spark计算引擎,本篇文章主要讲述了:spark的概念,spark的起源,Spark的计算框架,Spark组…

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙(升级版)Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中,接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME(名字) [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否(是否报错) 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…