zoukankan      html  css  js  c++  java
  • 学习笔记:Python3 模块

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

    在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

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

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

  • 相关阅读:
    关于web前端网站优化
    C/S与B/S架构的区别和优缺点
    什么是闭包?闭包的优缺点?
    JavaScript中基本数据类型和引用数据类型的区别
    jQuery对象与DOM对象之间的转换方法
    (转)第05节:Fabric.js的动画设置
    (转)第04节:Fabric.js用路径画不规则图形
    layui表单与原生js表单的一些小问题(三)
    layui表单与原生js表单的一些小问题(二)
    layui表单与原生js表单的一些小问题(一)
  • 原文地址:https://www.cnblogs.com/lowkeyao/p/11296647.html
Copyright © 2011-2022 走看看