发布时间:2019-08-30 09:29:51编辑:auto阅读(1902)
python 分为 单行注释,多行注释以及特殊注释
#!/usr/bin/env python # -*-coding:utf-8-*-
1、必须是文件的第一行
2、必须以#!开头
3、告诉LINUX/UNIX去找到python的翻译器。
1、基本上在文件的第二行,在#!/usr/bin/env python的下一行
2、python interpret如何解释字符串的编码
3、当你的文件中出现中文的时候,你必须使用它
""" 多行注释 """
''' 多行注释 '''
一般用于给类文档,函数文档作注释,可以是三个单引号也可以是双引号。
# 单行注释
打开cmd然后输入:python -m pydoc -p 1234
给大家解释一下命令含义:
python -m pydoc表示打开pydoc模块,这个模块就是用来查看python文档的工具
-p 1234表示在端口号1234上打开server,这个端口号可以自行设置
打开的网页documentation如下图,根据需要查看相关module/packages/等信息。1.设置断点,红色的点
2.调试断点,按 绿色甲壳虫标志,就会运行到断点处(第二图),可以在二图的下方看到变量的变化。按F8 步进。
python中的import:出处 刘畅
""" 目录结构如下: ├── __init__.py ├── main.py └── string.py """ # main.py 内容如下 import string print string.a # string.py 内容如下 a = 2
Python 提供了二种引入机制:
from .string import a from ..string import a from ...string import a这种引入方式使用一个点号来标识引入类库的精确位置。与linux的相对路径表示相似,一个点表示当前目录,每多一个点号则代表向上一层目录。
""" ├── __init__.py ├── foo.py └── main.py """ # foo.py a = 2 # main.py print __name__ from .foo import a print a
from pkg import foo from pkg.moduleA import foo
要注意的是,需要从包目录最顶层目录依次写下,而不能从中间开始。
Python 提供了 import 语句来实现类库的引用,下面我们详细介绍当执行了 import 语句的时候,内部究竟做了些什么事情。
当我们执行一行 from package import module as mymodule 命令时,Python解释器会查找package这个包的module模块,并将该模块作为mymodule引入到当前的工作空间。所以import语句主要是做了二件事:
在import的第一个阶段,主要是完成了查找要引入模块的功能,这个查找的过程如下:
对于第一步中sys.modules,我们可以打开Python来实际的查看一下其内容:
Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>> import sys
>> sys.modules
{'copy_reg': <module 'copy_reg' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.pyc'>, 'sre_compile': <module 'sre_compile' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_compile.pyc'>,...}
>> sys.modules['zlib'].__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/zlib.so'
可以看到sys.modules已经保存了一些包的信息,由这些信息,我们就可以直接知道要查找的包的位置等信息.在上文中,我们提到了sys.meta_path中保证了一些finder对象。在python中,不仅定义了finder的概念,还定义了loader和importor的概念。
在Python查找的时候,如果在sys.modules没有查找到,就会依次调用sys.meta_path中的finder对象。默认的情况下,sys.meta_path是一个空列表,并没有任何finder对象。
In [6]: sys.meta_path Out[6]: []我们可以向sys.meta_path中添加一些定义的finder,来实现对Python加载模块的修改。比如下例,我们实现了一个会将每次加载包的信息打印出来的finder。
from __future__ import print_function import sys class Watcher(object): @classmethod def find_module(cls, name, path, target=None): print("Importing", name, path, target) return None sys.meta_path.insert(0, Watcher) import socket当我们执行的时候,就可以看到系统加载socket包时所发生的事情。
liuchang@localhost ~/Codes/pycon/ex5_meta_path $ python finder1.py Importing socket None None Importing _socket None None Importing functools None None Importing _functools None None Importing _ssl None None Importing cStringIO None None
Python import的hook分为二类,一类是上一章节已经描述的meta hook,另一类是 path hook。
当处理sys.path(或者package.path)时,就会调用对应的一部分的 Pack hook。Path Hook是通过向sys.path_hooks 中添加一个importer生成器来注册的。
sys.path_hooks 是由可被调用的对象组成,它会顺序的检查以决定他们是否可以处理给定的sys.path的一项。每个对象会使用sys.path项的路径来作为参数被调用。如果它不能处理该路径,就必须抛出ImportError,如果可以,则会返回一个importer对象。之后,不会再尝试其它的sys.path_hooks对象,即使前一个importer出错了。
上一篇: python查看安装了哪些模块
下一篇: python websocket模拟客户
47873
46438
37325
34767
29339
26002
24953
19971
19571
18065
5813°
6438°
5954°
5980°
7086°
5931°
5973°
6463°
6430°
7809°