当前位置: 首页 > news >正文

系网站建设总结报告常见网站建设公司术语

系网站建设总结报告,常见网站建设公司术语,房价查询网,佛山新网站制作咨询使用python时#xff0c;常常会涉及到库的调用#xff0c;这就需要掌握模块的基本知识。 本文分为如下几个部分概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝对引用与相对引用 import运行本质 if __name__ __main__ 概念说明 这里…使用python时常常会涉及到库的调用这就需要掌握模块的基本知识。 本文分为如下几个部分概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝对引用与相对引用 import运行本质 if __name__ __main__ 概念说明 这里厘清python中模块、库、包之间的概念差异模块(module)其实就是py文件里面定义了一些函数、类、变量等 包(package)是多个模块的聚合体形成的文件夹里面可以是多个py文件也可以嵌套文件夹 库是参考其他编程语言的说法是指完成一定功能的代码集合在python中的形式就是模块和包 模块的简单调用 比如我们有一个trymodule的文件夹里面有一个first.py文件文件中的内容如下 a 1 def myfun(s): print(s 1) 在trymodule的文件夹下打开命令行窗口按住shift单击鼠标右键选择“在此处打开命令窗口”输入python进入命令行交互模式import firsta Traceback (most recent call last): File , line 1, in NameError: name a is not definedfirst.a 1first.myfun(2) 3 所以说first.py文件就是一个模块可以用import导入里面变量都要用first.前缀来引用如果想不使用这个前缀可以这样from first import aa 1 其他用法如下 # 重命名from first import myfun as addoneaddone(4) 5 # 导入模块中全部变量from first import *myfun(2) 3 # 一次导入多个变量from first import a, myfuna 1 包的导入 在trymodule文件夹中新建folder1文件夹我们想让folder1文件夹成为一个包。文件夹里新建abcd.py文件文件中内容如下 b 2 class Myclass: def __init__(self, name, age): self.name name self.age age def get_info(self): print(my name is{name}and age is{age}.format(name self.name, age self.age)) 此时在folder1文件夹中新建一个__init__.py文件否则程序会将这个文件夹当成普通文件夹来处理而不是一个包。这个__init__.py文件中可以什么都不填。 注python3.3已经可以省略掉空白的__init__.py 文件。 此时文件结构如下 trymodule │ first.py ├───folder1 │ │ abcd.py │ │ __init__.py 我们还是在trymodule文件夹下打开命令行进入python交互模式 我们来看一下下面几种导入方式import folder1folder1.abcd.b Traceback (most recent call last): File , line 1, in AttributeError: module folder1 has no attribute abcdfrom folder1 import abcdbob abcd.Myclass(name Bob, age 20)bob.name Bobbob.get_info() my name is Bob and age is 20from folder1.abcd import bb 2import folder1.abcdabcd.b Traceback (most recent call last): File , line 1, in NameError: name abcd is not definedfolder1.abcd.b 2import folder1.abcd as aaaa.b 2 注意只是导入包不能随便使用其中的模块要导入到具体模块或者变量的层次 文件夹与文件之间可以用.也可以用from import格式而文件与里面的变量之间只能用from import格式即不能import folder1.abcd.b 特殊的__init__.py文件 __init__.py文件其实是一个特殊的文件它相当于名为folder1模块即如果使用import folder1则可以调用在__init__.py文件文件中定义的变量。 将__init__.py文件编写如下 from folder1.abcd import b c 3 在trymodule文件夹下打开命令行进入python交互模式import folder1folder1.c 3folder1.b 2from folder1 import bb 2 对比之前的from folder1.abcd import b使用__init__.py文件可以将常用的一些变量、函数、甚至模块导入以方便调用。 导入模块的搜索路径 用import hello时python会搜寻hello.py文件搜索顺序如下首先搜寻内置模块是否有hello所以我们定义的模块名不要和内置模块相同 如果内置模块没有则看下面这些目录里有没有import syssys.path [, C:\\Program Files\\Anaconda3\\python35.zip, C:\\Program Files\\Anaconda3\\DLLs, C:\\Program Files\\Anaconda3\\lib, C:\\Program Files\\Anaconda3, C:\\Program Files\\Anaconda3\\lib\\site-packages, C:\\Program Files\\Anaconda3\\lib\\site-packages\\Sphinx-1.4.6-py3.5.egg, C:\\Program Files\\Anaconda3\\lib\\site-packages\\snownlp-0.12.3-py3.5.egg, C:\\Program Files\\Anaconda3\\lib\\site-packages\\win32, C:\\Program Files\\Anaconda3\\lib\\site-packages\\win32\\lib, C:\\Program Files\\Anaconda3\\lib\\site-packages\\Pythonwin, C:\\Program Files\\Anaconda3\\lib\\site-packages\\setuptools-27.2.0-py3.5.egg] 其中第一个表示当前的工作路径我们可以看出安装的第三方包所在路径(C:\\Program Files\\Anaconda3\\lib\\site-packages)也在这个列表之中所以无论工作路径在哪里都能搜寻到这些包。 如果想添加搜索路径可以参考这篇文章 __all__ 首先要明确import *的方式无法导入以下划线开头的变量名 __init__.py文件内容更改如下 from folder1.abcd import b c 3 _e 4 python交互模式下from folder1 import *c 3_e Traceback (most recent call last): File , line 1, in NameError: name _e is not defined 而如果指定导入是可以的from folder1 import cc 3from folder1 import _e_e 4 如果定义了__all__则import *就可以导入下划线开头的变量 __init__.py文件内容更改如下 from folder1.abcd import b __all__ [c, _e] c b 1 _e 4 python交互模式下from folder1 import *b Traceback (most recent call last): File , line 1, in NameError: name b is not definedc 3_e 4 可见import *只会导入__all__中指定的变量无论是否以下划线开头。这样限制可以防止import *命令导入太多变量污染命名空间过滤掉一些中间变量如b 绝对引用与相对引用 python中的import分为绝对引用和相对引用两种。它们之间的差异在于引用模块时 定位被引用模块位置 的方式不同绝对引用是通过.的连接指定出最高级文件夹到目标文件的绝对路径。我们上面的所有用法都属于绝对引用。 而相对引用是 指定待引用模块与当前文件的相对位置.表示上一级文件 绝对引用类似这样from folder.abcd import myclass 相对引用类似这样from .abcd import myclass 在实际使用中无论是绝对导入还是相对导入都要注意如何导入与被调用位置有关。 以下面的文件结构为例 folder1 │ first1.py │ first2.py └─folder2 | second1.py | second2.py └─folder3 | third1.py | third2.py 下面分为两种情况 1.folder1是一个项目运行这个项目需要在folder1文件夹中打开cmd运行python first1.py # first1.py from first2 import sth # OK from folder1.first2 import sth # ERROR from .first2 import sth # ERROR from folder2.second1 import sth # OK # second1.py from folder2.second2 import sth # OK from .second2 import sth # OK from second2 import sth # ERROR (注意first1引用first2 与 second1引用second2 的区别) 2.folder1是一个包一般使用时是在外面的文件夹中import这个包 # first1.py from folder1.first2 import sth # OK from .first2 import sth # OK from first2 import sth # ERROR from . import first2 # OK import .first2 # ERROR from folder1.folder2 import second1 # OK from .folder2 import second1 # OK # second1.py from folder1.folder2 import second2 # OK from . import second2 # OK from .. import first1 # OK from ..folder3 import third1 # OK 规律绝对引用就是从包的位置一直往下写到目标文件位置 相对引用用.代替当前文件所在目录用..代替再上一级目录用点来回溯之后往下写到目标文件位置。 .只能放在from后不能放import后。 相对引用的好处在于代码中不需要出现folder1这个名称因此当包的名称改变时里面代码不需要做任何改变或者有的用户要装两个版本的包把其中一个版本的包重命名了此时使用相对引用也不会出问题。 另外以second1.py为例如果其中有一些相对引用的代码在folder1的上一层文件夹调用 python folder1/folder2/second1.py 这时相当于在folder2文件夹中调用second1.py文件会报错。但如果像下面这样就可以正常运行 python -m folder1.folder2.second1 import运行本质 使用import语句要明确两件事 1执行导入模块命令时会首先检查待导入的模块是否在当前已有模块之中如果有则跳过import。因此模块之间相互引用不会导致无限循环。 查看当前已导入模块使用下面方法 import sys sys.modules 得到结果是一个字典键是模块名值是文件所在路径 2import语句与文件执行 在这样的文件结构下 trymodule │ first.py ├───folder1 │ │ abcd.py │ │ __init__.py folder1是一个packageabcd是一个moduleimport folder1 只是导入package相当于执行__init__.py文件 from folder import abcd则执行了__init__.py文件文件与abcd.py文件 from folder1.abcd import b其实也执行了__init__.py文件文件与abcd.py文件 要知道执行了什么可以在这些文件之中添加print语句看是否打印出结果 知道这个执行原理可以更好理解前面得到的一些结论首先是在__init__.py文件中什么都没有的情况下import folder1无法调用abcd模块中的变量是因为相当与运行了一个空文件没有将整个包导入工作空间 abcd模块中定义了print语句后import两次只有第一次会print出值说明第二次检查出模块已在导入之列忽略了这条import命令 一个例子import numpy as np之后可以这样调用np.random.normal() 但import skimage不可以调用skimage.io.imread()要import skimage.io才可以 这是因为numpy文件夹中的_init_.py文件中有一句from . import random而skimage没有 更多运行细节可以参考这篇文章 if __name__ __main__ 我们经常会在别人的代码中发现if __name__ __main__为了理解它的作用我们来看下面的例子 在folder1文件夹下新建new.py文件里面内容为 print(__name__) 在folder1文件夹下打开命令行输入 python new.py 返回结果是__main__ 在trymodule文件夹下打开命令行进入python交互模式from folder1 import new folder1.newprint(__name__) __main__print(new.__name__) folder1.new 上面测试结果说明直接运行文件和import文件是有差异的差异在于二者的__name__变量不同。__name__变量是一个特殊的变量每个py文件运行时都会对应一个__name__变量即使在交互模式下也可以查看这个变量值。 所以if __name__ __main__的作用就很好理解了即import时不执行下面的代码只有在直接执行这个文件时才运行之后的代码。这算是一种约定俗成的写法如果不怕文件被import可以不用这个。 专栏信息 专栏目录目录
http://www.zqtcl.cn/news/150637/

