参考链接: 在Python中解包:并行分配之外

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))

运行结果:1None

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=',')

运行结果:1 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为我们隐藏了很多细节,只是提供给我们一个简单打印的接口。

importsys

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)

运行结果: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)

运行结果:

0 j1e2f3 f

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

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

[转载] python中的且语句_简单探讨python中的语句和语法相关推荐

  1. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  2. python编写接口自动化脚本_简单的python http接口自动化脚本

    摘抄:今天给大家分享一个简单的python脚本,使用python进行http的接口测试,脚本很简单,逻辑是:读取excel写好的测试用例,然后根据excel中的用例内容进行调用,判断预期结果中的返回值 ...

  3. python协同过滤调用包_简单的python协同过滤程序实例代码

    本文研究的主要是python协同过滤程序的相关内容,具体介绍如下. 关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看 ...

  4. python字符串前面加上序号_简单了解python字符串前面加r,u的含义

    这篇文章主要介绍了简单了解python字符串前面加r,u的含义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 u/U:表示unicode字符串 不是 ...

  5. python人脸识别系统下载_简单的Python人脸识别系统

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  6. java中的el表达式_简单介绍Java中的EL表达式(图)

    EL全名为Expression Language,这篇文章主要给大家介绍EL表达式的主要作用及内容简介,感兴趣的朋友一起看看 JSP页面中支持使用EL表达式,EL全名为Expression Langu ...

  7. python闭包的应用场景_简单谈谈Python中的闭包

    Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚.我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容. 1. 闭包的概念 首 ...

  8. python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理

    Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...

  9. python包括几种数据类型_简单谈谈Python中的几种常见的数据类型

    计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数 ...

最新文章

  1. poj2155(二维树状数组)
  2. asp 去除最后一个逗号为空字符串的代码
  3. perl随机打乱数组
  4. Ansible 介绍和架构、特性
  5. java 如何把源码导出为jar包,以及如何使用导出的jar包
  6. Microsoft Office 2007的ContentType
  7. ubuntu安装后需了解的基本操作
  8. android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
  9. 【android自定义控件】TextView详解及自定义一
  10. Shell 编程入门到精通
  11. 配有傲腾内存的电脑如何安装系统
  12. solr mysql原理_solr replication原理探究
  13. 使用SDKMAN来安装JDK和管理多个JDK版本
  14. 我的中兴五年:加班为何成了底层员工心中永远的痛
  15. v-infinite-scroll懒惰加载
  16. oracle mysql 同义词_Oracle中的同义词SYNONYM
  17. 计算机键盘无法识别,键盘无法识别的解决妙招
  18. Mysql 横向数据表变纵向数据表
  19. HTML网页设计作业个性潮流服装商城模板
  20. 微信小程序手把手教你实现类似Android中ViewPager控件效果

热门文章

  1. 【PA2014】【BZOJ3709】Bohater(贪心,排序)
  2. AR人工智能模型训练计算机,ar人工智能模型训练一般采用什么计算机
  3. mysql索引两个表_MySQL索引优化(索引两表优化案例)
  4. .net core 应用程序“default web site”中的服务器错误_Net程序员讲JAVA系列——Spring Boot“科普篇”...
  5. random函数 c语言,C/C++ 中rand()和random()函数(示例代码)
  6. 设计学生证信息管理系统(C++实现,附源代码,详细解析)
  7. win7系统下,磁盘之间合并
  8. matlab imresize
  9. 吴恩达神经网络和深度学习-学习笔记-32-卷积神经网络示例
  10. postgres数据库入门, python 操作postgres