热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python学习第五篇:语句和语法

Python程序是语句构成的,语句包含表达式,表达式嵌套在语句中,包含变量和常量,用于处理对象。Python的语法实质上是由

Python程序是语句构成的,语句包含表达式,表达式嵌套在语句中,包含变量和常量,用于处理对象。Python的语法实质上是由表达式、语句和代码块构成的。语句是由表达式构成的,代码块是由多个语句构成的复合语句。

代码块是具有一定格式的多个语句,在Python中,垂直对齐的语句是一个代码块,代码块以冒号:开始,以结束缩进为结束。典型的代码块如下所示:

if x >y :print('x>y')print(x-y)
else &#xff1a;print(&#39;x<&#61;y&#39;)

Python语法的特点是&#xff1a;

  • 测试条件的两端不需要小括号&#xff0c;例如  if x
  • 语句的终止不需要以分号结尾&#xff0c;一行的结束会自动终止该行的语句&#xff1b;
  • 缩进的结束就是代码块的结束&#xff0c;Python以垂直对齐的方式来组织代码块&#xff1b;
  • Python只能使用单行注释&#xff0c;#之后的文本作为注释内容。
  • Python中的所有语句都是实时运行的&#xff0c;并没有独立的编译时间。

一&#xff0c;变量命名

变量是表达式的重要组成部分&#xff0c;Python程序离不开变量&#xff0c;变量是对象的引用&#xff0c;对象是存储数据的结构。

1&#xff0c;变量命名规则

  • 变量名以 下划线或字母 开头&#xff0c;后面接任意数目的字符、数字或下划线&#xff1b;
  • 变量名是区分大小写的&#xff0c;包括创建的变量名以及保留字&#xff1b;
  • 自定义的变量名不能使用保留字。

2&#xff0c;命名惯例

  • 以单一下划线开头的变量名(_x)不会被from module import * 语句导入&#xff1b;
  • 前后有下划线的变量名是系统定义的变量名(__xx__)&#xff0c;对解释器有特殊意义&#xff1b;
  • 以双下划线开头&#xff0c;但结尾没有下划线的变量名(__xx)是类的本地变量&#xff1b;
  • 通过交互模式运行时&#xff0c;只有单个下划线(_)的变量名会保存最后表达式的结果

二&#xff0c;Python的语法风格

Python的复合语句都是首行以&#xff1a;结尾&#xff0c;然后是嵌套的语句块&#xff0c;嵌套的语句块是由相同缩进的语句构成的。

header_line :nested_statement_1nested_statement_2...

1&#xff0c;缩进

不需要在代码中输入任何语法上用来表名嵌套代码块的开始和结尾&#xff0c;取而代之的是&#xff0c;把嵌套代码语句向右缩进相同的距离&#xff0c;Python使用语句的实际缩进来确定代码块的开始和结尾。

所谓缩进&#xff0c;是指嵌套语句左侧的空白&#xff0c;Python并不在乎怎么缩进(可以使用空格或制表符)或者缩进多少(可以使用任意多个空格或制表符)&#xff0c;强烈推荐使用一个制表符代表一个缩进。

语法规则规定&#xff1a;一个单独的嵌套代码块中的所有语句必须缩进相同的距离&#xff0c;否则&#xff0c;就会出现语法错误。

2&#xff0c;多行语句

Python语句一个语句横跨多行&#xff0c;只需要使用一对括号就可以了&#xff1a;小括号&#xff0c;中括号&#xff0c;大括号。任何括在括号中的程序代码都可横跨多行。语句会一直运行&#xff0c;直到Python遇到关闭的括号。

mlist&#61;[1,2,3]x&#61;(a&#43;b&#43;c&#43;d)if (a&#61;&#61;1and b&#61;&#61;2):   print(&#39;OK&#39;)

三&#xff0c;赋值语句

Python中赋值语句把对象赋给一个变量名&#xff0c;基本形式是由表达式&#xff0c;变量和 &#61; 构成的&#xff0c;左侧可以是变量名或对象元素&#xff0c;右侧是表达式。例如&#xff0c;赋值语句基本形式是&#xff1a;a&#61;1&#xff0c;把1赋值给变量a

赋值语句的特性是&#xff1a;

  • 赋值语句建立变量名和对象之间的引用&#xff0c;而不是复制对象&#xff1b;
  • 变量名在首次赋值时会被创建&#xff1b;
  • 变量名在引用前必须赋值。

1&#xff0c;赋值语句的基本形式

使用赋值符号&#61;&#xff0c;把1赋值给变量a&#xff0c;通常情况下&#xff0c;使用基本赋值语句就可以满足程序设计的需要&#xff1a;

a&#61;1

2&#xff0c;序列赋值

序列是指元组&#xff0c;列表和字符串&#xff0c;当在”&#61;“左边编写成元组或列表时&#xff0c;Python把右边的对象和左边的变量从左至右按照位置相互匹配&#xff0c;注意&#xff1a;变量的数量和序列项的数量必须一致。

元组赋值形式&#xff0c;把1&#xff0c;2&#xff0c;3分别赋值给变量a&#xff0c;b&#xff0c;c&#xff1a;

a,b,c&#61;1,2,3

列表赋值形式&#xff0c;把3&#xff0c;4&#xff0c;5分别赋值给变量a&#xff0c;b&#xff0c;c&#xff1a;

[a,b,c]&#61;[3,4,5]

序列赋值运算&#xff0c;把字符串序列中的字符分别赋值给a&#xff0c;b&#xff0c;c&#xff1a;

