python之模块
2021-07-11 19:07
标签:bsp 模块名 unbound doc frame 存在 name addm home 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。 模块让你能够有逻辑地组织你的python代码段;把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 模块能定义函数,类和变量,模块里也能包含可执行的代码。 from ... import * :这样会把模块中的所有内容导入到当前命名空间,一般不建议使用,消耗内存空间,也容易出现未预知的问题。 1.搜索路径 当导入一个模块后,python解析器对模块位置的搜索顺序是: 当前目录----shell变量PYTHONPATH下的每个目录----------python模块路径目录 模块的搜索路径存储在system模块的sys.path变量中,包括当前目录,pythonpath和安装过程决定的默认目录。 ‘/home/python/python3/lib/python3.7/site-packages‘] 2.命名空间和作用域 变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。 一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。 每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。 Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。 因此,如果要给函数内的全局变量赋值,必须使用 global 语句。 global VarName 的表达式会告诉 Python, VarName 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。 例如,我们在全局命名空间里定义一个变量 Money。我们再在函数内给变量 Money 赋值,然后 Python 会假定 Money 是一个局部变量。然而,我们并没有在访问前声明一个局部变量 Money,结果就是会出现一个 UnboundLocalError 的错误。取消 global 语句的注释就能解决这个问题。 3.dir() 函数 内置的dir()函数列出一个定义对象的标识符。例如,对于一个模块,包括在模块中定义的函数,类和变量。 当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表。当没有为其提供参数时, 它返回当前模块中定义的名字的列表。 4.dir() 函数举例: 5.globals()和locals()函数 根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。 如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。 如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。 两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。 6.reload() 函数 当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。 因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。 7.python中的包 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。 简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。 python之模块 标签:bsp 模块名 unbound doc frame 存在 name addm home 原文地址:https://www.cnblogs.com/hello-wei/p/9550085.html[python@master model]$ more model_1.py
def p_fun():
print(‘hello world‘)
return
[python@master model]$ more main.py
from model_1 import p_fun
if __name__ == "__main__": #判断是否为主程序执行口
p_fun()
运行:
[python@master model]$ python3 main.py
hello world
>>> import sys
>>> print(sys.path)
[‘‘, ‘/home/python/python3/lib/python37.zip‘, ‘/home/python/python3/lib/python3.7‘, ‘/home/python/python3/lib/python3.7/lib-dynload‘,
Money = 2000 #定义全局变量
def addmoney():
global Money #定义全局变量
Money = Money +1 #函数内不能直接调用全局变量,必须用global来声明全局变量
print(Money)
addmoney()
print(Money)
结果:
[python@master model]$ python3 glo.py
2000
2001
>>> import sys # 获得属性列表,在这里是sys模块的属性列表
>>> import sys
>>> dir(sys)
[‘__breakpointhook__‘, ‘__displayhook__‘, ‘__doc__‘, ‘__excepthook__‘, ‘__interactivehook__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘,
‘__spec__‘, ‘__stderr__‘, ‘__stdin__‘, ‘__stdout__‘, ‘_clear_type_cache‘, ‘_current_frames‘, ‘_debugmallocstats‘, ‘_framework‘, ‘_getframe‘>>> dir() #获得当前模块的属性列表
[‘__annotations__‘, ‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘sys‘]
>>> a=2
>>> dir()
[‘__annotations__‘, ‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘a‘, ‘sys‘]
>>> del a # 删除/移除一个名字
>>> dir()
[‘__annotations__‘, ‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘sys‘][python@master model]$ more aa.py
def munit(x,y):
print(‘sum:‘,x+y)
return x+y
[python@master model]$ more bb.py
def mule(x,y):
return x**y
[python@master model]$ more init.py
import sys
sys.path.append("/home/python/model")
from aa import munit
from bb import mule
print(sys.path)
h = munit(3,4)
s = mule(3,4)
print(s)
结果:
[python@master model]$ python3 init.py
[‘/home/python/model‘, ‘/home/python/python3/lib/python37.zip‘, ‘/home/python/python3/lib/python3.7‘, ‘/home/python/python3/lib/python3.7/lib-dynload
‘/home/python/python3/lib/python3.7/site-packages‘, ‘/home/python/model‘]
sum: 7
81