首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第6.2节 Python特色的动态可执行方法简介

  • 23-09-22 19:01
  • 3100
  • 10797
blog.csdn.net

一、    基本概念
动态可执行,是指在代码中通过外部输入或代码嵌入的常量字符串包含代码的方式提供Python代码,要求Python执行这些代码。这样就可以达到开放式运行的效果,提高程序的能力和灵活性。
动态可执行的方法带来方便和灵活性的同时,其实还是带来了安全性威胁。安全性威胁体现在两个方面:
1、    动态执行的代码可能改变原有代码的运行环境,导致出现异常的数据和执行结果。这个威胁可以通过名字空间(namespace)解决;
2、    动态执行代码本身带有攻击性,如文件的改变等。这个本节的动态可执行方法没有好的办法解决,最好的办法是控制输入的数据只允许特定的字符串出现。后续有可以解决的办法,等研究学习后再补充。

二、    关于名字空间
名字空间这个概念在函数介绍的章节做了一些介绍,本节再系统的介绍一下。名字空间(namespace)又被称为命名空间,实际上是一个代码访问的作用域,该空间内存放着相关的变量,不同名字空间的变量相互之间是隔离的,这种隔离确保同样名称的变量对应不同的数据,这样各个代码操作时只能影响自己操作空间的变量,不会影响没有操作空间的变量。
名字空间在Python内部是基于字典实现,键为变量名,值是变量对应的值,因此是名称到对象的映射。具体可见介绍compile方法时的例子。
Python的名字空间有三类:
1、Local(局部名字空间):每个函数所拥有的名字空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。在函数被调用时才被创建,但函数返回结果或抛出异常时被删除。(每一个递归函数每次递归调用都拥有自己的局部名字空间);
2、Global(全局名字空间):在模块被加载时创建,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。通常一直保留直到python解释器退出;
3、Built-in(内建名字空间):自带的内建名字空间,任何模块均可以访问,放着内置的函数和异常。在python解释器启动时创建,一直保留直到解释器退出。

Python程序执行期间会有2个以上活动的名字空间。三种名字空间的存续周期及顺序如下:
创建顺序:python解释器启动 ->创建内建名字空间 -> 加载模块 -> 创建全局名字空间 ->函数被调用 ->创建局部名字空间。
销毁顺序:函数调用结束 -> 销毁函数对应的局部名字空间 -> python虚拟机(解释器)退出 ->销毁全局名字空间 ->销毁内建命名空。

三、    语法分析与抽象语法树
1.    在计算机科学和语言学中,语法分析(英语:syntactic analysis,也叫parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程;
2.    语法分析器(parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入;
3.    抽象语法树(Abstract Syntax Trees,AST)其实是源代码的抽象语法结构的树状表现形式,在源代码的翻译和编译过程中,语法分析器创建出分析树;
4.    Python的AST支持:
1)    ast 模块帮助 Python 程序处理 Python 语法的抽象语法树;
2)    抽象语法树可通过将 ast.PyCF_ONLY_AST 传递给 compile() 内置函数来生成,或是使用此模块中提供的 parse() 辅助函数。返回结果将是一个对象树,其中的类都继承自 ast.AST。抽象语法树可被内置的 compile()函数编译为一个 Python 代码对象。
抽象语法树大家感兴趣可以参阅:https://zhuanlan.zhihu.com/p/26988179,虽然是介绍的JavaScript,但Python本质上也是一样的。
本节简单介绍了与动态执行相关的概念、请大家先理解,等本章内容全部学习完成后再回头回顾一下本节内容加深理解。
老猿Python(http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/90742517"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top