相关文章:

  • 湖南网站建设公公司没有自己的网站
  • 刚建设的网站如何推广网站恢复正常
  • 怎么做制作网站的教程永久免费空间免备案
  • 网站维护运营怎么做简单的手机网址大全
  • 网站建设规划设计公司排名使用模块化的网站
  • 南宁网站seo大概多少钱门户网站建设公司渠道
  • 如何建国际商城网站海门做网站公司
  • 做网站应该画什么图注册子公司流程及所需资料
  • 嵊州市建设银行网站怎么自己做游戏软件
  • 用模板快速建站中园建设银行网站
  • 网站建设罒金手指下拉壹陆韩国最新新闻消息
  • 东莞企业网站推广技巧wordpress怎么汉化
  • 17网站一起做网店如何下单iis服务器网站301重定向怎么做
  • 网站如何做线上支付功能seo网站推广优化费用
  • 贵州灵溪seo整站优化wordpress进行不
  • 三网一体网站建设网站开发环境分析
  • 广州白云机场网站建设查询域名备案信息
  • 苗族网站建设中牟做网站
  • 潍坊网站建设建站哪个网站的课件做的好处
  • 网站建设平台杭州网上交易平台
  • 您提交的网站域名无备案我想学网站建设
  • 怎样做国际网站dw网页设计代码免费
  • wordpress做企业站基础微网站开发公司
  • 用上海注册的公司建的网站怎么做asp网站
  • 一个专做特卖的网站千鸟云网站建设
  • 哈尔滨网站优化seo知名公司
  • 企业网站的开发流程个人免费建网站
  • 旅游网站平台建设方案策划书wordpress 自建cdn
  • 网站开发回访话术内容电商网站有哪些
  • 网络广告投放网站网站如何做关