1 python语句介绍

python的结构层次:1) 程序由模块构成 2) 模块包含语句 3)语句包含表达式 4)表达式建立并处理对象。

python的语法实质上是由语句和表达式组成的。

print在python3.0中不是一个保留字,也不是一条语句,而是一个内置的函数调用,由于它几乎总是作为一条表达式语句运行,通常将其看作一条语句类型。

yield实际上是一个表达式,而不是一条语句。与print不同,作为一个表达式,yield也是一个保留字。

与其他语言相比,python增加了语法成分是冒号(:)。所有python的复合语句都有相同的一般形式,也就是首行以冒号结尾。首行下一行嵌套的代码往往按缩进的格式书写。

python中的括号是可选的;终止行就是终止语句(没有分号);缩进的结束就是代码块的结束(没有大括号;缩进能提高程序代码的可读性和质量)。

特殊实例:我们可以编辑单行if语句、单行循环。只有当复合语句本身不包含任何复合语句的时候,才可以这样做。

>>> x = 10; y = 5
>>> if x > y: print(x)
...
10

简单的交互式循环:input内置函数,用于通用控制台输出,它打印可选的参数字符串作为提示,并返回用户输入的回复字符串。

>>> while True:
...     reply = input('Enter text:')
...     if reply == 'stop':break
...     print(reply.upper())
...
Enter text:66
66
Enter text:spam
SPAM
Enter text:stop

注意:while首行下面嵌套的三行的缩进是相同的,属于同一代码块。源文件的结束或是一个缩进较少的语句可以终止这个循环体块。

在IDLE中写入,并保存为文件。当输入无效数字时,可以事先用字符串对象的isdigit方法检查字符串的内容。

while True:reply = input('Enter text:')if reply == 'stop':breakelif not reply.isdigit():print('Bad'*4)else:print(int(reply)**2)
print('Bye')

来自用户的输入返回脚本时一定是一个字符串,所以要手动将其转换为整数。

但在python中处理错误时,通常使用try语句。

# 在IDLE写入
while True:reply = input('Enter text:')if reply == 'stop':breaktry:num = int(reply)except:print('Bad!'*4)else:print(int(reply)**2)
print('Bye')# 示例结果
Enter text:44
1936
Enter text:tt
Bad!Bad!Bad!Bad!
Enter text:stop
Bye

2 赋值语句

其基本形式是在等号左边写赋值语句的目标,而要赋值的对象位于右侧。左边的目标可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象的表达式。

赋值语句建立对象引用值,而不是赋值对象。python变量更像指针,而不是数据存储区域。变量名在首次赋值时会被创建。变量名在引用前必须先赋值。执行隐式赋值的一些操作,在很多情况下使用赋值语句,如模块导入、函数和类的定义、for循环变量以及函数参数。

元组和列表分解赋值:python会按照位置把右边的对象和左边的目标从左向右相配对。现已统一为序列赋值语句,任何变量名的序列都可赋值给任何值的序列。甚至可以混合和比对涉及的序列类型,如第4行,把变量名的元组和字符的字符串对应起来。

扩展的序列解包允许我们更灵活的选择要赋值的一个序列的部分。这是手动分片操作的简单替代方法。

增强赋值语句:输入较少,并且通常执行的更快。

1)序列赋值

元组和列表赋值语句可以接受右侧可以是任何类型的序列,只要长度相等即可。序列赋值语句实际上支持右侧任何可迭代的对象,而不仅局限于任何序列。

>>> a, b, c, d = 'spam'
>>> a
's'
>>> a,b,c,d
('s', 'p', 'a', 'm')
>>> [e,f] = [a,b]
>>> e,f
('s', 'p')>>> [a,b,c] = 'ABC'
>>> a
'A'
>>> nudge = 1
>>> wink = 2
>>> nudge,wink = wink,nudge         # 交换两变量的值
>>> nudge,wink
(2, 1)

2)扩展解包语法

