python模块:运行机制与编写方法

文章目录

        • python模块的导入机制:
        • python模块编写方法:

#mod1:
def printer(x):print(x)
#mod2:
print('hello')
n=1
#mod3:
x=1
y=[2,3]
>>> import mod1
>>> mod1.printer('hello')
hello
>>> from mod1 import printer
>>> printer('hello')
hello
>>> from mod1 import*
>>> printer('hello')
hello
>>> import mod2
hello
>>> mod2.n
1
>>> mod2.n=2
>>> import mod2
>>> mod2.n
2
>>> from mod3 import x,y
>>> x=42
>>> y[0]=42
>>> import mod3
>>> mod3.x
1
>>> mod3.y
[42, 3]
>>> from mod3 import x,y
>>> x=11
>>> import mod3
>>> mod3.x
1
>>> mod3.x=11
>>> mod3.x
11
>>> from mod3 import x,y
>>> x
11

python模块的导入机制:

1.每一个文件都是一个模块,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。在一个模块文件的顶层定义的所有变量名都成了被导入的模块对象的属性 。

2.一个程序包含多个文件(模块),程序作为一个顶层文件来构造,这个顶层文件使用在模块文件中定义的工具,这些模块也可能使用其他模块定义的工具。我们导入一个模块,就可以获取他的属性并使用它的工具(可被调用的函数或者是简单的数据数值)。可以在不同程序中再次使用某一模块。

3.python自带了很多模块,称为标准链接库。

4.import工作方式:

导入并不是把一个文件文本插入另一个文件,导入是运行时的运算,程序第一次导入指定文件时会执行:1.找模块文件,2.编译成位码,3.执行模块的代码来创建其所定义的对象。模块第一次被导入时才会进行,之后如果导入相同模块,会跳过这几个步骤,只提取内存中已加载的模块对象。

python已经导入的模块保存在一个内置的sys.moudles字典中,在一次导入操作的开始检查该表,如果模块不存在,将会启动那三个步骤。

5.python字节码编译:

程序执行时,python内部会将源代码(文件里的语句)编译成字节码(平台无关)的形式。python将把程序中的字节码保存为一个以.pyc为扩展名的文件。这是一种启动速度的优化,如果没有修改过源代码的话,下一次运行程序,python将会加载.pyc文件并跳过编译步骤。如果源文件的保存时间在字节码保存时间之后,那么再次运行程序时,字节码会重新被创建。

字节码不是机器的二进制代码,它是基于python的一种表现形式。

6.python虚拟机(PVM)

程序编译成字节码之后,字节码将会发送到python虚拟机上来执行。PVM是迭代运行字节码指令的一个大循环,它是python运行的引擎,是python系统的一部分。

PVM循环仍然需要解释字节码,和其他解释器不同,python有它内部的编译步骤。字节码指令相比cup指令需要更多工作。

7.三个步骤具体的细节:

搜索:python查找import语句所引用的模块文件

python模块搜索的路径:程序的主目录,pathonpath目录,标准库目录,.pth文件的内容。这四个组合起来就成了sys.path目录名称字符串列表。python会从左到右搜索这个列表中的目录。

主目录:当你运行一个程序,这个包含程序顶层脚本文件的目录就是主目录,这个目录下的其他模块(文件)将覆盖其他目录下的具有同样名称的模块。这个主目录总是优先被搜索,因此需要小心隐藏标准库模块。如果程序都位于单一的目录,那么所有导入都将会自动工作,不需要配置路径。

pathonpath目录:pythonpath环境变量设置中罗列出的所有目录。

编译:找到符合import语句的源代码文件后,编译成字节码。有时候,如果python在搜素路径上只发现了字节码文件,那么就直接会加载字节码(从而避免了泄露源代码)。

程序顶层文件的字节码是在内部使用之后就被丢弃,而被导入文件的字节码则保存在文件中,从而提高之后导入的速度。因此我们可以看见被导入文件的.pyc字节码文件,但往往看不到程序顶层文件的.pyc字节码文件。

8.模块让程序将其逻辑分割成一些独立完备的软件组件。每个模块的程序代码相互隔离,因此模块最小化了程序内不同部分之间的变量名冲突。

