简单谈谈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实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
python实现数据写入excel表格
Mar 25 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
Django框架视图函数设计示例
Jul 29 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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
坏狼的PHP学习教程之第2天
2008/06/15 PHP
PHP 函数学习简单小结
2010/07/08 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python opencv读mp4视频的实例
2018/12/07 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
美国购物网站:Clickhere2shop
2021/01/28 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
extern在函数声明中是什么意思
2014/01/19 面试题
作为网站管理者应当如何防范XSS
2014/08/16 面试题
竞选大学学委演讲稿
2014/09/13 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
企业宣传稿范文
2015/07/23 职场文书