zoukankan      html  css  js  c++  java
  • Python基础-模块

    模块,用一堆代码实现了某个功能的代码集合。 

    类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

    如:os 是系统相关的模块;file是文件操作相关的模块

    模块分为三种:

    • 自定义模块
    • 第三方模块
    • 内置模块

    1、自定义模块

     情景一:

    情景二:

    情景三:

    2、导入模块

    Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:

    1 import module
    2 from module.xx.xx import xx
    3 from module.xx.xx import xx as rename 
    4 from module.xx.xx import *

    导入模块其实就是告诉Python解释器去解释那个py文件

    • 导入一个py文件,解释器解释该py文件
    • 导入一个包,解释器解释该包下的 __init__.py 文件 【py2.7】

    那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path

    1 import sys
    2 print sys.path

    执行结果:

    ['/Users/wupeiqi/PycharmProjects/calculator/p1/pp1', '/usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/xlutils-1.7.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlwt-1.0.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlrd-0.9.3-py2.7.egg', '/usr/local/lib/python2.7/site-packages/tornado-4.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/certifi-2015.4.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyOpenSSL-0.15.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/six-1.9.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/cryptography-0.9.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/cffi-1.1.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/ipaddress-1.0.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/enum34-1.0.4-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyasn1-0.1.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/idna-2.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pycparser-2.13-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Django-1.7.8-py2.7.egg', '/usr/local/lib/python2.7/site-packages/paramiko-1.10.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/greenlet-0.4.7-py2.7-macosx-10.10-x86_64.egg', '/Users/wupeiqi/PycharmProjects/calculator', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/Library/Python/2.7/site-packages']

    如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。

    1 import sys
    2 import os
    3 project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    4 sys.path.append(project_path)

    总结:内置模块是Python自带的功能,在使用内置模块相应的功能时,需要【先导入】再【使用】

    一、sys

    用于提供对Python解释器相关的操作:

    1 sys.argv           命令行参数List,第一个元素是程序本身路径
    2 sys.exit(n)        退出程序,正常退出时exit(0)
    3 sys.version        获取Python解释程序的版本信息
    4 sys.maxint         最大的Int值
    5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    6 sys.platform       返回操作系统平台名称
    7 sys.stdin          输入相关
    8 sys.stdout         输出相关
    9 sys.stderror       错误相关
     1 import sys
     2 import time
     3 
     4 
     5 def view_bar(num, total):
     6     rate = float(num) / float(total)
     7     rate_num = int(rate * 100)
     8     r = '
    %d%%' % (rate_num, )
     9     sys.stdout.write(r)
    10     sys.stdout.flush()
    11 
    12 
    13 if __name__ == '__main__':
    14     for i in range(0, 100):
    15         time.sleep(0.1)
    16         view_bar(i, 100)
    17 
    18 进度百分比

    sys模块示例1

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 #Author: huzhihua
    4 
    5 import sys
    6 
    7 print(sys.path)

    注意:

    python2 执行上面代码会报错。(原因:不能和导入的库名相同)

    python3 执行不会报错。

    执行结果:

    C:UsersAdministratorAppDataLocalProgramsPythonPython35-32python.exe D:/python/day2/sys.py
    ['D:\python\day2', 'D:\python', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python35.zip', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\DLLs', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\site-packages']

    python标准库路径

    C:UsersAdministratorAppDataLocalProgramsPythonPython35-32Lib

     python第三方库路径

    C:UsersAdministratorAppDataLocalProgramsPythonPython35-32Libsite-packages

    sys模块示例2

    说明:打印相对路径

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 #Author: nulige
    4 import sys
    5 #print(sys.path) #打印环境变量
    6 print(sys.argv)

    执行结果:

    1 ['D:/python/day2/sys.py']

    说明:演示取出2

    1
    #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 5 import sys 6 #print(sys.path) #打印环境变量 7 print(sys.argv) 8 print(sys.argv[2])

    二、os

    用于提供系统级别的操作:

     1 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
     2 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
     3 os.curdir                   返回当前目录: ('.')
     4 os.pardir                   获取当前目录的父目录字符串名:('..')
     5 os.makedirs('dir1/dir2')    可生成多层递归目录
     6 os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
     7 os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
     8 os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
     9 os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    10 os.remove()                 删除一个文件
    11 os.rename("oldname","new")  重命名文件/目录
    12 os.stat('path/filename')    获取文件/目录信息
    13 os.sep                      操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    14 os.linesep                  当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    15 os.pathsep                  用于分割文件路径的字符串
    16 os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
    17 os.system("bash command")   运行shell命令,直接显示
    18 os.environ                  获取系统环境变量
    19 os.path.abspath(path)       返回path规范化的绝对路径
    20 os.path.split(path)         将path分割成目录和文件名二元组返回
    21 os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素
    22 os.path.basename(path)      返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    23 os.path.exists(path)        如果path存在,返回True;如果path不存在,返回False
    24 os.path.isabs(path)         如果path是绝对路径,返回True
    25 os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False
    26 os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False
    27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    28 os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间
    29 os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间

    示例1

    备注:os.mkdir("new_dir"),表示:创建一个目录

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author: nulige
     4 
     5 import os
     6 
     7 #cmd_res = os.system("dir")  #执行命令,不保存结果
     8 cmd_res = os.popen("dir").read()   #保存在内存的一个地方,通过read方法读取出来
     9 print("-->",cmd_res)
    10 os.mkdir("new_dir")

    执行结果:

     1 -->  Volume in drive D is SSD
     2  Volume Serial Number is 687D-EF64
     3 
     4  Directory of D:pythonday2
     5 
     6 2016/11/02  18:58    <DIR>          .
     7 2016/11/02  18:58    <DIR>          ..
     8 2016/10/30  20:15               596 dictionary.py
     9 2016/10/26  16:23               227 login.py
    10 2016/10/26  18:31               829 names.py
    11 2016/10/29  10:22               496 names08.py
    12 2016/10/26  12:11               406 password.py
    13 2016/10/30  15:44             1,457 shopping.py
    14 2016/11/02  18:46               178 sys.py
    15 2016/11/02  18:58               392 sys_mod.py
    16 2016/10/29  10:50               152 test09.py
    17 2016/10/26  14:08    <DIR>          __pycache__
    18                9 File(s)          4,733 bytes
    19                3 Dir(s)  764,362,289,152 bytes free

    示例2

    功能说明:判断输入用户名和密码是否正确

    password.py 

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author: nulige
     4 #import getpass
     5 
     6 _username = 'nulige'
     7 _password = '123456'
     8 username = input("username:")
     9 #password = getpass.getpass("password:")
    10 password = input("password:")
    11 if _username == username and _password == password:
    12     print("Welcome user {name} login...".format(name=username))
    13 else:
    14     print("Invalid username or password!")

     执行结果:

    1 username:nulige
    2 password:123456
    3 Welcome user huzhihua login...
    1 username:nulige
    2 password:33333
    3 Invalid username or password!

    说明:介绍怎么调用模块

    写一个名称为:login.py 的模块,然后用sys_mod.py去调用这个login.py的模块

     login.py

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 #Author: nulige
     4 
     5 _username = 'nulige'
     6 _password = '123456'
     7 username = input("username:")
     8 #password = getpass.getpass("password:")
     9 password = input("password:")
    10 if _username == username and _password == password:
    11     print("Welcome user {name} login...".format(name=username))
    12 else:
    13     print("Invalid username or password!")

    sys_mod.py

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 #Author: nulige
    4 
    5 import login

    执行结果:

    输入错误的用户名和密码

    1 username:nulige
    2 password:333322
    3 Invalid username or password!

    输入正确的用户名和密码

    1 username:nulige
    2 password:123456
    3 Welcome user nulige login...
  • 相关阅读:
    java web项目防止多用户重复登录解决方案
    java提高篇(二一)-----ArrayList
    转:为什么需要htons(), ntohl(), ntohs(),htons() 函数
    转:对于linux下system()函数的深度理解(整理)
    转:sprintf与snprintf
    转: fscanf()函数详解
    转:fopen()函数
    转:struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
    转:BZERO()等的区别
    转:Linux内存管理之mmap详解
  • 原文地址:https://www.cnblogs.com/nulige/p/6023985.html
Copyright © 2011-2022 走看看