python模块编写方法:

1.使用模块:客户端可以通过import和form语句使用模块文件。

import语句:import会读取整个模块,需要通过模块名称得到模块属性。

form语句:获取模块特定的变量名,from可以把变量名复制到当前作用域,我们可以直接在脚本中使用复制后的变量名,而不需要通过模块。

from*语句:会取得模块顶层所有赋了值的变量名的拷贝。把一个模块的命名空间融入另一个模块中。

2.导入只会发生一次:在交互模式或者程序运行期间,之后的导入没有什么效果。如果第一次导入的时候,对模块中的变量进行初始化,第二次导入后,并不会重新执行此模块的代码,只是从python内部模块表中取出已创建的模块对象。(一般是import两次,但是第二次其实是没用的)

3.import和from属于赋值语句:

import语句:将整个模块对象赋值给一个变量名

from语句:将一个或多个变量名赋值给另一个模块中同名的对象。

from复制的变量名会变成共享对象的引用,修改已取出的不可变对象,不会影响模块中的那个不可变对象的值,但是修改可变对象,会影响模块内的那个可变对象。

以from复制而来的变量名和其源文件没联系(不可变对象),如果想要修改另一个文件的全局变量名,必须使用import

from只加载模块文件的一部分是不可能的,from也是会把整个模块导入到内存中,不管需要复制出多少变量名。

只能用import的场合:使用两个不同模块内定义的相同变量名的变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html标签a+hover事件,触发a标签hover事件,如何在元素底部显示蓝色底块_html/css_WEB-ITnose...

回复讨论(解决方案)你可以用li:hover border-bottom:3px solid blue;background-position:bottom; //是针对背景图片的位置,不是背景颜色height: 1px;//这里的高度为什么是1px?有什么目的?width:45px;可以采用1楼的做法,设置底部边框还有给你个动画效果…

微信小程序 界面从右边滑出_微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)...

本文实例讲述了微信小程序MUI侧滑导航菜单。分享给大家供大家参考,具体如下:实现的目标—-YDUI的Popup组件点击列表图标—-左侧的菜单栏显示—-点击关闭按钮或者右侧的遮罩层—-左侧菜单栏关闭实现方案1:左侧菜单和右侧展示页面分为上下两层w…

python函数:函数参数,常用函数工具

文章目录python函数之参数python的lambda表达式:函数工具:map,filter,reduce>>> def f(a):a99>>> b88 >>> f(b) >>> print(b) 88 >>> def ch(a,b):a2b[0]eoe>>> x1 >&g…

gradient设置上下渐变_图解CSS: CSS渐变

CSS的渐变主要分布在 conic-gradient()和repeating-conic-gradient()两个属性。在CSS中,CSS的渐变相当于图像,我们可以使用线性渐变(linear-gradient()和repeating-linear-gradient())、径向渐变(radial-gradient()和repeating-radial-gradient())和锥形…

2021泗阳致远中学高考成绩查询,2021高考成绩什么时候发布?可通过哪些途径查询?...

3、安徽省高考成绩预计将于6月23日公布各批次录取分数线和高考成绩,考生可通过安徽省教育招生考试院自行查分;4、湖南高考成绩将于6月25日左右公布,本科不再分一二三批,考生可通过湖南教育政务网、湖南省普通高校招生考试考生综合…

python函数之作用域

python函数之作用域: >>> def times(x,y):return x*y>>> times(2,4) 8 >>> times(3.1,4) 12.4 >>> times(eop,4) eopeopeopeop >>> def inset(s1,s2):res[]for x in s1:if x in s2:res.append(x)return res>>&…

mysql数据库的字符集_mysql数据库中字符集乱码问题原因及解决

前言有的时候我们在查看数据库数据时,会看到乱码。实际上,无论何种数据库只要出现乱码问题,这大多是由于数据库字符集设定的问题。下面我们就介绍一下,数据库的字符集的设定及乱码问题的解决。mysql数据库的字符集直白的说&#x…

加强计算机网络应用,如何加强计算机网络管理技术创新应用

