跟老齐学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简单日志处理类分享
Feb 14 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python生成密码库功能示例
May 23 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
pycharm显示远程图片的实现
2019/11/04 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
《三峡》教学反思
2014/03/01 职场文书
论文评语大全
2014/04/29 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
三下乡个人总结
2015/03/04 职场文书
员工离职证明范本
2015/06/12 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android