在2.x中手动分片才能使序列赋值更为通用(要保持赋值目标中的项数和主体数目必须一致)。在3.x中,这个过程变得更简单。一个带星号的名称,可以在赋值目标中使用,以指定一个更为通用的匹配——一个列表赋给带星号的名称,该列表收集序列没有赋值给其他名称的所有项。一个序列解包总是返回多个匹配项的一个列表,而分片把相同类型的一个序列作为分片对象返回。

>>> seq = [1,2,3,4]
>>> a, *b = seq
>>> a
1
>>> b
[2, 3, 4]>>> a,*b = 'spam'
>>> a,b
('s', ['p', 'a', 'm'])
>>> a,*b,c = 'spam'
>>> a
's'
>>> b
['p', 'a']>>> S = 'spam'
>>> S[1:2]
'p'

和常规的序列赋值一样,扩展的序列解包语法对于任何序列类型都有效,而不只是对列表有效。

带星号的名称可能只匹配单个的项;如果没有,它将赋值一个空的列表。如果有多个带星号的名称,或者如果值少了而没有带星号的名称,以及如果带星号的名称自身没有编写到一个列表中,这些都会引发错误。

序列解包只是一种便利形式,通常可以使用显式的索引和分片实现同样的效果

>>> seq
[1, 2, 3, 4]
>>> *a =seq                        # 带星号的名称自身没有编写到一个列表中引发错误File "<stdin>", line 1
SyntaxError: starred assignment target must be in a list or tuple
>>> *a, = seq
>>> a
[1, 2, 3, 4]>>> seq
[1, 2, 3, 4]
>>> a,b = seq[0],seq[1:]
>>> a,b
(1, [2, 3, 4])

3)增强赋值

是二元表达式和赋值语句的组合。有三个优点:输入减少;左侧只需要计算一次;优化技术会自动选择:对于支持在原处修改的对象而言,增强形式会自动执行原处的修改运算,而不是相比来说速度更慢的复制。

>>> L = [1,2]
>>> L = L + [3]            # 添加一个元素,用合并或append
>>> L
[1, 2, 3]
>>> L.append(4)
>>> L
[1, 2, 3, 4]
>>> L = L + [5,6]        # 添加一组元素用合并或者extend
>>> L
[1, 2, 3, 4, 5, 6]
>>> L.extend([7,8])
>>> L
[1, 2, 3, 4, 5, 6, 7, 8]
>>> L += [9,10]            # 在原处修改,自动调用extend
>>> L
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

合并对共享对象引产生的副作用可能会更小,但是通常比原处形式运行的更慢。

3 变量命名规则

变量名语法:下划线或字母+任意数目的字母、数字或下划线;区分大小写;禁止使用保留字(3.0)

1)命名惯例

  • 以单个下划线开头的变量名(_X)不会被from module import * 语句导入
  • 前后有下划线的变量名(_X_)是系统定义的变量名,对解释器有特殊意义
  • 以两下划线开头,但结尾没有两个下划线的变量名(__X)是类的本地(压缩)变量
  • 通过交互模式运行时,只有单个下划线的变量名(_)会保存最后表达式的结果

类变量名通常以一个大写字母开头 ;模块变量名以小写字母开头。

4 表达式语句

可以使用表达式作为语句(本身只占一行),因为表达式结果不会存储。通常在两种情况下表达式用作语句:

1)调用函数和方法  有些函数和方法会做很多工作,而不会有返回值。这种函数在其他语言中有时称作过程。

2)在交互模式提示符下打印值 ,会响应输入的表达式结果。这些都是表达式语句,作为输入print语句的简写方法

表达式语句通常用于执行原处修改列表的列表方法,但这些方法在列表修改后并不会把列表返回,实际上,他们返回的是None对象。

>>> x = print('spam')
spam
>>> x
>>> print(x)
None

5 打印操作

在python中,print语句可以实现打印——只是对程序员友好的标准输出流接口而已。 它把一个或多个对象转换为文本表达形式,然后发送给标准输出或另一个类似文件的流。

print默认把对象打印到stdout流,并添加一些自动的格式化。与文件方法不同,在使用打印操作的时候,不需要把对象转换为字符串。

