专栏首页TeamsSix的网络空间安全专栏Python3学习笔记 | 十二、Python的语句与语法-赋值与表达式

Python3学习笔记 | 十二、Python的语句与语法-赋值与表达式

一、赋值语句简介

在Python里,赋值语句与其它语言有所不同,它不是直接把相应的值赋给变量,而是把对象的地址赋给变量,让变量可以找到相应的对象,这个叫做对象的引用。 • 赋值语句建立对象引用值。Python赋值可以理解成存储了对象的指针 • 变量名在首次赋值时会被创建。因为变量本身没有类型,所以不需要提前创建 • 变量名在引用前必须先赋值。 • 执行隐式赋值的一些操作。所谓的隐式赋值,就是函数调用、模块倒入、类的定义、for 循环等。

二、赋值语句形式

_text = ‘Text’ :基本形式 _text1, _text2 = ‘Text1’, ‘Text2’ :序列赋值-元组赋值运算 [_text1, _text2] = [‘Text1’, ‘Text2’] :序列赋值-列表赋值运算 t1, t2, t3, t4 = ‘TEXT’ :序列赋值-字符串赋值运算 t1, *t2 = ‘TEXT’ :扩展的序列解包(Python 3.x) t1 = t2 = ‘TEXT’ :多目标赋值运算 t1 += 1 :增强赋值运算

三、序列赋值

>>> _1st=1
>>> _2nd=2
>>> first,second=_1st,_2nd
>>> first
1
>>> second
2

变量的个数与后面序列的元素个数必须一致。

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

1、不对称

我们有三个变量,a,b,c。我们想把text存储到这三个变量里:

>>> a,b,c='text'[0],'text'[1],'text'[2]
>>> a,b,c
('t', 'e', 'x')
>>> a,b,c=list('text'[:2])+['text'[2:]]
>>> a,b,c
('t', 'e', 'xt')
>>> a,b='text'[:2];c='text'[2:]
>>> a,b,c
('t', 'e', 'xt')
>>> (a,b),c='text'[:2],'text'[2:]
>>> a,b,c
('t', 'e', 'xt')

2、迭代用法

>>> mylist=[(1,2,3),(4,5,6),(7,8,9)]
>>> for a,b,c in mylist:
...     print(a,b,c)
...
1 2 3
4 5 6
7 8 9

这个可以理解为:每次迭代的时候,提取一个列表里的元素。第一次为例:提取(1,2,3),然后执行a,b,c = (1,2,3)。因此第一次a引用的值是1,b为2,c为3。以此类推。

>>> L=[1,2,3,4]
>>> while L:
...     T,L=L[0],L[1:];print(T,L)
...
1 [2, 3, 4]
2 [3, 4]
3 [4]
4 []

3、扩展序列解包

之前变量与对象不对称的时候,需要特殊操作。这个在Python3.x之后有了新的用法。

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

之前的循环方法,在这里也可以使用扩展序列解包:

>>> L=[1,2,3,4]
>>> while L:
...     T,*L=L;print(T,L)
...
1 [2, 3, 4]
2 [3, 4]
3 [4]
4 []

扩展解包当遇到只有一个元素,或者没有元素的时候即在边界情况的时候:

>>> T=(1,2)
>>> a,*b=T
>>> a,b
(1, [2])
>>> a,b,*c=T
>>> a,b,c
(1, 2, [])
>>> *a,b,c=T
>>> a,b,c
([], 1, 2)
>>> *a=T
 File "<stdin>", line 1
SyntaxError: starred assignment target must be in a list or tuple
>>> *a,=T
>>> a
[1, 2]

四、多目标赋值

多目标赋值就是按下面方式赋值:

>>> a=b=c='Dora'

这个时候,跟之前说的,会把所有到对象的引用赋给a, b, c三个变量。因此这个时候这三个都是完全一样的。

>>> a=b=c='Dora'
>>> a is b
True
>>> b is c
True
>>> a is c
True

上边赋值相当于:

c = 'Dora'
b = c
a = b

关于共享引用,请查看之前笔记:“类型与运算-其它”中的引用与赋值。

五、增强赋值语句

下面的几个语句就是增强赋值语句: X += Y,X -= Y,X = Y X /= Y,X *= Y,X //= Y X %= Y,X &=Y,X |= Y X ^= Y,X <<= Y,X >>= Y 举个例子: X += 1 我们可以认为这个是 X = X + 1, 但在列表中是有区别的。

>>> M=L=[1,2]
>>> L=L+[3,4]
>>> M,L
([1, 2], [1, 2, 3, 4])
>>> M=L=[1,2]
>>> L+=[3,4]
>>> M,L
([1, 2, 3, 4], [1, 2, 3, 4])

六、变量命名规则

变量名可以是大小写字母,数字和下划线“”。但只能以大小写字母或下划线开头,不能以数字开头。变量名是区分大小写的。保留字符是不能使用的。 Python 3.0里的保留字符: False,class,finally,is, return,None,continue,for, lambda,try,True,def, from,nonlocal,while,and, del,global,not,with, as,elif,if,or,yield, assert,else,import,pass, break,except,in,raise 在Python2.7里exec,print是保留字段,但nonlocal, False, True不是。 特殊变量名: _main等,前后都有两个下划线的变量名,有很多是有特殊意义的。

七、表达式语句

表达式,就是等号右边的部分。表达式本身不会存储:

>>> d=print('Dora')
Dora
>>> d
>>> print(d)
None

常见表达式语句: Add(1, 2):函数调用 MyClass.Add(1,2):方法调用 Text:打印变量(交互模式) print(‘My text’):打印操作


本文分享自微信公众号 - TeamsSix(OldCat0111),作者:Teamssix

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 记录一次有点儿不一样的XSS

    由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和...

    TeamsSix
  • Django 学习笔记 | 2、模型

    在这之前需要先设计数据库的表什么的,这里就不详细的说了(主要是我太懒了),感兴趣的可以看本文的参考链接,下面直接贴定义模型类的代码。

    TeamsSix
  • 经验总结 | 常见的HTTP方法

    HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT方法。

    TeamsSix
  • python学习总结二(python基础

    转眼间已经2月份了,python学习总结二进行中ing,今年的目标和打算。。。哎动力哪来,继续吧。

    py3study
  • 一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构

    本文内容讲解的内容:一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构。

    夜尽天明
  • SSH-MITM:支持公钥认证&会话劫持和文件篡改的安全审计MITM服务器

    SSH-MITM服务器专为安全审计而设计,支持公钥认证、会话劫持和文件篡改等功能。需要注意的是,该工具基于Python语言开发,因此需要在主机设备上安装并配置好...

    FB客服
  • 【PAT乙级】德才论

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • Excel公式:文本连接符&,多单元格文本连接

    林万程
  • IE6下的png透明图片的背景定位

    在IE6下PNG透明图片做背景,无法使用background-position进行定位。但是可以使用margin和绝对定位来进行。 另外,由于IE6下的 :ho...

    欲休
  • Python交互数据库(Mysql | Mongodb | Redis)Mysql操作数据库Mongdbredis

    数据库 Mysql Mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司...

    zhaoolee

扫码关注云+社区

领取腾讯云代金券