从print(‘andunderst‘[3:6] + ‘andunderst‘[6:10] + ‘andunderst‘[0:3])中也许你发现自己白敲了几年Python代码
今天我们来聊下python代码:
print('andunderst'[3:6] + 'andunderst'[6:10] + 'andunderst'[0:3])
看到这句代码,可能很多同学会说这不简单吗?而且是简单的不能再简单。
但你真的理解它吗?
今天我们就来说说它:
1.从栈的层面
2.从堆的层面
3.从代码内部运行顺序
下面图片你将看到整个代码的执行过程。我们来一起看看吧。
上面的图是代码没运行的时候,下面我们点下调试,之后用F7
来一步步的运行调试。
上图中在界面左上角点下调试按钮:
上图中我们发现这条代码初压到栈中了
再F7一下,上图中我们发现代码要开始执行'andunderst'[3:6] + 'andunderst'[6:10] + 'andunderst'[0:3]
接着往下走,发现代码开始执行'andunderst'[3:6] + 'andunderst'[6:10]
然后就是开始执行'andunderst'[3:6]
F7发现,代码要开始执行'andunderst'
然后是把andunderst
存入内存堆中,并指向了堆中内存所以的指针位置,andunderst
也变成了指针位置了。
然后是把3存入内存,
接着是6存入内存
现在发现,代码'andunderst'[3:6]
都指向了内存地址。
有没有发现'andunderst'[3:6]
结果出来了,同时也存入内存中,返回了内存地址。
然后是执行'andunderst'[6:10]
同样是先执行'andunderst'
然后是找到'andunderst'
在内存的指针指向。
下面接着存入并找到6,10在内存的指针位置。
开始计算'andunderst'[6:10]
的结果。
结果出来了,已经存入内存中了。
到这里,很多同学会说下步是执行'andunderst'[0:3]
,但是你想错了。
我们发现程序把'andunderst'[3:6] + 'andunderst'[6:10]
给算出来了,结果已经存入内存。结果就变成了print( 0x44d0e20+ 'andunderst'[0:3])
下面接着执行'andunderst'[0:3]
,并把andunderst
0,3存入内存,并找到指针位置。
马上要出'andunderst'[0:3]
的结果了。然后存入内存。
这里两个+运算马上要计算完了。
最后的运行结果出来了。
整条代码运行下来,有没有发现比较神奇,特别是字符串的加运算。
如果有兴趣的同学可以试着运行下面的命令:
x = 'andunderst'
print(x[3:6] + x[6:10] + x[0:3])
然后在运行的时间看看变量是怎么存入内存的。
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用