Python3 模块
来源:互联网 发布:白人帅哥 知乎 编辑:程序博客网 时间:2024/06/04 18:27
在我们引用变量或者调用函数的时候,这些对象要存在;我们可以将定义的变量或者函数放在文件中,这个文件就叫模块;模块式一个包含定义函数和变量的文件,后缀是;py
模块可以被别的程序引入,以使用该模块中的函数等功能;标准库也是这样使用的,例如
[root@centos7 ~]# vim 1.py #!/usr/bin/env pythonimport sysprint('命令行参数:')for i in sys.argv: print(i)print('\n Python 的路径为:',sys.path,'\n')结果
[root@centos7 ~]# ./1.py v1 v2命令行参数:./1.pyv1v2 Python 的路径为: ['/root', '/usr/local/python36/lib/python36.zip', '/usr/local/python36/lib/python3.6', '/usr/local/python36/lib/python3.6/lib-dynload', '/usr/local/python36/lib/python3.6/site-packages']import sys引入python标准库中的sys.py模块
sys.argv是一个包含命令行参数的列表
sys.path包含了一个Python解释器自动查找所需模块的路径的列表
import语句
想使用Python源文件,只需在另一个源文件里执行import语句
import module1 [,module2....]当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会进行搜索的所有目录的列表。例子
[root@centos7 ~]# vim fun1.py#!/usr/bin/env pythondef print_f(s): print(s) returndef print_f2(s): print('print_f2',s) return
另一个文件
[root@centos7 ~]# vim 1.py#!/usr/bin/env python#导入模块import fun1#调用fun1.print_f('hello china')结果
[root@centos7 ~]# ./1.py hello china一个模块只会被倒入一次
使用import时候,python解释器是怎么找到对应的文件?搜索路径,它是一系列目录名组成的,Python解释器以此从这些目录中找引入的模块
搜索路径是Python编译或者安装的时候确定的,安装新的库应该也会修改,搜索路径被存储在sys模块中的path变量,做一个测试,在交互shell中查看:
>>> import sys>>> sys.path['', '/usr/local/python36/lib/python36.zip', '/usr/local/python36/lib/python3.6', '/usr/local/python36/lib/python3.6/lib-dynload', '/usr/local/python36/lib/python3.6/site-packages']sys.path输出是一个列表,第一项是空串‘’,代表当前目录(如果是从一个脚本执行的时候,清楚的看到路径,比如上面实验是哦那个的/root),也就是我们执行python解释器的目录。这样,我们就可以在sys。path中或者当前目录中定义一些模块,比如上边的func1.py,但后执行import引入。
from...import语句
python的from语句让你从模块中倒入一个指定部分到当前命名空间中。
from modname import name1[, name2[, ... nameN]]
例如,
>>> from fun1 import print_f>>> print_f('hello')hello这样可以导入指定函数
from...import*语句
导入模块的所有内容
from modname import *
_name_属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想再模块被引入时,模块的某一程序快不执行,可以使用__name__
#!/usr/bin/env pythonif __name__=='__main__': print('程序自身在运行') se:▽ print('来自另一个模块')
[root@centos7 ~]# ./fun3.py 程序自身在运行
[root@centos7 ~]# pythonPython 3.6.0 (default, Apr 2 2017, 17:16:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import fun3来自另一个模块说明:每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入
dir()函数
那只的dir(0可以找到模块内定义的所有名称,以一个字符串列表的形式返回
>>> import sys>>> dir(sys)['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions']>>> import fun3来自另一个模块>>> dir(fun3)['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']>>>如果没有指定参数,dir() 函数会罗列出当前定义的所有名称
>>> dir()['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']>>> abc = 123>>> d=45 >>> dir<built-in function dir>>>> dir()['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'abc', 'd']>>>
标准模板
python本身带着一些标准的模板库,有些模板直接被构建在解析器里。有一个特别的模块 sys ,它内置在每一个 Python 解析器中,变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串:
>>> import sys>>> sys.ps1'>>> '>>> sys.ps2'... '>>> sys.ps1='>>>>> '>>>>> print('hello')hello
包
包是一种惯例Python模块命名空间的形式,采用---点模块名称
例如一个模块的名字是P.M,代表一个包P中的子模块M;其中一个有点是不同模块可以重名
mypack/ __init__.py #初始化mypack包 submodule1/ __init__.py func1.py func2.py submodule2/ #子包2 __init__.py func3.py func4.py导入一个包里特定模块
import mypack.submodule2.func3
这样使用的时候需要使用全名:mypack.submodule2.func3()
另一种倒入方法
from mypack.submodule2 import func3此种方法不需要使用全名访问:func3()
从一个包中倒入*
在linux平台frommypack.submodule2 import * 将倒入所有子模块,但是Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统
所以解决方法是在包的init定义中有个__all__变量,定义所有倒入的模块
比如__all__ = ["fun3","fun4"]
- Python3 模块
- Python3 模块
- Python3 模块
- python3重载模块
- python3 安装protobuf模块
- python3 导入模块
- Python3 RE模块
- Python3安装BeautifulSoup4模块
- python3 requests模块安装
- python3.5安装模块
- Python3之re模块
- Python3 基础:模块
- Python3 re模块
- python3 pymysql模块
- Python3 cookiejar模块详解
- python3的tempfile模块
- python3 中的queue模块
- Python3 urllib模块使用
- JSP自己写一个服务器
- 不完全图解HTTP
- CCF NOI1097 数列
- [小技巧]解决Eclipse自动补全问题
- ConstraintLayout布局的基本使用
- Python3 模块
- 多线程之指令重排序
- 博客
- 观大局者,无微不至
- 使用Selenium模拟浏览器抓取淘宝商品美食信息
- Spark性能调优1-测试记录
- 无人驾驶中的人工智能技术(Drive.Ai)
- java 动态代理aop 实现日志记录
- 碰撞的蚂蚁