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

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

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

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/lowkeyao/p/11296647.html
Copyright © 2011-2022 走看看