跟老齐学Python之赋值,简单也不简单


Posted in Python onSeptember 24, 2014

变量命名

在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本温故而知新的原则,这里要复习:

名称格式:(下划线或者字母)+(任意数目的字母,数字或下划线)

注意:
 1.区分大小写
 2.禁止使用保留字
 3.遵守通常习惯
 •以单一下划线开头的变量名(_X)不会被from module import *语句导入的。
 •前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊意义。
 •以两个下划线开头,但结尾没有两个下划线的变量名(__X)是类本地(压缩)变量。
 •通过交互模式运行时,只有单个下划线变量(_)会保存最后的表达式结果。
 
需要解释一下保留字,就是python里面保留了一些单词,这些单词不能让用户来用作变量名称。都有哪些呢?(python2和python3少有差别,但是总体差不多)

and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while yield

需要都记住吗?当然不需要了。一方面,可以在网上随手查到,另外,还能这样:

>>> not = 3

  File "<stdin>", line 1

    not = 3

        ^

SyntaxError: invalid syntax
>>> pass = "hello,world"

  File "<stdin>", line 1

pass = "hello,world"

         ^

SyntaxError: invalid syntax

 在交互模式的实验室中,用保留字做变量,就报错了。当然,这时候就要换名字了。

以上原则,是基本原则。在实际编程中,大家通常还这样做,以便让程序更具有可读性:
 •名字具有一定的含义。比如写:n = "qiwsir",就不如写:name = "qiwsir"更好。
 •名字不要误导别人。比如用account_list指一组账号,就会被人误解为是list类型的数据,事实上可能是也可能不是。所以这时候最好换个名称,比如直接用accounts。
 •名字要有意义的区分,有时候你可能会用到a1,a2之类的名字,最好不要这么做,换个别的方式,通过字面能够看出一定的区分来更好。
 •最好是名称能够读出来,千万别自己造英文单词,也别乱用所写什么的,特别是贵国的,还喜欢用汉语拼音缩写来做为名字,更麻烦了,还不如全拼呢。最好是用完整的单词或者公认的不会引起歧义的缩写。
 •单个字母和数字就少用了,不仅是显得你太懒惰,还会因为在一段代码中可能有很多个单个的字母和数字,为搜索带来麻烦,别人也更不知道你的i和他理解的i是不是一个含义。
 
总之,取名字,讲究不少。不论如何,要记住一个标准:明确

赋值语句

对于赋值语句,看官已经不陌生了。任何一个变量,在python中,只要想用它,就要首先赋值。

语句格式:变量名称 = 对象

上一节中也分析了赋值的本质。

还有一种赋值方式,叫做隐式赋值,通过import、from、del、class、for、函数参数。等模块导入,函数和类的定义,for循环变量以及函数参数都是隐式赋值运算。这方面的东西后面会徐徐道来。

>>> name = "qiwsir"
>>> name, website = "qiwsir","qiwsir.github.io"     #多个变量,按照顺序依次赋值

>>> name

'qiwsir'

>>> website

'qiwsir.github.io'
>>> name, website = "qiwsir"    #有几个变量,就对应几个对象,不能少,也不能多

Traceback (most recent call last):

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

ValueError: too many values to unpack

 如果这样赋值,也得两边数目一致:

>>> one,two,three,four = "good"

>>> one

'g'

>>> two

'o'

>>> three

'o'

>>> four

'd'

 这就相当于把good分拆为一个一个的字母,然后对应着赋值给左边的变量。

>>> [name,site] = ["qiwsir","qiwsir.github.io"]

>>> name

'qiwsir'

>>> site

'qiwsir.github.io'

>>> name,site = ("qiwsir","qiwsir.github.io")

>>> name

'qiwsir'

>>> site

'qiwsir.github.io'

 这样也行呀。

其实,赋值的样式不少,核心就是将变量和某对象对应起来。对象,可以用上面的方式,也许是这样的

>>> site = "qiwsir.github.io"

>>> name, main = site.split(".")[0], site.split(".")[1]   #还记得str.split(<sep>)这个东东吗?忘记了,google一下吧。

>>> name

'qiwsir'

>>> main

'github'

 增强赋值

这个东西听名字就是比赋值强的。

在python中,将下列的方式称为增强赋值:

增强赋值语句 等价于语句
x+=y x = x+y
x-=y x = x-y
x*=y x = x*y
x/=y x = x/y

其它类似结构:x&=y  x|=y  x^=y  x%=y  x>>=y x<<=y  x**=y  x//=y

看下面的例子,有一个list,想得到另外一个列表,其中每个数比原来list中的大2。可以用下面方式实现:

>>> number

[1, 2, 3, 4, 5]

>>> number2 = []

>>> for i in number:

...     i = i+2

...     number2.append(i)

... 

>>> number2

[3, 4, 5, 6, 7]

 如果用上面的增强赋值,i = i+2可以写成 i +=2,试一试吧:

>>> number

[1, 2, 3, 4, 5]

>>> number2 = []

>>> for i in number:

...     i +=2

...     number2.append(i)

... 

>>> number2

[3, 4, 5, 6, 7]

 这就是增强赋值。为什么用增强赋值?因为i +=2,比i = i+2计算更快,后者右边还要拷贝一个i。

上面的例子还能修改,别忘记了list解析的强大功能呀。

>>> [i+2 for i in number]

[3, 4, 5, 6, 7]
Python 相关文章推荐
Python Socket使用实例
Dec 18 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
更新修改后的Python模块方法
Mar 03 Python
Python守护进程实现过程详解
Feb 10 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
Python程序慢的重要原因
Sep 04 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
浅析Python中的套接字编程
Jun 22 Python
Python OpenCV形态学运算示例详解
Apr 07 Python
跟老齐学Python之深入变量和引用对象
Sep 24 #Python
Python greenlet实现原理和使用示例
Sep 24 #Python
跟老齐学Python之数据类型总结
Sep 24 #Python
跟老齐学Python之集合的关系
Sep 24 #Python
跟老齐学Python之集合(set)
Sep 24 #Python
跟老齐学Python之有点简约的元组
Sep 24 #Python
跟老齐学Python之dict()的操作方法
Sep 24 #Python
You might like
php中常用编辑器推荐
2007/01/02 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
解决python opencv无法显示图片的问题
2018/10/28 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
css sprite简单实例
2016/05/23 HTML / CSS
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
校运动会广播稿(100篇)
2014/09/12 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
永不妥协观后感
2015/06/10 职场文书
个人合作协议范本
2015/08/06 职场文书
高二化学教学反思
2016/02/22 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书