跟老齐学Python之正规地说一句话


Posted in Python onSeptember 28, 2014

小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说“饺子”,对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用“饺饺”来代替,其实就是让孩子学会一个字就能表达。当然,从教育学的角度,有人不赞成这种方法。这个此处不讨论了。如果对比学习编程,就好像是前面已经学习过的那些各种类型的数据(对应这自然语言中的单个字、词),要表达一个完整的意思,或者让计算机完成一个事情(动作),不得不通过一句话,这句话就是语句,它是按照一定规则组织起来的。自然语言中的一句话,按照主谓宾的语法方式组织,计算机编程中的语句,也是按照一定的语法要求进行组织。

虽然在第一部分中,已经零星涉及到语句问题,并且在不同场合也进行了一些应用。毕竟不那么系统。本部分,就比较系统地介绍python中的语句。

为了有总括的印象,先看看python中都包括哪些语句:

赋值语句

if语句,当条件成立时运行语句块。经常与else, elif(相当于else if)配合使用。
for语句,遍列列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while语句,当条件为真时,循环运行语句块。
try语句。与except, finally, else配合使用处理在程序运行中出现的异常情况。
class语句。用于定义类型。
def语句。用于定义函数和类型的方法。
pass语句。表示此行为空,不运行任何操作。
assert语句。用于程序调适阶段时测试运行条件是否满足。
with语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行退出后释放锁。
yield语句。在迭代器函数内使用,用于返回一个元素。
raise语句。抛出一个异常。
import语句。导入一个模块或包。常用写法:from module import name, import module as name, from module import name as anothername
特别说明,以上划分也不是很严格,有的内容,有的朋友不认为属于语句。这没关系,反正就是那个东西,在编程中使用。不纠结于名词归类上。总之这些都是要掌握的,才能顺利编程呢。

再谈赋值语句

还记得赋值,简单也不简单那一讲中所提到的赋值语句吗?既然谈语句,就应该从这个开始,一方面复习,另外一方面,希望能够深点,深点的感觉总是很好的(我说的是理解python,思无邪。前面有一个关于list的内容:再深点,更懂list,就有喜欢看玩笑的看官思邪了。哈哈。)

>>> qiwsir = 1

>>> python = 2

>>> x, y = qiwsir, python   #相当于x=qiwsir,y=python

>>> x

1

>>> y

2

>>> x, y                    #输出的是tuple

(1, 2)

>>> [x, y]                  #这就是一个list

[1, 2]
>>> [a, b] = [qiwsir, python]

>>> a

1

>>> b

2

>>> a, b

(1, 2)

>>> [a, b]

[1, 2]

换一种方式,以上两种赋值方法交叉组合一下:

>>> [c, d] = qiwsir, python

>>> c

1

>>> d

2

>>> c, d

(1, 2)

>>> f, g = [qiwsir, python]

>>> f

1

>>> g

2

>>> f, g

(1, 2)

居然也行。其实,从这里我们就看出来了,赋值,就是对应着将左边的变量和右边的对象关联起来。

有这样一个有趣的问题,如果a=3,b=4,想把这两个变量的值调换一下,也就是a=4,b=3。在有的高级语言中,是要先引入另外一个变量c做为中间中专,就是这样:

a = 3

b = 4

c = a   #即c=3

a = b   #a=4

b = c   #b=3

初学者可能有点糊涂。就是我和你两只手都托着一个箱子,现在我们两个要换一下箱子,但是两个手都被占用了,无法换(当然,要求箱子不能落地,也不要放在桌子上之类的)。于是再找一个名曰张三的人来,他空着两只手,那么我先把箱子给张三,我就空出来了,然后接你的箱子,你的箱子就到我手里了。我的那个箱子现在张三手里呢,你接过来,于是我们两个就换了箱子了。

只所以这么??拢?褪且蛭?颐橇礁雒挥懈?嗟氖帧5?牵?獠皇?ython,python有更多的手。她可以这样:

>>> qiwsir = 100

>>> python = 200

>>> qiwsir, python = python, qiwsir

>>> qiwsir

200

>>> python

100

有点神奇,python是三头六臂的。

序列赋值

其实上面实验的赋值,本质上就是序列赋值。只不过这里再强化一番罢了。如果左边的变量是序列,右边的对象也是序列,两者将一一对应地进行赋值。

>>> [a, b, c] = (1, 2, 3)   #左右序列一一对应,左边是变量,右边是对象

>>> a

1

>>> b

2

>>> c

3

>>> (a,b,c) = [1,2,3]

>>> a

1

>>> b

2

>>> c

3

>>> [a,b,c] = "qiw"     #不要忘记了,str也是序列类型的数据

>>> a

'q'

>>> b

'i'

>>> c

'w'

>>> (a,b,c) = "qiw"

>>> a,c

('q', 'w')

>>> a,b,c = 'qiw'       #与前面等价

>>> a,b

('q', 'i')

>>> a,b = 'qiw'         #报错了,因为左边和右边不是一一对应

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: too many values to unpack
>>> (a,b),c = "qi","wei"    #注意观察,这样的像是是如何对应的

>>> a,b,c

('q', 'i', 'wei')

>>> string = "qiwsir"

>>> a,b,c = string[0],string[1],string[2]   #取切片也一样

>>> a,b,c

('q', 'i', 'w')

>>> (a,b),c = string[:2],string[2:]

>>> a,b,c

('q', 'i', 'wsir')

从实验中,可以看出,要搞清楚这种眼花缭乱的赋值,就仅仅扣住“一一对应”这个命脉即可。

如果看官用python3,在赋值上还有更多有意思的东西呢。不过,本讲座用的还是python2。

Python 相关文章推荐
python将人民币转换大写的脚本代码
Feb 10 Python
Python的面向对象思想分析
Jan 14 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
Python简单定义与使用二叉树示例
May 11 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
Python短信轰炸的代码
Mar 25 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python实现扫雷游戏的示例
Oct 20 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 #Python
跟老齐学Python之不要红头文件(2)
Sep 28 #Python
跟老齐学Python之不要红头文件(1)
Sep 28 #Python
python自动化测试之连接几组测试包实例
Sep 28 #Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 #Python
跟老齐学Python之有容乃大的list(4)
Sep 28 #Python
跟老齐学Python之做一个小游戏
Sep 28 #Python
You might like
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
javascript操作ul中li的方法
2015/05/14 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
python中sleep函数用法实例分析
2015/04/29 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
python如何随机生成高强度密码
2020/08/19 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
劳资人员岗位职责
2013/12/19 职场文书
网络程序员自荐信
2014/01/25 职场文书