简单谈谈python中的语句和语法


Posted in Python onAugust 10, 2017

python程序结构

python“一切皆对象”,这是接触python听到最多的总结了。在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句中,多条语句组成代码块,多个代码块再组成一整个程序。python的核心其实是由语句和表达式组成。所以在这里简单探讨一下python中的语句和表达式。

因为以后可能会接触到两个版本的python,所以这里讲一讲python2与python3的语句差异:

1.python2中没有nolocal语句。

2.print在python2中是一条语句,在python3中则是一个内置函数。

3.python2中2.5以后版本try/except和try/finally合并了。

4.with/as在python2中不可用,若想使用必须的导入模块__future__import with_statement。

python语法

说实话,作为第一门全面学习的语言,python给我的感觉就是简单简洁清晰,与之前学习过的C语言不同,python的语法成分非常少,python的嵌套语法就是首行末尾使用冒号,代码块省去括号(括号是可选的),按照缩进的方式书写。并且python每行之间完全不需要使用分号,一行的结束就是终止了该语句。缩进结束就意味着这段代码块的结束。所以缩进语法是python的一个核心语法。正是因为这一点,python程序员可以整齐的写出根据程序逻辑结构以垂直方式来完成的代码。这使得python的程序代码更加具有可读性了。

还有几点值得注意的地方:

1.python的缩进虽然没有特别的规定,但是约定俗成的将首个缩进行首缩进4个空格,当然有些程序员喜欢使用tab键来完成,本人作为刚开始学习python的新手,其实也是空格党,因为tab在有些环境里是8个空格,还有一点非常重要的是,最好不要是用混合着tab和空格的缩进方式,并且这种方式在python3中依然导致程序无法正常操作了。

2.python有时也会出现某一行挤进多个语句的情况,这个时候需要使用分号将其隔开。这也是python中唯一用到分号的地方,作为语言界定符。

3.当一个语句过长需要横跨多行的时候可以使用括号,方括号,花括号括起来,这样语句将一直运行到括号闭合的那一行。除了括号之前还是用过\作为跨行工具,不过这种方式不仅关注、维护起来比较困难,而且\后面可能没有空格,所以\换行的方法已经很少使用了。

赋值操作

1.赋值操作知识变量引用对象而非copy;

2.变量在首次赋值时被创建;

3.必须先定义后引用;

4.模块导入、函数和类的定义、for循环变量以及函数参数都是饮食赋值运算。

赋值语句的形式:

1.name=‘jeff'

这是最常见的复制方式,把变量名与单个对象进行了绑定。

2.元组和列表分解赋值:name,age=‘jeff',‘111',[name,age]=[‘jeff',‘111']

当赋值符号左边是元组或者列表时,python会把右边对象与左边对象从左往右配对。

可以扩展为序列类型的赋值语句,任何变量名的序列都可赋值给任何值得序列,a,b,c,d='jeff',这种序列赋值在python中被通用化了,即两边可以是任意序列,比如:[a,b,c]=(1,2,3)只要序列长度相等即可,最终还将右边扩展成任意可迭代对象。

3.扩展的序列解包:a,*b='jeff'

这种方式适用于python3中,a只匹配一个字母,剩余字符被*引用。并且*b可以出现在赋值变量的任意位置,比如a,*b,c=‘a,b,c,d'。带*名称不论匹配几个项都会向其赋值一个列表,即使未匹配到也会赋值空列表。一个赋值语句只能有一个带*的名称,还可以写成*a,=[1,2,3,4]。可以说这种解包方式已经取代了切片方式,称为更广泛的便利形式。

4.多重目标引用:a=b=‘111'

两个变量都被赋了同样的值。上述等式其实就是b=‘111',a=b的简单表达。这里两个变量都指向同一个内存里的对象,即引用。

5.增强型赋值语句:a+=1

输入较少,执行较快。增强赋值语句有三大优点:

(1)输入减少;

(2)左侧只需计算一次,x=x+y中x会出现两次,必须执行两次,所以相比而言,增强型赋值语句执行会更快;

(3)对于支持原处修改的对象会自动执行原处修改运算。

注:python中没有a++,a--这种递增运算符没因为python中不可变对象无法进行原处修改。

对于扩展列表有两种方式,一种是合并‘+',另一种是extend方法,两者,合并对共享对象引用产生的副作用更小,但是合并操作必须创建一个新的对象,再把左侧复制到列表中,再把右侧的复制到列表中,这样运行速度就会很慢。在增强赋值语句中,会自动调用更快的extend方法。

注:python的保留字不可以当作是变量名来赋值。

表达式语句

表达式语句通常用于原处修改,例如l.append(a),但是并不会把修改后的列表返回,事实上他们返回的是None对象。如果将此表达式赋值给变量,那么只会丢失该列表。

print语句

标准输出流(stdout),标准输入流,错误流是脚本启动时创建的三种数据连接。

python3中的print:

