《零基础上手Python爬虫系列》 - 04 变量与运算符
2020-02-13 本文已影响0人
聂云⻜
本篇主要讲述变量、常量和运算符的基本使用,持续更新。
变量
1. 变量的定义
变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:
a_1 = 'string'
# 不能以数字开头
1_a = 'string'
File "<input>", line 1
SyntaxError: invalid decimal literal
# 不能跟系统关键词重复
import = 1
File "<input>", line 1
import = 1
^
SyntaxError: invalid syntax
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。
起名字最好有意义,可以用简洁的英文单词标识,多个单词用下划线分隔。
2. 常量
所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。
2. 值类型
理解变量在计算机内存中的表示也非常重要。当我们写:
a = 1
此时,Python解释器干了两件事情:
- 在内存中创建了一个1的整型
- 在内存中创建了一个名为a的变量,并把它指向1
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据
>>> a = 1
>>> id(a)
4458617488
>>> b = a
>>> id(b)
4458617488
>>> a = 2
>>> id(a)
4458617520
>>> a,b
(2, 1)
3. 引用类型
>>> a = [1,2]
>>> b = a
>>> a[0] = '1'
>>> b
['1', 2]
>>> id(a)
4480304448
>>> id(b)
4480304448
int、str、tuple(不可改变的)是值类型
# 重新赋值后地址发生变化
>>> a = 1
>>> id(a)
4458617488
>>> a = 2
>>> id(a)
4458617520
# 字符串操作后地址也发生了变化
>>> a = 'hello'
>>> id(a)
4506199792
>>> a += 'python'
>>> id(a)
4513079344
list set dict(可变的)是引用类型
# 列表重新对整个列表赋值,会变化
>>> a = [1]
>>> id(a)
4480316928
>>> a = [2]
>>> id(a)
4480319168
# 但是操作元素不会发生变化
>>> a = [1,2]
>>> id(a)
4510858624
>>> a[0] = 3
>>> id(a)
4510858624
不可改变的类型,一旦赋值就不再变化,重新赋值给原来的变量名称,其实已经是一个新的变量了。 id() 标识一个地址,所对应的的地址变化,就是标识b已经不是原来的b了
>>> hex(id(a))
'0x10bb51a90'
运算符
1. 算数运算符
>>> [1,2,3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
# 除法,结果为浮点数, 所以整数的除法也是精确的
>>> 1/1
1.0
# 整除
>>> 1//2
0
# 求余
>>> 5%2
1
# 幂运算
>>> 2**3
8
2. 比较运算符
# 单个字符用ASCII码比较,多个字符串依次比较字符ASCII码
>>> 'a' > 'b'
False
>>> ord('a')
97
>>> ord('b')
98
# 不止数字可以比较,比较的过程中是依次比较各个元素
>>> [1,2] < [2,3]
True
>>> [1,2] < [2,3,1]
True
3. 赋值运算符
>>> a = 1
>>> a += 2
>>> a
3
4. 逻辑运算符
False
>>> not False
True
>>> not not False
False
逻辑运算返回结果也会有转换关系,or
# 结果跟顺序没有关系
>>> [1] or []
[1]
>>> [] or [1]
[1]
# 判断结果后不再继续往后处理
>>> 'a' or 'b'
'a'
>>> 'b' or 'a'
'b'
not 返回的是布尔型, or 和 and 会将结果转换
>>> 'a' and 'b'
'b'
>>> 'b' and 'a'
'a'
5. 成员运算符 in 和not in
>>> 'a' in 'abc'
True
>>> 'a' in ('a',)
True
>>> 'a' in ['a']
True
>>> a in {a}
True
# 字典的成员关系是针对key
>>> 'a' in {'a':'b'}
True
>>> 'b' in {'a':'b'}
False
6. 身份运算符 is
== 判断值是否相等,is比较两个变量的身份是否相同(类似PHP中的===)
>>> a = 1
>>> b = 1.0
>>> a == b
True
>>> a is b
False
# 即便对于无序的集合,依然要完全一致
>>> a = {1,2,3}
>>> b = {2,1,3}
>>> a
{1, 2, 3}
>>> b
{1, 2, 3}
>>> a == b
True
>>> a is b
False
判断类型
>>> a = '123'
>>> type(a) == str
True
# 优先使用
>>> isinstance(a, int)
False
# 可以指定多个
>>> isinstance(a, (int,str))
True
7. 位运算符
>>> a = 1
>>> b = 2
>>> bin(a)
'0b1'
>>> bin(b)
'0b10'
>>> a & b
0
>>> a = 2
>>> b = 3
>>> bin(a)
'0b10'
>>> bin(b)
'0b11'
>>> a & b
2
8 ,运算符的优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
表达式的运算的优先级
运算符的优先级
特例:and 的优先级 > or
可以添加括号来指定优先级,括号的优先级最高,加括号有利于代码的阅读