import的简记

一、模块

模块:一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。

顺便一提:

  dir()函数:内置的函数dir(demo)可以找到模块demo内定义的所有名称,以一个字符串列表的形式返回。如果没有给定参数,那么dir()函数会罗列出当前模块定义的所有名称(属性列表)。

二、import语句

1)使用:

  a、import module1[, module2[,... moduleN]:直接导入需要导入的模块

  b、from modname import name1[,name2[,...nameN]]: 这种声明不会把整个fibo模块导入到当前的命名空间中,只会将modname中的name部分引进来。

  c、from modname import *:把一个模块的所有内容全都导入到当前的命名空间。但是不建议用,因为引入其他来源的命名,很可能覆盖了已有的定义。

三、__name__属性

__name__:一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
举个例子:
  #demo.py
  def main():
    print "we are in %s"%__name__
  if __name__ == '__main__':
    main()
这个函数定义了main函数,并且执行最终打印"we are in __main__",说明if语句执行了,调用了main()函数。

这会我们换导入形式来看看:
  #importdemo.py
  from demo import main
  main()
此时输出的是:we are in demo;也就是说:模块__name__ = '__main__' 下面的函数没有执行。

上例说明:每个模块都有一个__name__属性,当其值是"__main__"时,表明该模型自身在运行,否则是被引入。也就是说:如果我们是直接执行某个.py文件的时候,该文件中那么”__name__=='__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

四、包

包:包是一种管理Python模块命名空间的形式,采用"点模块名称"。如:一个模块的名称是A.B,那么他表示一个包A中的子模块B。在导入一个包的时候,Python会根据sys.path中的目录来寻找这个包中包含的子目录。

重点:

  1)目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径。
  2)注意当使用from package import item 这种形式的时候,对应的item既可以是包里面的子模块(子包),或者包里面定义的其他名称, 比如函数,类或者变量。
  3)import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。
  4)反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包, 但是不可以是类,函数或者变量的名字。
  5)从一个包中导入*:通常不主张用*导入,因为这种方法经常会导致代码的可读性降低。
  导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就 把这个列表中的所有名字作为包内容导入。如:__all__ = ["echo", "surround", "reverse"], 那么当你所使用import *时,只会导入包里 的这三个模块。如果 __all__ 真的没有定义,那么将不会导入任何子模块。

五、python的搜索路径

Python的搜索路径是由一系列目录名组成的(存储在sys模块汇总的path变量:sys.path包含了一个python解析器自动查找所需模块的路径的列表)。Python解释器就依次从这些目录中去寻找所引入的模块。
来看一下输出的sys.path是什么:
  >>> import sys
  >>> sys.path
  ['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
  输出:输出是一个列表,其中第一项是空串'',代表当前目录(如果不空即指代所在目录),亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。

备注:

  模块sys内置在每一个Python解析器中。变量sys.ps1和sys.ps2定义了主提示符和副提示符所对应的字符串:
  >>> import sys
  >>> sys.ps1 #输出'>>>',定义了主提示符
  >>> sys.ps2 #输出'... ',定义了副提示符
  >>> sys.ps1 = 'C> '#主提示符更改了

 

猜你喜欢

转载自www.cnblogs.com/yangrongkuan/p/12076817.html