python——对三大语句的补充、对象的内存分配
一.分支结构的三元运算符
对于简单的if else双分支结构,可以使用三元运算表达式来实现:
"""
if condition1:
operate1
else:
operate2
"""
# 利用三元运算表达式
# operate1 if condition1 else operate2
x = 10
if x>0:
x *= 10
else:
x -= 10
print(x)
# 利用三元运算表达式
y = x*10 if x>10 else x - 10
三元表达式可以简化代码,但是牺牲了一定的可读性。一些简单的if-else逻辑可以使用三元表达式来替代,复杂的逻辑还是使用if-else。
二.基于模式匹配的的 match/case 分支结构
python中的match/case分支结构,就类似于C++中的switch/case语句,但是略有不同。
match 匹配对象:
case 匹配表达式1:
分支1
case 匹配表达式2:
分支2
……
case _:
分支n
match后面的匹配对象会一次和case后面的表达式进行匹配,当找到一个匹配的case语句之后,会进入到该分支,后序就不会再进入其他任何一个分支了。如果匹配对象于所有的都没有匹配上,就会进行case _分支,类似于switch的default分支。
2.1匹配简单对象
match后面的匹配对象可以是简单的数字对象或者由这些对象构成的条件表达式:
x = 5
match x:
case 3:
print("x = 3")
case 5 | 6:
print("x = 5 或者 x = 6")
case _:
print(f"x = {x}")
2.2匹配序列对象
在匹配列表或元组等序列时,需要长度和元素都匹配才能匹配成功
x = [1,2]
match x:
case [1]:
print([1])
case [1,2]: # 匹配这个分支
print([1,2])
case [1,3]:
print([1,3])
case [1,2,4]:
print([1,2,4])
2.3匹配字典对象
匹配字典对象的时候,只要case后面的字典中的key在match对象中存在,即匹配成功;
如果case后面的字典中key相同,但value不同,则匹配不成功。
d = {1:"zhangsan",2:"lisi"}
match d:
case{1:_}:
print("匹配成功key")
case{1:"hello"}:
print("key,value都匹配成功")
case _:
print("匹配失败")
三.带有else分支的循环结构
python中出了普通的while循环和for训话之外,还新增了while-else循环和for-else循环。
while 条件:
循环体
else:
else语句
for 循环变量 in 可迭代对象:
循环体
else:
else语句
这两种循环的逻辑是:先循环,循环条件不成立了,则执行else语句,然后循环才结束。
但是如果在循环体中break了,则不执行else语句。只有是因为循环条件判断失败了,才执行else语句。
四.对象的内存分配
4.1整数、浮点数、布尔常量等基本数据类型的内存分配方式
在python中,整数、浮点数、布尔常量这些基本数据类型按照值来分配内存,同一个常量值只分配一个内存地址,即只要是相同的常量值都占用同一块内存空间。
当我们修改一个变量的值之后,它的内存地址就会改变:
4.2复数、序列中的列表与元组、映射、集合、自定义类的对象内存分配方式
对于这些对象来说,每个对象都有自己的内存地址,但是对象内的相同元素会占用同一块内存地址:
4.3字符串的内存分配方式
如果两个字符串相等,则两个字符串有相同的地址:
如果两个字符串不相等,则它们分别有着自己的内存地址,但是其中相同的元素有着相同的地址:
完~