python导⼊其他py⽂件-python如何引⽤其他py⽂件⾥的函数python引⽤其他py⽂件⾥的函数⽅法
Python中在脚本中引⽤其他⽂件函数的⽅法
在导⼊⽂件的时候,Python只搜索当前脚本所在的⽬录,加载(entry-point)⼊⼝脚本运⾏⽬录和sys.path中包含的路径例如包的安装地址。所以如果要在当前脚本引⽤其他⽂件,除了将⽂件放在和脚本同⼀⽬录下,还有以下⼏种⽅法,
1. 将⽂件所在位置添加到sys.path中
import sys
sys.path.insert(0, '/path/to/application/app/folder') # or sys.path.append('/path/to/application/app/folder')
import file
2. 在⽂件⽬录下新建__init__.py⽂件然后调⽤⽂件
from application.app.folder.file import func_name
init.py⽂件
a).__init__.py⽂件的作⽤
该⽂件的主要作⽤使初始化Python包。如果⽬录下⾯包含了该⽂件,Python解释器就会将该⽬录当做⼀个包,下⼀步就可以使⽤import语句在别的.py脚本中引⽤该⽬录下的⽂件。⼀个标准Python模块的结构如下所⽰:
package/
__init__.py
file.py
file2.py
subpackage/
__init__.py
submodule1.py
submodule2.py
b). __init__⽂件可以为空但可以⽤来建⽴对包的需求。⼀般来说会在该⽂件中写那些类,函数等需要被导⼊到包⽔平,从⽽可以被⽅便的引⽤。⽐如:如果file.py⽂件中有⼀个File类,在init.py⽂件中啥都没写时引⽤File类需要这样操作:
from package.file import File
如果在__init__.py⽂件中将file导⼊包,那就在包⽔平可以直接引⽤File类:
# in your __init__.py
from file import File
# in your script
from package import File
此外,还需要注意的⼀点是__init__.py⽂件中的all变量。如果解释器在__init__.py⽂件中观察到了__all__变量,那么在运⾏from package import *时就只会引⼊__all__变量中列出的那些模块。例如:如果想在上述结构的只引⼊submodule1模块,那么可以在
subpackage/__init__.py⽂件中定义__all__ = ['submodule1'],当引⽤subpackage时from subpackage import *就只引⼊了submodule1模块。
3. 将⽂件所在⽬录添加到python的环境变量
export PYTHONPATH=$HOME/pathToYourScripts/:$PYTHONPATH
对python同⼀个⽂件夹⾥⾯不同.py⽂件的交叉引⽤⽅法详解
⽐如有两个模块,⼀个aa.py,⼀个bb.py 代码如下:
aa.py:
#encoding:utf-8
import bb
a=1
python怎么读文件夹下的文件夹bb.py:
#encoding:utf-8
import aa
print aa.a
执⾏bb.py时,不能执⾏,打印错误 AttributeError: 'module' object has no attribute 'a'
原因:
如果执⾏bb的话,这时候bb是__main__,不是module,所以会执⾏到bb的from aa,这个时候python会执⾏aa.py,⽽aa.py⼀开始就是from bb,所以python⼜会去执⾏bb.py,因为bb.py的⼀开始就是from aa,并且因为之前执⾏过,所以这个时候aa已经在dule ⾥⾯,所以python不会重新执⾏aa.py,⽽只是把dules⾥⾯的aa返回给你,所以当执⾏到bb.py的print b 的时候,还没有执⾏aa.py⾥⾯的a=1,所以会有不到a的attribute error
解决⽅案:
aa.py:
#encoding:utf-8
import bb
a=1
bb.py:
#encoding:utf-8
import aa
if __name__=="__main__":
print aa.a
以上这篇对python同⼀个⽂件夹⾥⾯不同.py⽂件的交叉引⽤⽅法详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持码农之家。
以上就是本次给⼤家分享的关于java的全部知识点内容总结,⼤家还可以在下⽅相关⽂章⾥到相关⽂章进⼀步学习,感谢⼤家的阅读和⽀持。
您可能感兴趣的⽂章:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。