车煜铭摘要:在社会的发展当中,计算机网络被普遍运用,因此,令人们对计算机网络的依赖性越来越大。长久以来,大部分计算机用户渴望获得一个稳定的网络氛围。为了符合这一需求,计算机网络管理系统随之诞生。其…

python基本语句

文章目录1.赋值语句序列赋值语句:多目标赋值语句:增强赋值语句:表达式语句2.条件语句和循环语句if语句:while循环:for循环:range计数器zip函数enumerate函数1.赋值语句 >>> a1 >>> b2 &…

mysql 经典面试_这些MySQL经典面试题你要知道!

1、MySQL的复制原理以及流程(1)、复制基本原理流程1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容&#xff…

html乱码框框,springmvc+font-awesome开发出的页面显示方框乱码的解决方法

在web.xml中配置如下:springorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:conf/spring-mvc.xml2spring/default*.cssdefault*.gifdefault*.jpgdefault*.pngdefault*.jpegdefault*.jsdefault*.svgdefault*.eotdefault*.woffdef…

1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?

一、单个数据库服务器的缺点数据库服务器存在单点问题;数据库服务器资源无法满足增长的读写请求;高峰时数据库连接数经常超过上限。二、如何解决单点问题增加额外的数据库服务器,组建数据库集群;同一集群中的数据库服务器需要具有…

python基本对象类型

文章目录python对象类型1.数字2.字符串3.列表4.字典5.元组6.文件7.其他核心类型python对象类型 1.数字 例子 >>> 123222 345 >>> 1.5*399 598.5 >>> 2**10 1024 >>> 3.1415*2 6.283 >>> 9.99991 10.9999 >>> import …

html响应式五栏布局,HTML – 响应式2列CSS布局,包括固定宽度的侧边栏?

在任何地方找不到解决方案(我猜这一定是一个非常常见的问题).我正在创建一个带侧边栏的响应式设计,其中侧边栏需要具有200px的固定宽度并且具有未知高度.我怎样才能使主要内容区占据所有剩余的宽度,而不会有任何不当行为.最接近我的是以下内容,但问题在于侧边栏可以与页脚重叠.…

js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...

var vue require(vue);引入vue的意思,commonjs的写法。node都是用require来载入模块的,可以看看webpackvue。require()可以调用模块。这不是就把vue模块命了个名吗?nodejs的写法,引入vue模块并命名为vue的意思。前端的东西&#…

(DFS)迷宫问题

题目: 从s到t,.意味着可以走,*意味着不能走,如果能走,输出路径,如果不能走,输出no。 输入: 5 6 ....S* .***.. .*..*. *.***. .T....输出: ....m* …

惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港

Intel、Thunderbolt 及 Xeon 均為 Intel Corporation 於美國及/或其他國家或地區的商標。Microsoft 及 Windows 為 Microsoft Corporation 於美國及/或其他國家或地區的註冊商標或商標。NVIDIA 是 NVIDIA Corporation 在美國及其他國家或地區的商標及/或註冊商標。USB Type-C™…

mysql定义条件和处理_mysql sql存储过程条件定义与处理

一、条件定义DECLARE condition_name CONDITION FOR condition_valecondition_value:sqlstate[value] sqldata_value |mysql教程_error_code二、条件处理DECLARE htype HANDLER FOR cond_value[...] sp_statementhandtype_value:sqlstate [value] saltate_value|contentname|sq…

(DFS)跳马

题目: 马走日,不考虑别马脚,问马能否从S走到T,其中‘#’表示不能落下,‘.’表示能落下 输入: .#....#S# ..#.#.#.. ..##.#..# ......##. ...T..... ...#.#... ...#..... ...###... ......... .##......输…

长沙医学院学位计算机考试内容,湖南长沙医学院2017年9月计算机等级考试报名时间...

长沙医学院2017年下半年第49次全国计算机等级考试(以下简称NCRE)将于2017年9月23至25日举行。为做好本次考试报名及相关考务工作,现将有关事项通知如下:一、报名时间:2016年6月7日—2016年6月18日,逾期不接受任何理由的补报名。二…