#!/usr/bin/envpython#-*-coding:utf-8-*-例1:#!/usr/bin/envpython1、必须是文件的第一行
2、必须以#!开头
3、告诉LINUX/UNIX去找到python的翻译器。
1、基本上在文件的第二行,在#!/usr/bin/envpython的下一行
2、pythoninterpret如何解释字符串的编码
3、当你的文件中出现中文的时候,你必须使用它
给大家解释一下命令含义:
python-mpydoc表示打开pydoc模块,这个模块就是用来查看python文档的工具
-p1234表示在端口号1234上打开server,这个端口号可以自行设置
1.设置断点,红色的点
2.调试断点,按绿色甲壳虫标志,就会运行到断点处(第二图),可以在二图的下方看到变量的变化。按F8步进。
"""目录结构如下:├──__init__.py├──main.py└──string.py"""#main.py内容如下importstringprintstring.a#string.py内容如下a=2Python的两种引入机制Python提供了二种引入机制:
relativeimport也叫作相对引入,在Python2.5及之前是默认的引入方法。它的使用方法如下:
from.stringimportafrom..stringimportafrom...stringimporta这种引入方式使用一个点号来标识引入类库的精确位置。与linux的相对路径表示相似,一个点表示当前目录,每多一个点号则代表向上一层目录。
absoluteimport
针对如下语句:
"""├──__init__.py├──foo.py└──main.py"""#foo.pya=2#main.pyprint__name__from.fooimportaprintaabsoluteimport也叫作完全引入,非常类似于Java的引入进制,在Python2.5被完全实现,但是是需要通过from__future__importabsolute_import来打开该引入进制。在Python2.6之后以及Python3,完全引用成为Python的默认的引入机制。它的使用方法如下:
frompkgimportfoofrompkg.moduleAimportfoo要注意的是,需要从包目录最顶层目录依次写下,而不能从中间开始。
Python提供了import语句来实现类库的引用,下面我们详细介绍当执行了import语句的时候,内部究竟做了些什么事情。
当我们执行一行frompackageimportmoduleasmymodule命令时,Python解释器会查找package这个包的module模块,并将该模块作为mymodule引入到当前的工作空间。所以import语句主要是做了二件事:
下面我们详细了解python是如何查找模块的。
在import的第一个阶段,主要是完成了查找要引入模块的功能,这个查找的过程如下:
对于第一步中sys.modules,我们可以打开Python来实际的查看一下其内容:
在上文中,我们提到了sys.meta_path中保证了一些finder对象。在python中,不仅定义了finder的概念,还定义了loader和importor的概念。
在Python查找的时候,如果在sys.modules没有查找到,就会依次调用sys.meta_path中的finder对象。默认的情况下,sys.meta_path是一个空列表,并没有任何finder对象。
In[6]:sys.meta_pathOut[6]:[]我们可以向sys.meta_path中添加一些定义的finder,来实现对Python加载模块的修改。比如下例,我们实现了一个会将每次加载包的信息打印出来的finder。
from__future__importprint_functionimportsysclassWatcher(object):@classmethoddeffind_module(cls,name,path,target=None):print("Importing",name,path,target)returnNonesys.meta_path.insert(0,Watcher)importsocket当我们执行的时候,就可以看到系统加载socket包时所发生的事情。
liuchang@localhost~/Codes/pycon/ex5_meta_path$pythonfinder1.pyImportingsocketNoneNoneImporting_socketNoneNoneImportingfunctoolsNoneNoneImporting_functoolsNoneNoneImporting_sslNoneNoneImportingcStringIONoneNonesys.pathhookPythonimport的hook分为二类,一类是上一章节已经描述的metahook,另一类是pathhook。
当处理sys.path(或者package.path)时,就会调用对应的一部分的Packhook。PathHook是通过向sys.path_hooks中添加一个importer生成器来注册的。
sys.path_hooks是由可被调用的对象组成,它会顺序的检查以决定他们是否可以处理给定的sys.path的一项。每个对象会使用sys.path项的路径来作为参数被调用。如果它不能处理该路径,就必须抛出ImportError,如果可以,则会返回一个importer对象。之后,不会再尝试其它的sys.path_hooks对象,即使前一个importer出错了。