标准输出流只是发送一个程序的文本输出默认的地方,加上标准输入流和错误流,它只是脚本启动时创建3种数据连接中的一种。标准输出流通常映射到启动python程序的窗口,除非他已经在操作系统的shell中重定向到一个文件或管道。

1)调用格式

print([object,...][,sep = '   '][,end = '\n'][,file = sys.stdout])    (方括号中的项可选, = 都给出了默认参数)

sep、end和file如果给出的话,必须作为关键字参数给定——必须使用一种特殊的“name = value”语法来根据名称而不是位置来传递参数。

sep:在每一个对象的文本之间插入一个字符串,如果没有,默认为单个空格

end:添加打印文本末尾的一个字符串,如果没有,默认是一个\n换行符

file:指定文本要发送的文件、标准流或者其他类似文件的对象。如果没有传递的话,它默认的是sys.stdout

2) python3.X的print函数的应用

>>> X = 'spam'
>>> Y = 99
>>> Z = ['eggs']
>>> print(X, Y, Z)                 # 默认情况下打印的对象之间添加一个空格
spam 99 ['eggs']
>>> print(X, Y, Z, sep = '')
spam99['eggs']
>>> print(X, Y, Z, end = '')        # 向end关键字参数传递一个空字符来避免换行
spam 99 ['eggs']>>>
>>> x = 'spam'
>>> y = 99
>>> z = ['eggs']
>>> print(x, y, z, sep='...', file = open('data.txt','w'))  # 在单个打印过程中,直接把文本打印到一个输出文件或其他的兼容对象
>>> print(open('data.txt').read())
spam...99...['eggs']

print操作提供的分隔符和行末选项只是为了方便起见。如想显示更具体的格式,提前构建一个更复杂的字符串或者在print自身中使用字符串工具。

>>> text = '%s:%-.4f,%05d'% ('Result',3.14159, 42)
>>> print(text)
Result:3.1416,00042
>>> print('%s:%-.4f,%05d'% ('Result',3.14159, 42))
Result:3.1416,00042

3)打印流重定向

打印默认发送到标准输出流。通常发送到其他的地方也是有用的。一般在脚本中重定向到一个脚本的流也是能做到的。

print语句只是python的人性化的特性,提供了sys.stdout对象的简单接口,再加上一些默认的格式化设置。你可以使用下面方式编写打印操作。

>>> import sys
>>> sys.stdout.write('hello world\n')
hello world
12

 print和sys.stdout的关系:

print(x,y)等价于import sys         sys.stdout.wirte(str(x) + ' ' + str(Y) + '\n')

可以将print语句将文字传送到其他地方。把sys.stdout重设为已打开的文件对象(也可是非文件对象吗,只要该对象有write方法),print会持续调用sys.stdout的write方法。 zhi-

但是由于sys.stdout只是普通的文件对象,你可以需要保存原始的输出流。在打印至文件后,可以切换回来

>>> import sys
>>> temp = sys.stdout
>>> sys.stdout = open('log.txt', 'a')
>>> print('spam')
>>> print(1,2,3)
>>> sys.stdout.close()
>>> sys.stdout = temp        # 切换回来
# sys.stdout = sys.__stdout__
>>> print('back here')
back here
>>> print(open('log.txt').read())
spam
1 2 3

手动保存和恢复原始的输出流包含相当多的额外的工作。file关键字允许一个单个的print调用其文本发送给一个文件的write方法,而不是重设sys.stdout。这只是暂时的,其他的print语句还会继续打印到原始的输出流。

>>> log = open('log.txt', 'w')
>>> print(1, 2, 3, file = log)
>>> print(4, 5, 6, file = log)
>>> log.close()
>>> print(7, 8, 9)
7 8 9
>>> print(open('log.txt').read())
1 2 3
4 5 6>>>