print是一个内置函数,用关键字参数来表示模式。因为是内置函数的一种,所以它返回的是None。

print(print(1))

运行结果:
1
None

print的基本语法是:print([obj,...][,sep=' '][,end='\n'][,file=sys.stdout])

其中方括号中内容为可选内容。sep,end,file使用时要给出name=value的形式给定参数。

sep是每个对象的文本之间插入一个字符串,默认是单个空格,传一个空字符串将会抑制分隔符。

a=1;s=2;d=3
print(a,s,d)
print(a,s,d,sep=',')
运行结果:
2 3
1,2,3

end是添加打印在文本末尾的字符串,默认\n。

a=1;s=2;d=3
print(a)
print(s,end=' ')
print(d,end=' ')
运行结果:
1
2 3

file指定发送到的文件,默认是sys.stdout。这其实是流的重定向的一种形式。

print只是为我们提供了简单的sys.stdout对象的简单接口,,print为我们隐藏了很多细节,只是提供给我们一个简单打印的接口。

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

运行结果:

hello world

可使用sys.stdout=open(‘file',‘mode')方式重定向流的输出。python3中这种重定向是暂时的,普通的print还是会打印到原始输出流。

python2中的print语句:

print x,y等价于3中的print(x,y);

print x,y,等价于3中的print(x,y,end=‘ ');

print >>afile,x,y等价于3中的print(x,y,file=afile);

if测试及语法规则

短路计算

首先,and和or返回的一定是一个对象,在or测试中,python在找到第一个真值的地方停止。

print(2 or 3)
print(0 or 3 or 2)
运行结果:
3

if/else三元表达式

A = Y if X else Z ,X为真的时候,结果为Y,X为假的时候,结果为Z。这也是短路计算。当然也可以写成A=((X and Y)or Z)换句话说就是“if x then y else z”.

while和for循环

while循环

while是python中最通用的迭代结构,并且while也是有可选else部分的(离开while循环并且没有在此之前break的时候才会执行)。

break、continue、pass、else

break:跳出整个循环语句。

continue:跳出本次循环到下一次循环的开头处。

pass:无运算的占位语句,常用在函数定义阶段,他和None的意义很相似,不过他有着自带的意义:“以后想好再填补”的意思。

else:只有当循环正常结束的时候才会执行。

for循环

for循环的本质其实是一个序列迭代器,用于遍历任何序列对象内对的元素或者说可迭代对象的所有元素。逐个将序列对象中的元素赋值给作用域中的变量,break,continue也适用于for循环。

for循环遍历可迭代对象时在每次循环的时候只读一个,并不会将整个对象读到内存,这样运行更快更省内存,例如在文件读取的时候,用for循环遍历远胜于readlines。可以说for循环比while循环更快速。

并行遍历,zip与map:

zip函数可将n个参数的n个参数的序列转换成n个参数的元组:

print(list(zip(['1','2','3'],(4,5,6),['7','8','9'])))
运行结果:
[('1', 4, '7'), ('2', 5, '8'), ('3', 6, '9')]
print(dict(zip(('1','2','3'),(4,5,6))))
运行结果:
{'3': 6, '2': 5, '1': 4}

zip函数当序列长度不同时,会以最短序列截断得到元组。

python2中的map函数和zip极为相似,只是在当长度不同时,不使用最短截断,而是用None补齐。因为太相似了,所以在3中被砍掉了。但是现在map依然可以使用,他还有其他用法:

print(list(map(ord,['1','2','3'])))
运行结果:
[49, 50, 51]

enumerate函数:计数器作用的函数。

for (a,b) in enumerate('jeff'):
  print(a,b)
运行结果:
j
e
f
f

enumerate函数返回的是生成器对象,每次循环都是next()一次,返回(index,value)元组。

本节总结是在python学习手册第二部分的小总结,对于迭代的概念,在后面的学习过程中会仔细弄清楚,在写的过程中有什么不对的地方希望大神们给予指正。

以上这篇简单谈谈python中的语句和语法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
python 循环while和for in简单实例
Aug 16 Python
python实现按长宽比缩放图片
Jun 07 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
python爬取淘宝商品销量信息
Nov 16 Python
Python3爬虫全国地址信息
Jan 05 Python
简单了解python中对象的取反运算符
Jul 01 Python
python代理工具mitmproxy使用指南
Jul 04 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
Python打印特殊符号及对应编码解析
May 07 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 #Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 #Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 #Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 #Python
Django 前后台的数据传递的方法
Aug 08 #Python
关于python pyqt5安装失败问题的解决方法
Aug 08 #Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 #Python
You might like
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
python实现海螺图片的方法示例
2019/05/12 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
什么是抽象
2015/12/13 面试题
Java面试题汇总
2015/12/06 面试题
小学生暑假家长评语
2014/04/17 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2014年医务科工作总结
2014/12/18 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
员工工作表扬信
2015/05/05 职场文书
管辖权异议上诉状
2015/05/23 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
导游词之太湖
2019/10/08 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