python运行或调用另一个py文件或参数 1. 运行另一个py文件 (1)在file_A.py中运行file_B.py文件 1 2 3 4 5 import os os.system(python file_B.py para_a1 para_a2) #其他形式 os.system(python file_B.py %s % para_A) os.
python运行或调用另一个py文件或参数1. 运行另一个py文件(1)在file_A.py中运行file_B.py文件
需要注意文件路径的写法,因为我是在docker中运行文件,文件名前面需要加/,如os.system("python /file_B.py") (2)file_B.py使用file_A.py传递的参数
2. 引用另一个py文件中的变量
python调用自己写的py文件python如何调用自己写的py文件呢?同一个目录下直接写import xx就好了,xx为自己要调用的模块名字,虽然会有下划线报错,其实,没有错,仍然可以调用,之前一直都被报错吓住了 如果是不同目录怎么调用呢?那就把需要调用的那个目录添加一下,比如调用C:\xxx\a.py 那就添加一下c:\xxx路径(windows的路径和linux的路径符号不同\\,/,注意区别) 然后import a就行了,前面写r是为了告诉python这是路径,别把\n等特殊组合给转译了, 如果同c:\xxx目录下有多个文件,比如a.py,b.py等等,也可以直接导入了,因为这是告诉python去这个文件夹寻找包文件
如果需要调用的多个文件在多个目录呢?当然可以多次写sys.path.append(r"C:\xxx")来添加多个目录, 但是这样很麻烦,如果文件距离很近,比如这样就没有必要写 解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法 也可以这样,表示bbb是一个包,bb是bbb的子包,b是bb包的内部的方法 然后如果你需要调用a.py与b.py,就可以 testcode.py
如果你在c.py文件,想要调用a.py,b.py只需要用到步骤2的知识即可,比如 c.py
关于__init__.py的解释作用是将文件夹变为一个Python模块,导入包时,事实上是导入了它的__init__.py文件 __init__.py 文件可以为空,但是也可以添加如下两个功能 1.初始化包中各个模块,批量导入 pack包,配置__init__.py
导入pack包 访问__init__.py文件中的引用文件,需要加上包名
2.__init__.py中的__all__,全部导入所声明的模块 此时导入pack包就相当于导入了a.py,b.py,c.py pack包,配置__init__.py
调用
关于sys.path的解释当导入模块时,解释器按照sys.path列表中的目录顺序来查找文件。
会打印出一个list列表,表示引入文件时查找的文件目录,第一个元素空字符表示当前目录 关于pyc与pyo文件pyc就是py编译时生成的字节码文件,以后每次导入都会执行pyc,当py文件更新时pyc也会更新 如果解释器添加-o命令,py编译时会生成pyo文件,它相比pyc去掉了断言(assert)、断行号以及其他调试信息,运行速度更快 如果使用-OO选项,生成的pyo文件会忽略文档信息 模块导入时内部的原理import可导入的对象可以是以下类型:
解释器工作: 1.根据导入的文件名创建命名空间(用来访问文件内部属性与方法) 2.在命名空间内执行源代码 3.创建一个源代码文件的对象,这个对象引用对应的命名空间,管理模块的内部函数与变量 4.一个模块可以多次导入,但是后面导入的模块只执行第三步 sys.modules可以打印出导入的模块名与模块对象的映射 因此可以理解导入文件的三种方式:
|
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27