跟老齐学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快速排序代码实例
Nov 21 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
对Python中数组的几种使用方法总结
Jun 28 Python
Random 在 Python 中的使用方法
Aug 09 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
详解如何设置Python环境变量?
May 13 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
Mar 09 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
python sleep和wait对比总结
Feb 03 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之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
Django 开发环境配置过程详解
2019/07/18 Python
python绘制雪景图
2019/12/16 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
个人收入证明范本
2014/01/12 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
公司经理聘任书
2014/03/29 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
三峡人家导游词
2015/01/31 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
小程序自定义轮播图圆点组件
2022/06/25 Javascript