python - 第二天
数字:
Python 数字数据类型用于存储数值。
数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。
也就是如果修改了某个变量的值,会重新为该变量分配内存空间,但似乎改变列表(下方的变量b)内的元素,列表的内存空间没有改变,感觉b的存在类似于指针。
例子如下:
a=10;
b=[1,2,3];
print("原本的a的地址:",id(a));
print("原本的b的地址:",id(b));
print("原本的b[0]的地址:",id(b[0]));a=20;
b[0]=4;
print("修改后的a的地址:",id(a));
print("修改后的b的地址:",id(b));
print("修改后的b[0]的地址:",id(b[0]));
运行结果:
从运行结果上来看,列表内的元素的内存地址空间不是连续的,我简单查了一下,既然不连续,那b指向的这个空间存储的是什么,如下:(感觉python存储数据的方式目前很模糊了)
列表 b 的内存块是连续的,存储的是元素的引用(内存地址)。
列表中的元素本身(如整数 1、2、3、4)存储在不同的内存位置,但这些内存地址在列表的内存块中是按顺序排列的。
可以使用del语句删除一些数字对象的引用。
del语句的语法是:
del var1[,var2[,var3[....,varN]]]
您可以通过使用del语句删除单个或多个对象的引用,例如:
del var
del var_a, var_b
例子如下:
a=[1,2,3];
b=a;del a[0];
print(b);del a[-1];
print(b);del a;
print(b);
运行结果:
python支持三种数值类型:整型,浮点型和复数。
复数的赋值可以直接用 a+bj 形式,比如:1+2j ,或者使用 complex(a,b);a为实部,b为虚部,两者都是浮点型。
python的数值类型转换:
int(x) 将x转换为一个整数。(int型是直接截取整数部分,后面全部舍弃,且不能转换复数)
float(x) 将x转换到一个浮点数。
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
例子如下:
a=1.6;
b=int(a);
print(b);c=1+2j;
d=int(c);#这个会报错,因为复数不能转换为整型
print(d);
运行结果:
1 是对 a 进行 int 转换的结果,是 b 的值,后面的报错是因为对复数 c 进行了 int 转换,这个错误信息表明尝试将一个复数(complex)类型转换为整数(int)类型,而这是不允许的。int() 函数只能接受字符串、字节对象或实数(如整数和浮点数)作为参数,不能接受复数。
python的数字运算:
数字运算和我们日常的使用表达基本一致,比如:1+2,3-5,2*3之类的,这就是表达式,记得 ** 是幂运算, // 是除法中,只保留整数的部分,小数部分丢弃,向下取整(保留的是整数部分,但不一定是整型,结果具体是什么类型,和除数,被除数有关,如果有浮点数,那么结果就是浮点数。) % 是模运算,取余,结果是除法的余数。
变量在使用前必须先"定义"(即赋予变量一个值),否则会出现错误:
除此之外还有各种可以使用的数字函数,太多了,到时候需要了,再去记忆吧。
个人感觉,数字中需要注意的是,有哪些运算可以使用比如幂,取整,取余,不同类型混合运算时系统如何进行的类型转换,有哪些数字函数。
字符串:
可以使用单引号或者双引号来创建字符串(英文输入下的)
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
访问字符串中的值:
可以使用方括号 [ ] 来截取字符串,字符串的截取的语法格式如下:
变量[头下标:尾下标]
字符串中不同位置字符的索引值如图:
eg:
a="hello.world";
b=a[1:3];
c=a[-3:-1];
print(b,c);
print(a[0],a[-1]);
print(a[0:4:2]);#这里0:4:2表示从0开始到4结束,每隔2个取一个元素,但不包括索引值为4的那个字符,即第五个字符
运行结果:
字符串更新和拼接:
在 Python 中,字符串(str)是不可变对象。一旦创建,字符串的内容就不能被修改。任何试图修改字符串内容的操作都会导致 TypeError。
可以截取字符串的一部分并与其他字段拼接;
eg:
a="hello.world";
print(a);
a[0]="H";#字符串是不可变的,这里会报错;
a[-3:-1]="WWW";#同样报错;
print(a);
运行结果:
如果真的想要改变字符串中的值,可以
1,创建一个新的字符串:
通过字符串切片和连接来创建一个新的字符串。
eg:
a="hello.world";
print(a);
print("原本a的地址:",id(a));
a="H"+a[1:]; #这里通过拼接完成了改变,a[1:],表示从第二个字符开始到最后一个字符
print(a);
print("修改后的a的地址:",id(a));
运行结果:
这里也说明了,刚刚上面说的如果改变数字数据类型的值,将重新分配内存空间。
2,使用列表进行修改:
可以先将字符串转换为列表,修改列表后再将其转换回字符串。
a = "".join(b);#将列表b变成字符串,原列表内的元素通过双引号里面的元素连接
a="hello.world";
print(a);
print("原本a的地址:",id(a));
b=list(a);#将a转换成了一个列表,相当于[“h”,”e”,”l”,”l”,”o”,”.”,”w”,”o”,”r”,”l”,”d”]。
b[0]="H";
a=" ".join(b);#将列表转换成字符串,相当于“H”+”e”+”l”+”l”+”o”+”.”+”w”+”o”+”r”+”l”+”d”。#" "这里面有个空格,意思是使用空格连接列表内的这些元素,让其变成字符串print(a);
print(a);
print("修改后的a的地址:",id(a));
a="".join(b);#将列表转换成字符串,相当于“Hello.world”。#这里""里面上面都没有,相当于直接连接列表内的元素,让其变成字符串。,也可以使用其他的符合,比如逗号啥的
print(a);
运行结果如下:
3,格式化字符串:
使用字符串格式化方法(如 str.format() 或 f-string)来创建新的字符串。(这个暂时不明白,问的ai)
eg:
a = "hello"
a = a[:0] + "H" + a[1:] # 使用切片和连接
print(a) # 输出: Hello# 或者使用 f-string
a = "hello"
a = f"H{a[1:]}"
print(a) # 输出: Hello
还有各种转义字符,也太多了,边用边记忆吧。
字符串运算符:
+ | 字符串连接 | a + b 输出结果: HelloPython |
* | 重复输出字符串 | a*2 输出结果:HelloHello |
[] | 通过索引获取字符串中字符 | a[1] 输出结果 e |
[ : ] | 截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。 | a[1:4] 输出结果 ell |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | 'H' in a 输出结果 True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | 'M' not in a 输出结果 True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | print( r'\n' ) print( R'\n' ) |
% | 格式字符串 | 请看下一节内容。 |
字符串格式化:
最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
eg:
print("my name is %s,and my age is %d."%("guo",100));# %前面是没有逗号的,注意
运行结果:
下面的格式化操作符辅助指令感觉还是要看一下:
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
字符串还有内容,明天补。