Python变量和运算符

变量的命名规则

  • 由数字、字母、下划线构成,其中数字不能开头
  • 系统关键字不能用在变量名中(保留关键字)
  • python中区分大小写
# 变量
a = [1, 2, 3, 4]  # 定义一个变量
type = 1
print(type)
type(1)  # 此时的type是1 至关因而1(1) 所以int 不是可调用的

# 输出结果
1
TypeError: 'int' object is not callable

值类型和引用类型

  • 常见的值类型:int str tuple 不可改变
  • 常见的引用类型:list set dict 可改变
# 值类型
a = 1
b = a
a = 3
print(a)
print(b)

# 引用类型
list1 = [1, 2, 3, 4]
list2 = list1
list1[1] = '2'
print(list1)
print(list2)

# 输出结果
3
1
[1, '2', 3, 4]
[1, '2', 3, 4]

上述值类型和引用类型要进行区分,其中值类型会常见一块新的内存空间来存储,对于引用类型仅仅是一个指针,指向的仍是同一个内存区域python

string = 'hello'
id(string)  # id方法能够展现出来某个变量在内存中的地址
string = string + ' python'
id(string)    # 能够发现string已经发生了改变 指向了一个新的内存区域
string[0] = 'a'  # str一旦定义 不可改变

# 输出结果
57705504
12109688
'str' object does not support item assignment

tuple list类型区别

list 是可变的对象,元组 tuple 是不可变的对象安全

因为 tuple 不可变,因此使用 tuple 可使代码更安全多线程

tuple 不可变的好处并发

相对于 list 而言,tuple 是不可变的,这使得它能够做为 dict 的 key,或者扔进 set 里,而 list 则不行。app

tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提高:建立 tuple 比 list 要快,存储空间比 list 占用更小。因此就出现了“能用 tuple 的地方就不用 list”的说法。性能

多线程并发的时候,tuple 是不须要加锁的,不用担忧安全问题,编写也简单多了。测试

# 不可修改值
a = [1, 2, 3]
print(id(a))
print(hex(id(a)))
a[0] = '1'
print(id(a))

a= (1, 2, 3)
a[0] = '1' # error

# append 操做
b = [1, 2, 3]
b.append(4)
print(b)

c = (1, 2, 3)
c.append(4)  # tuple类型没有append的方法

# 输出结果
69249416
0x420a988
69249416
'tuple' object does not support item assignment
[1, 2, 3, 4]
'tuple' object has no attribute 'append'

python 运算符号

算术运算符

+
-
*
/ 除以 获得的都是float
// 整除 向下取整
% 求余
** 次方 2**3 2的三次方

赋值运算符

=
+=
*=
/=
//=
%=
**=
# 注意 python中没有++ -- 运算符

关系运算符

==  # 对于number类型来讲 == 判断是相等的
!=
>
<
>=
<=
# 返回的是一个bool类型
d = 1
d+=d>=1
print(d)  # 2

# == 的特殊性
a = 0
b = False
print(a == b)  # True

逻辑运算符

and
or
not 返回的都是bool类型
'''
逻辑短路原则
and 第一个为真 那么返回第二个;若是第一个为假,返回第一个
or 第一个为假,那么返回第二个;若是第一个为真,返回第一个
同时要注意 基本类型 和 True False的转化
'''

成员运算符

判断一个元素是否在另外的一组元素当中线程

in
not in
# 成员运算符能够在字符串、列表、元祖、集合、字典中进行应用,返回结果为布尔类型
b = 'c'
print(b in {'c':1})

# 输出结果
True  # 字典判断的是key是否在字典中

身份运算符

is
not
# 若是两个变量取值相等,则is返回True
a = 1
b = 2
a is b  # False
b = 1
a is b  # True

# is和 == 的区别
'''
== 表示的是值是否相等
is 表示的是所指向的内存地址是否相等
'''
a = 1
b = 1.0
a == b  # True
a is b  # False

# 思考题目
a = {1,2,3}
b = {2,1,3}
a == b  # True 集合是无序的
a is b  # False 因为是引用类型 所以表示的是两个集合 能够用id()测试

c = (1,2,3)
d = (2,1,3)
c == d  # False 元组属于序列 它是无序的
c is d  # False 虽然是值类型 由于值类型是两个值 所以内存地址也不一样

扩充:三种判断

  • is 判断id是否相同,就是进行身份的判断,判断两个变量所对应的内存地址是否相等
  • == 判断值是否相同,注意number类型来讲,0和False的值是相同的
  • 类型判断,判断两个变量的类型是否相同
# 判断方法一
a = 1
type(a) == int  # True 不推荐使用 不能判断变量的子类是否为该类型

# 判断方法二
isinstance(a,str)  # False
isinstance(a,(int,str,float))  # 这个方法的第二个参数能够接受一个元组,那么就判断a是否为元组中的任意一种 True

# 注意说明:
对象的三个特征:id value type

位运算符

都是把数当作二进制进行运算
& 按位与
| 按位或
^ 按位异或 相同为0 相反为1
- 按位取反
<< 左移运算符
>> 右移运算符
相关文章
相关标签/搜索