>>> a,b,c&#61;&#39;123&#39;
>>> a,b,c
(&#39;1&#39;, &#39;2&#39;, &#39;3&#39;)

符合赋值运算&#xff0c;字符串既可以看作是一个序列&#xff0c;也可以看作是一个对象&#xff1a;

>>> ((a,b),c)&#61;&#39;12&#39;,&#39;345&#39;
>>> a,b,c
(&#39;1&#39;, &#39;2&#39;, &#39;345&#39;)

3&#xff0c;多目标赋值运算

多目标赋值运算&#xff0c;实现多个变量共享同一个对象&#xff0c;例如&#xff0c;把5赋值给变量a&#xff0c;b&#xff0c;c&#xff0c;可以认为先把5赋值给c&#xff0c;然后把c赋值给b&#xff0c;最后&#xff0c;把b赋值给a。

a&#61;b&#61;c&#61;5

注意&#xff1a;多目标赋值语句只创建一个变量&#xff0c;三个变量全部指向内存中的同一对象。

当多个变量共享的对象是不可变对象时&#xff0c;由于不支持在原处修改&#xff0c;当对其中一个变量重新赋值&#xff0c;其他变量的值不变。Python会新建一个对象给该变化的变量。

>>> a&#61;b&#61;c&#61;5
>>> c&#61;6
>>> a,b,c
(5, 5, 6)

当多个变量共享的对象是可变对象时&#xff0c;由于支持在原处修改&#xff0c;当对其中一个变量重新赋值时&#xff0c;其他变量的值会改变。

>>> a&#61;b&#61;c&#61;[1]
>>> a[0]&#61;2
>>> a,b,c
([2], [2], [2])

为了避免这个问题&#xff0c;需要单独为每个变量赋值&#xff0c;以便分别初始化变量。

4&#xff0c;扩展序列解包(Python 3.0)

变量前面带有星号(*var)&#xff0c;该变量收集了序列中没有赋值给其他变量的所有项。在一个赋值语句中&#xff0c;只能出现一个变量名前面带有星号&#xff0c;并且该项的类型是列表&#xff1a;

例如&#xff0c;把元组(1,2,3,4)赋值给变量a和b&#xff0c;a匹配序列中的第一项&#xff0c;b匹配序列中剩下的所有项&#xff1a;

>>> a,*b&#61;1,2,3,4
>>> a,b
(1, [2, 3, 4])

四&#xff0c;分支结构

Python的分支结构有三个关键字&#xff1a;if&#xff0c;elif&#xff0c;else&#xff0c;分支结构的一般形式是&#xff1a;

if test1:statement1
elif test2:statement2
else:statement3

如果test1为True&#xff0c;那么执行statement1&#xff1b;

如果test1为False&#xff0c;那么执行elif语句&#xff0c;测试test2&#xff0c;如果为True&#xff0c;那么执行statement2&#xff1b;如果为False&#xff0c;那么执行else语句块的statement3。

分支结构的特点是&#xff1a;

  • 在多分支结构中&#xff0c;if是必需的&#xff0c;且只有一个&#xff0c;处于分支结构的开头&#xff1b;
  • elif是可选的&#xff0c;可以有0&#xff0c;1和多个elif子句&#xff1b;
  • else也是可选的&#xff0c;可以有0和1个&#xff0c;并且只能处于分支结构的末尾。

和C语言一样&#xff0c;Python同样有一个三元表达式&#xff1a;x&#61;a if test else b

其等价的if表达式是&#xff1a;

if test:x&#61;a
else:x&#61;b 

五&#xff0c;循环结构

Python的主要循环结构是while语句和for语句&#xff0c;while语句用于编写通用循环&#xff0c;而for语句用于遍历序列对象内的元素。

Python控制循环的关键字&#xff1a;

  • break&#xff1a;离开循环&#xff0c;从当前行跳出循环&#xff0c;执行循环语句后面的语句&#xff1b;
  • continue&#xff1a;从当前行跳到循环的首行&#xff0c;继续循环。

1&#xff0c;while循环

while循环的一般格式是由测试表达式&#xff0c;循环执行的语句块&#xff0c;和一个可选的else语句块。while语句通过loop_body修改test条件来控制循环的次数&#xff0c;或者使用break来跳离while循环。

while test :loop_body
else:statement_not_hit_break

当控制权离开循环体&#xff0c;且没有遇到break语句时执行else语句块。如果循环体从来没有执行过&#xff0c;那么else语句块也会执行。

2&#xff0c;for循环

for循环是一个通用的序列迭代器&#xff0c;可以遍历任何有序对象内的元素。for语句可以用于字符串、列表、元组和其他可迭代对象。

for循环的一般格式是成员赋值&#xff0c;循环执行的语句块&#xff0c;和一个可选的else语句块。当遍历完序列的所有元素&#xff0c;或者遇到break语句时&#xff0c;结束for循环。

for obj in seq:loop_body
else:statement_not_hit_break

当Python运行for循环时&#xff0c;会逐个把序列中的元素赋值给obj&#xff0c;然后为每个元素执行一次循环体(loop_body)。

for首行中用作赋值的变量名&#xff0c;可以在循环体中修改&#xff0c;但是&#xff0c;当循环回到首行时&#xff0c;obj就会被设置成序列中的下一个元素。

当序列中的元素是序列时&#xff0c;可以设置obj为序列对象&#xff0c;用于接受序列的元素&#xff0c;例如&#xff0c;序列中的元素是元组&#xff0c;设置obj为元组对象&#xff0c;用于接收序列的元素&#xff1a;

>>> for (a,b,c) in [(1,2,3),(4,5,6)]: print(a,b,c)
...
1 2 3
4 5 6

参考文档&#xff1a;


推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
author-avatar
Jean_香香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有