学习笔记:Python 模块

仅为个人查阅使用,如有错误还请指正。

在Python中,一个.py文件就称之为一个模块(Module)。

使用模块的好处是大大提高了代码的可维护性,一个模块可以被其他地方引用。

通常编写程序的时候,经常引用其他模块,包括Python内置的模块和来自第三方的模块

使用模块可以避免函数名和变量名冲突,在自定义模块的时候,不要与内置函数名字冲突。

一个项目可能由多人完成,就会存在模块名相同,Python又引入了按目录来组织模块的方法(

推荐使用包:每个包必须要有**__init__.py**文件,可以是空文件,也可以有Python代码。

# 包结构如下
School
  |__ __init__.py
  |__ law.py
  |__ computer.py
  |__ foreign.py
  • 自定义模块

    其实就是在一个py文件里面写函数,或者类。

    """This is a module for absolute value"""  # 任何模块代码的第一个字符串被视为模块的文档注释
    
    __author__ = "lowkeyao"                      # 署名
                                             # 可以把上面的删除掉,看具体项目安排。
    def my_abs(x):                               # 这是对x的值就不做异常处理,只是简单的了解。
        if x >= 0:
            return x
        else:
            return -x
  • 导入模块

    以math这个内置模块为例

    • 第一种:可以访问math模块中所有公开的函数,变量,类。

      import math
      
      print(math.pow(2, 0.5))
      print(math.pi)
      print(math.sqrt(100))
    • 第二种:只能使用导入的pow()函数,pi变量。除此之外都不能用

      from math import pow, pi
      
      print(pow(2, 0.5))
      print(pi)

    针对第二种的导入方式:可能存在同名的方法,造成冲突。可以使用别名(as)去解决这个问题。

    from math import log
    from logging import log as logger
    
    print(log(10))
    logger(10, "from logging module")

    也可以使用import去避免这个冲突

    import math, logging
    
    print(math.log(10))
    logging.log(10, "something")

    注意:以上用logging模块里面的log只是用来举例子,实际开发不是这样使用的。

  • 动态模块

    两个不同的模块提供的函数功能是一模一样的。

    随着版本更新,模块名可能改变,但是功能没变。而当前这个程序需要满足新旧环境都能执行。

    举个例子,看看就好。

    try:
        from io import StringIO
    except ImportError:
        from StringIO import StringIO
  • __future__模块

    看名字就知道是未来的意思,对于Python2,Python3就是未来。也就意味着只给旧版本使用。

    我们知道,Python2和Python3其中一个区别就是print 的输出格式。

    • 例1:在Python2环境调用,使用Python3 print的语法格式。

      from __future__ import print_function
      
      print("use python3 print function")
    • 例2:在Python2环境调用,使用Python3 division的语法格式。

      Python2默认整除后向下取整,Python3是直接得到小数位。

      from __future__ import division
      
      print 5/2
  • 常用内建模块(标准库)

    这里有些人可能会想到标准库。按照官网的说法,模块跟标准库是有点区别的。

    我们平时在使用的时候,就认为他们是同一类就好了,别太深究。因为我说不清楚(笑脸)

    有兴趣的可以去买一本Python标准库的书(一千多页),或者通过官网查找。

    • os模块

      os.remove()             # 删除一个文件
      os.getcwd()             # 获取当前工作目录,即当前python脚本工作的目录路径
      os.path.exists(path)    # 如果path存在,返回True;如果path不存在,返回False
      os.path.isfile(path)    # 如果path是一个存在的文件,返回True。否则返回False
      os.path.isdir(path)     # 如果path是一个存在的目录,则返回True。否则返回False
    • datetime模块

      datetime.datetime.now()                                     # 当前时间
      datetime.datetime.now() + datetime.timedelta(3)             # 当前时间+3
      datetime.datetime.now() + datetime.timedelta(-3)            # 当前时间-3
      datetime.datetime.now() + datetime.timedelta(hours=3)       # 当前时间+3小
      datetime.datetime.now() + datetime.timedelta(minutes=30)    # 当前时间+30
      datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')       # 转字符串格式
      datetime.datetime.strptime('2019-10-01', "%Y-%m-%d")        # 转时间格式
    • json模块

      import json
      
      # 这是直接操作内存对象
      dic = {'a1':'b1','a2':'b2','a3':'b3'}
      str_dic = json.dumps(dic)     # 序列化:将一个字典转换成一个字符串
      print(type(str_dic),str_dic)  # <class 'str'> {"a1": "b1", "a2": "b2", "a3": "b3"}
      
      dic2 = json.loads(str_dic)  # 反序列化:将一个字符串格式的字典转换成一个字典
      print(type(dic2),dic2)      # <class 'dict'> {"a1": "b1", "a2": "b2", "a3": "b3"}
      
      # 这个是用来操作文件的
      f = open('json_file','w')
      dic3 = {'a1':'b1','a2':'b2','a3':'b3'}
      json.dump(dic3,f)    # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
      f.close()
      
      f1 = open('json_file')
      dic4 = json.load(f1) # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
      f1.close()
      print(type(dic4),dic4)
  • 安装第三方库

    很简单的一条命令:pip install requests

    可以在这个网址查找需要安装的第三方库:https://pypi.org/

  • 常用第三方库

    使用第三方模块,要先安装。其次去查看怎么使用。

    比如我要获取一个网站的信息,可以通过requests这个模块快速获取。

    三行代码轻松访问豆瓣首页

    import requests
    
    r = requests.get('https://www.douban.com/')  # 豆瓣首页
    
    print(r.text)                             # 整个网页的文本信息

    所以说:第三方库非常方便开发,这也就是为什么Python这么强大。

    Scikit-learnTensorFlowPyTorchTheanoKeras

    以上这些都是人工智能领域方向的第三方库,还有很多,不再一一例举。

    注意:要使用第三方库,就是看他的官网文档。作为一个程序员,不会看文档,不会看源码。你就废了

猜你喜欢

转载自www.cnblogs.com/lowkeyao/p/11296647.html