一.五种函数调用方法(不够准确,全面,但初学者可以先这样理解)
1.是自建于函数位于builtins模块中的函数,可直接调用.具体那些函数?可以通过dir(_builtins_)查看,共计152个('len(dir(_builtins_))').
2.是通过'import'模块调用.如:inport Bood,调用Boob模块中的函数(如toch时),使用的方式是Boob.toch(),Boob.toch.这种方式的缺点是需要频繁的写被调用的模块.
3.是通过'from 模块 imprt x1 x2 x3 ...'.如:from sys import argv 或者__name__.意思是直接将模块sys中的argv或者__name__函数导入到挡墙模块(文件)中,接下来可以直接使用argv,而不需要这样sys.argv使用.实际上是在当前模块中创建了新变量argv或者__name__,只是在赋值前两个变量引用同一个值,一个隐含的赋值过程.若引用了属性可变动的变量,如属性是列表,需特别小心.缺点是变量及值容易弄混:如调用很多的话.需要在后面加很多X1,X2....
4.是通过'form 模块 import *' 调用.如:form sys import *.这种方式可以调用被导入模块的所有变量(若不想被创建同名变量,如在sys里,可以用下划线作为开头命名变量,象__doc__就不会被调用;还可以在模块中,如在sys里,定义一个__all__变量,用字符串列出允许被from sys import *调用的名称,__all__=[x1,x2,..])此方法虽然不被官方推荐,因为“判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难”。但这种方法对初学者或是编制代码少的文件来说,是最直接最粗暴也是最方便的方法。
5.是通过"import 模块 as"。如:import sys as A。给模块sys起个别名叫A,帮助记忆。在当前所在模块的module实例上sys名称失效,只认A。此方法缺点是易发生命名空间冲突。
二.import语句的作用
import就是用来导入模块的,它可以出现在程序中的任何位置。但需要注意的是最好把导入模块放在代码的开头,因为这和作用域有关系。这样解释器在执行语句时,遵循作用域原则。即:如果在顶层导入了模块,它的作用域是全局的;如果在函数内部导入了模块,它的作用域只是局部的,不能被其它函数使用;如果其它函数也需要调用这个模块,还需要再次导入比较麻烦。
import语句导入模块时,最好按照这样的顺序:1、python标准库模块;2、python第三方模块;3、自定义模块
当import某个模块而使得指定的.py(如sys.py)文件被加载时,python解释器会为它创建一个module实例,并创建一个模块名称来引用它,如dir(sys),实际上是查询SYS名称引用的module实例上有哪些属性名称可以存取。想要知道当前已加载的module实例的名称与实例有哪些,可通过sys.modules,这是个字典对象,键的部分是模块名称,值的部分是module实例。若调用dir()未指定任何module实例,则会查询当前所在模块的module实例上拥有的名称。