python_初始import

一、作者感悟

初次用python 的import 模块的时候我原本以为和java一样只是一个包的导入,没想到最后足足用了好久才把python的import模块弄明白,首先要知道python有三种编码,一种是面向过程,一种是函数式变成,一种是面向对象,而java只有面向过程和面向对象这两种,就导致我一直在绕了好久才从python 的import导入绕了出来。

二、初始import

作者理解:
import可以理解成,去把其他文件下 .py结尾的文件代码,导入当前文件
定义:
模块:用来从逻辑上组织pthon代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的文件名

import text#根据上面的定义就可以理解导入一个text.py的文件

那如果过我只是想导入这个文件的某个方法该怎么做

#从 text.py 文件中调用他的name,这个就给看文件当时的具体定义name是一个方法还是一个属性
from  text import name

但上面这种调用作者不支持大家这么使用,举个例子

from  text import name
name="王大傻"
print(name)

这时候系统执行的name是当前本文件的王大傻,还还会是text.py文件内的name属性,我们可以运行一下

python_初始import_第1张图片
捕获.PNG

我们在text.py文件下建立了一个变量name赋值text,运行上面的代码发现输入的内容是


捕获1.PNG

所以大家知道为什么作者不建议单独从一个py文件中引入单个方法了吧,容易造成当前文件下如果有同名的,你导入的模块会失效,为什么会产生这样的问题

from  text import name
name="王大傻"
print(name)

这段代码可以看成

name=‘text’#相当于from  text import name
name="王大傻"
print(name)

聪明的读者其实反映过来,并不是没执行只是被覆盖了
在python import的导入还有一套规则

import sys
print(sys.path)

运行上面的代码我们发现,其实python引入的包都是存在一个列表中,首相import 会先从当前文件目录下寻找结果,然后再依次去从python的系统指定的文件寻找,当我们在别的目录下写好的包,或者脚本想导入的时候该怎么做,我们可以用append方法将目录加到sys.path中

python_初始import_第2张图片
捕获2.PNG

既然现在报错了,我们就用一下append,现在分析一下我们执行的文件在,\文件\ceshi.py,但是我们要导入的模块text在\text.py下,还记得sys.path执行后打印的结果么,首先去找\文件\文件下有没有test目录,然后依次执行系统目录。

import os
import sys
#找到当前系统的绝对路径
apath = os.path.abspath(__file__)
#找到当前目录的上级目录
up_path1 = os.path.dirname(apath)
up_path2 = os.path.dirname(up_path1)
#添加到当前系统路径下
sys.path.append(up_path2)
import text
print(text.name)
print(sys.path)

运行后我们发现text可以在ceshi文件中使用了

你可能感兴趣的:(python_初始import)