python语句和语法(一)相关推荐

  1. python语句和语法介绍

    转自:微点阅读  https://www.weidianyuedu.com 一.python语句简介(python是面向过程.基于语句的语言) 1.python程序结构: 程序由模块构成 模块由语句构 ...

  2. [转载] python中的且语句_简单探讨python中的语句和语法

    参考链接: 在Python中解包:并行分配之外 python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了, ...

  3. 史上最全Python学习笔记(基于《Python学习手册(第4版)》)——Part3 语句和语法

    文章目录 Chap10 Python语句简介 重访Python程序结构 Python的语句 两个if的故事 Python增加了什么 Python删除了什么 括号是可选的 终止行就是终止语句 缩进的结束 ...

  4. 语句与语法笔记:学会python中_doc_和pydoc——python学习手册笔记之3

    标题## 语句与语法:学会python中的_doc_和pydoc--python学习手册笔记之3 光看书不练习很难学好python,光看书不做点学习笔记,恐怕连书本的东西也是半知半解,不知所云.这手册 ...

  5. python语句行从解释器提示符后第几列开始_Python基础语法

    学习一门编程语言,通常是学习该语言的以下几个部分的内容:基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组.链表.Map.Set等: 运 ...

  6. python解释器在语法上不支持 编程方式-python解释器在语法上不支持什么编程方式_后端开发...

    python程序的两种运行方式是什么_后端开发 python程序的两种运行方式是:1.使用REPL模式运行,REPL模式即读取-计算-打印-循环的模式,借助的工具是IDLE(python集成开发环境) ...

  7. python编程基础语法-Python编程基础语法快速入门

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

  8. python循环语句-python语句中Python循环语句(附代码)

    python语句多如牛毛,对于很多初学者来说,不知道该如何下手.今天本文将着重讲述python语句中for语句和while语句.都知道这2种语句都属于循环语句,for语句属于遍历循环,while语句属 ...

  9. python跟java-python(一):python与java语法的异同之处

    1.变量 java中定义变量,int a=0;而python中为 a=0;由此可见java要事先申明数据类型,python中无需事先申明数据类型,拿来就可以用,Python 的语法要比Java 更灵活 ...

最新文章

  1. Reactor模式与Proactor模式
  2. R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释多个iris数据样本的预测结果、使用LIME解释器进行模型预测结果解释
  3. BZOJ 1293 [SCOI2009]生日礼物
  4. oracle不一致性关闭下次,Oracle DataGuard
  5. Git 和 Github 秘籍
  6. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732E电磁流量计对环境和温度的限制
  7. ISO 22301 业务连续性管理(BCM) 认证培训及标准
  8. 计算机不能删除用户,删除用户时提示无法在内置账户上运行此操作 -电脑资料...
  9. 计算机中人民币数字格式,数字转人民币金额大写
  10. 读《拆掉思维的墙》小记
  11. 深刻揭露当今楼市中的七大谬论
  12. 如何用python语言解一元二次方程式
  13. 2021年德阳2中高考成绩查询,2021年德阳高中录取分数线是多少及高中排名榜
  14. 前端性能优化——写给网页设计师和前端工程师看的
  15. 忘记xp系统超级管理员密码
  16. 【Java工具类】(1)—Java中驼峰与下划线相互转换
  17. 万网绑定二级域名_万网虚拟主机绑定多个子域名的操作方法
  18. 004-云E办_学习Oathu2和Spring Security Oauth2
  19. 【CSS】固定定位示例 ( 屏幕左右两侧广告栏 | 开发要点分析 | 代码示例 )
  20. 移动支付对车牌识别系统的影响

热门文章

  1. 医院信息集成平台现状总结
  2. python中treenode_python ElementTree 基本读操作示例
  3. 04 使用three.js开发全景漫游 全景图切换的实现
  4. Eyenuk宣布FDA核准EyeArt自主AI系统用于糖尿病视网膜病变筛查
  5. 程序员避免中年危机的2个方向
  6. Week2 Bing词典Android客户端案例分析
  7. Mozilla发布最大的人类语音数据集(Common Voice)
  8. 发自肺腑深入肌肤 —— 一位武汉老程序员的自白
  9. 个人考研写的英语作文,仅支持参考
  10. c语言证自考免计算机应用,自考证书有哪些?可以免考什么课程?