zoukankan      html  css  js  c++  java
  • 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> '#主提示符更改了

     

  • 相关阅读:
    AssemblyInfo.cs文件:包含程序版本、信息、版权的属性文件(转转转)
    简单日志
    Log4net 日志使用指南
    enter 键 触发搜索按钮
    给<a>标签增加href属性 ~~~ 转转
    最经典介绍ASP.NET抽象工厂模式概念及用法 ~~~转转转转
    sql server 中 like 中文不匹配问题解决就这么简单
    MySQL数据库like查询中文出现不准确的解决方法
    Unity属性(Attributes)
    拓展自定义编辑器窗口(EditorGUILayout类)
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12076817.html
Copyright © 2011-2022 走看看