当前位置: 首页 > article >正文

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字符串的内存分配方式 

如果两个字符串相等,则两个字符串有相同的地址:

如果两个字符串不相等,则它们分别有着自己的内存地址,但是其中相同的元素有着相同的地址: 


完~


http://www.kler.cn/a/467572.html

相关文章:

  • 每日一题:BM1 反转链表
  • 基于Informer网络实现电力负荷时序预测——cross validation交叉验证与Hyperopt超参数调优
  • 使用 Optimum Habana 在 Intel Gaudi 上加速模型训练与推理
  • TPS和QPS的区别
  • 小程序租赁系统开发的优势与应用前景分析
  • 凸包(convex hull)简述
  • 友元和运算符重载
  • [网络安全]shiro安全框架基本原理
  • RabbitMq的Java项目实践
  • 1、ELK的架构和安装
  • 黑马Java面试教程_P11_技术场景
  • NAT网络技术
  • 基于Node.js + Koa2 + MySQL + TypeScript的应用示例
  • 现代光学基础-3
  • 第十四届蓝桥杯Scratch省赛中级组—智能计价器
  • Linux下shell命令之netstat详解及示例
  • 第六十四章 假脱机设备 - 使用 %SPOOL 打印
  • 深度解析与实践:HTTP 协议
  • 25/1/14 算法笔记<强化学习> 生成对抗模仿学习
  • Navicat 17 for Mac 数据库管理软件
  • JS (node) 的 ACM 模式 + debug方法 (01背包为例)
  • Centos7无法使用 yum命令 报错 Cannot find a valid baseurl for repo: base/7/x86_64
  • halcon三维点云数据处理(六)find_box_3d
  • 无刷直流电机(BLDC)六步换向法
  • ARM 汇编基础总结
  • 语义搜索、语义数据搜索