#-----------------------模块------------------------------ #Python 模块(Module)是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 #模块让你能够有逻辑地组织你的 Python 代码段 #把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 #模块能定义函数,类和变量,模块里也能包含可执行的代码。 #自定义一个 python模块(sup) 需要在顶端引入 import sup 就可以调用sup这个模块里面的函数 类 变量了 #自定义sup模块下的代码 ''' def supname(str): print 'Hello:',str return ''' sup.supname('Looked') #输出:Hello: Looked #一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。 #from....import #form sup import sup里面的指定的部分到当前命名空间 #form sup import* 把一个模块的所有内容全都导入到当前的命名空间 #搜索路径 #当导入一个模块,Python 解析器对模块位置的搜索顺序是 #1.当前目录 #2.如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。 #3.如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/ #命名空间和作用域 #变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典 #python 文件的名字就相当于与变量名,里面的 内容相当于 值 #一个python 的表达式 可以访问全局变量跟局部变量,如果局部变量跟全局变量 重名 那么局部变量会覆盖 全局变量 #每一个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样 #Python 会智能的猜测变量是全局变量还是局部变量,它假设在函数内赋值的变量都是局部变量 #因此如果要在函数内部定义一个全局变量 必须使用global 语句 #global VarName会告诉Python 这样Python就不会在局部命名空间里面找这个变量了 能够提升效率 Money = 2000 #定义一个变量Money值是2000 def AddMoney(): #自定义一个函数 global Money #如果没有声明 Money是全局变量 这个代码就会报错 系统会默认在函数内部找Money Money +=1 print Money AddMoney() print Money #dir()函数 #dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。 #返回的列表容纳了在一个模块里定义的所有模块,变量和函数。 content=dir(sup) print(content) #特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名__package__命名空间 #globals(),locals()函数 #根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。 #如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。 #如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。 #两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。 #reload()函数 #当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。 #因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块 #语法如下: reload(sup) #sup要直接放模块的名字,而不是一个字符串形式