简单谈谈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中实现结构相似的函数调用方法
Mar 10 Python
从Python的源码来解析Python下的freeblock
May 11 Python
python通过函数属性实现全局变量的方法
May 16 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
jenkins+python自动化测试持续集成教程
May 12 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python使用建议与技巧分享(二)
Aug 17 Python
python调用有道智云API实现文件批量翻译
Oct 10 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
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
Python计算回文数的方法
2015/03/11 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python如何求解两数的最大公约数
2018/09/27 Python
Python 支付整合开发包的实现
2019/01/23 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python cumsum函数的具体使用
2019/07/29 Python
python如何处理程序无法打开
2020/06/16 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
建筑经济管理专业求职信分享
2014/01/06 职场文书
护理中职生求职信范文
2014/02/24 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL