python变量
变量小结
1.标识符的第一个字符必须是字母表中的字母(大写或者小写)或者一个下划线('_')。
2.标识符名称的其他部分可以由字母(大写或者小写)、下划线('_')或数字(0-9)组成。
3.标识符名称是对大小写敏感的。例如,myname 和myName不是一个标识符。
4.有效标识符名称的例子有 i、_my_name、name_23和a1b2_c3。
5.无效标识符名称的例子有 1things、this is spaced out 和 my-name。
变量关键字
以下关键字不能声明为变量名
import keyword
print(keyword.kwlist)
输出结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量命名习惯
1,以单一下划线开头变量名(_x)不会被 from module import 语句导入。
2,前后有下划线的变量名(_x_)是系统定义的变量名,对python解释器有特殊意义。
3,以两个下划线开头但结尾没有下划线的变量名(__x)是类的本地变量。
4,交互式模式下,变量名“ _ ” 用于保存最后表达式的结果。
变量名的命名风格
风格一:纯小写加下划线的方式
在python中,关于变量名的命名推荐使用这种方式
age_of_cat = 13
风格二:驼峰体
AgeOfCat = 13
变量的声明
1.一般申明
a = 100
b = 101
print(a)
print(b)
2.交叉赋值
a,b = 200,201
# print(值1,值2,值3, ..... ) 一行打印所有变量
print(a , b)
3.链式赋值
a = b = 300
print(a, b)
4.解压赋值
salaries = [111,222,333,444,555]
mon0,mon1,mon2,mon3,mon4 = salaries
print(mon0)
print(mon1)
print(mon2)
print(mon3)
print(mon4)
# mon0,mon1,mon2,mon3 = salaries # 报错 对应的变量名少一个不行
# mon0,mon1,mon2,mon3,mon4,mon5 = salaries # 报错 对应的变量名多一个也不行
引入*,可以帮助我们取两头的值,无法取中间的值
取前三个值
*会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
x,y,z,*_=salaries=[111,222,333,444,555]
print(x,y,z)
print(_)
取后三个值
*_,x,y,z=salaries=[111,222,333,444,555]
print(x,y,z)
x,*_,y,z=salaries=[111,222,333,444,555]
print(x,y,z)
salaries=[111,222,333,444,555]
_,*middle,_=salaries
print(middle)
解压字典默认解压出来的是字典的key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)
变量值三个重要的特征
id:反映的是变量值的内存地址,内存地址不同id则不同
type:不同类型的值用来表示记录不同的状态
value:值本身
name = 'Oracle'
print(id(name))
print(type(name))
print(name)
输出结果:
2899336181040
<class 'str'>
Oracle
关于id和值的说明:
(1)id不同的情况下,值有可能相同,即两块不同的内存空间里可以存相同的值
(2)id相同的情况下,值一定相同,x is y成立,x == y也必然成立
>>> x='info:Wuxia:18'
>>> y='info:Wuxia:18'
>>> print(x,y)
info:Wuxia:18 info:Wuxia:18
>>> print(id(x),id(y))
4565819264 4566192176
>>>
>>>
>>>
>>> x == y
True
>>> x is y
False
当下面的代码一起执行,和上面的结果不一样,因为代码编辑器 把预分配的范围扩大了。
var_x = 'info:Wuxia:18'
var_y = 'info:Wuxia:18'
print(var_x,var_y)
print(id(var_x),id(var_y))
print(var_x == var_y)
print(var_x is var_y)
输出结果:
Oracle
Oracle
2289306580336
2289306580336
True
True
is与==
is:比较左右两个值身份id是否相等
==:比较左右两个值他们的值是否相等
Python小整数池
从python解释器启动那一刻开始,就会在内存中事先申请好一系列内存空间存放好常用的整数。
小整数池其实就是一个指针数组,该数组的大小为262(257+5),
表示的小整数的范围为[-5,257)(包括-5,不包括257)
范例一:
m = 10
n = 10
print(id(m))
print(id(n))
res=4+6
print(res)
print(id(res))
输出结果:
140729229494208
140729229494208
10
140729229494208
范例二:
x = -5
y = -5
print(id(x))
print(id(y))
print(x is y)
输出结果:
140729373476320
140729373476320
True
范例三:
x = -6
y = -6
print(id(x))
print(id(y))
print(x is y)
输出结果:
3229128694512
3229128694512
True
-6不属于小整数池,出现上面的结果是因为代码编辑器 把预分配的范围扩大了。
范例四:
x = 'aaa'
y = 'aaa'
print(id(x))
print(id(y))
输出结果:
2338310665520
2338310665520
变量的交换
a = 18
b = 19
# 通用写法
tmp = a
a = b
b = tmp
print(a,b)
# python特有
a = 18
b = 19
a,b = b,a
print(a,b)
常量
永远不变的量(约定俗成:把每个字母都变成大写)
BIRTHDAY = "1010"
ID_CARD = 210205200010106688
一个变量赋值的例子
name1 = 'test1'
name2 = name1
print(name2)
name1 = 'test2'
print(name2)
输出结果:
test1
test1
可从上述输出看出,在改变name1变量时候,name2也不会变(值还是test1)。
说明name1和name2指向了不同的内存地址,可以用命令 id 验证之,如下:
name1 = 'test1'
print(id(name1))
name2 = name1
print(id(name2))
name1 = 'test2'
print(id(name1))
输出结果:
2351814381040
2351814381040
2351814381360
python的复制:深拷贝和浅拷贝的区别
(1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变
alist = [1,2,3,["a","b"]]
b = alist
print(b)
alist.append(5)
print(alist)
print(b)
输出结果:
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b'], 5]
(2)copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
alist = [1,2,3,["a","b"]]
import copy
c = copy.copy(alist)
print(alist)
print(c)
alist.append(5)
print(alist)
print(c)
print(alist[3])
alist[3].append('cccc')
print(alist)
print(c)
输出:
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]
['a', 'b']
[1, 2, 3, ['a', 'b', 'cccc'], 5]
[1, 2, 3, ['a', 'b', 'cccc']]
(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
alist = [1,2,3,["a","b"]]
import copy
d = copy.deepcopy(alist)
print(alist)
print(d)
alist.append(5)
print(alist)
print(d)
print(alist[3])
alist[3].append("ccccc")
print(alist)
print(d)
输出结果:
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]
['a', 'b']
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']]
浙公网安备 33010602011771号