zoukankan      html  css  js  c++  java
  • Python中的模块和包

    1.Python中的模块和包

     模块:Module,把所有的代码划分到不同的文件中,每个文件称为一个“模块”——便于分工协作;同时模块内数据只能在当前模块中使用,从而防止全局污染

    CommonJS/Node.js中模块:

       导出:module.exports = ...

       导入:const  x = require('./x')

    ES6中的模块:

       导出:export class Emp{ }

       导入:import {Emp} from './x'

     

       导出:export default class Emp{ }

       导入:import Emp from './x'

    Python中的模块:

       导出:不需要,默认情况下所有成员都可以被其它模块导入

       导入形式1:import  m1    #m1就代表./m1.py文件模块

       导入形式2:from  m1  import  age    #age就是m1模块中的内部全局变量

     

    注意:          

     ①第一次导入某个模块会自动在内存中创建该模块对应的对象,会在内存中留下这份拷贝,后续如果还有针对同一个模块文件的导入,则不再执行该文件,直接从内存中取出之前的缓存对象——即每个模块对象都是“单例的(Singleton)”

     ②模块不需要导出内部成员——内部的全局变量就是模块的成员属性,全局函数就是模块的成员方法

     ③Python内部约定:启动模块的名称(__name__)为'__main__';非启动模块的名称就是文件名称(去掉.py)。利用此特性,可以执行特定的单元测试代码:

    if(__name__ == '__main__'):

    #此处放置单元测试代码

     ④如果项目中的模块太多了,可以把多个模块文件放置在同一个目录下,这样的目录称为“package——包”;例如:“用户包”、“商品包”、“购物车包”...

      假设有: user/login.py,则启动文件可以如下导入

      导入包下的模块:  import  user.login  as  ul

      导入包下的模块中的成员:  from  user.login  import  uname

     ⑤如果想在包中执行一些初始化代码,可以放在 __init__.py 的文件中——只要该包中任何模块被导入,都会执行且仅执行一次该初始化文件

     

    CommonJS中有package的概念 —— 用于盛放多个模块文件

    Python中也有package的概念;

    ES6中没有package概念!!

    2.Python官方提供的函数和对象

     提示:官方提供的函数和对象都放置在特定的包或模块中;

     手册:https://docs.python.org/zh-cn/3/library/index.html

     ①datetime模块

       该模块提供了三个class:date/time/datetime

    from  datatime  import  date, time, datetime

       获取当前系统日期时间:

    dt = datetime.now()

       把日期时间格式化为特殊的字符串:

    s1 = dt.strftime( '%Y-%m-%d %H:%M:%S' )

    ------------------------------------------------

    y = dt.year

    m = dt.month

    d = dt.day   #不是date

    h = dt.hour

    mi = dt.minute

    s = dt.second

       把日期时间转换为长整数(0表示1970-1-1 0:0:0)——称为时间戳

    num = dt.timestamp( )

       把长整数转换为日期时间对象:

    dt = datetime.fromtimestamp( num )

       

     

     ②math模块

         import  math

      获取PI的值:

    math.pi

      上下取整:

    math.ceil( ) / math.floor( )

      三角函数:

    math.sin( deg )

      注意:JS中还有Math.max()/min()/round()/abs()几个函数Python中是全局函数;JS中的Math.random()函数Python是一个独立的模块

     

    ③random模块

      import  random

      生成0~1间的随机小数:

       n = random.random( )

      生成min~max间的随机整数:

       n = random.randrange(min, max, step)

      从字符串数组中随机取出一个元素

       e = random.choice( myList )

      随机打乱一个数组:

    random.shuffle( myList )  #直接修改原始列表

     

    ④os.path模块

      提示:Python中没有类似Node.js中的__dirname

      获取当前路径对应的绝对路径名

      import  os.path

      p = os.path.abspath( './' )

     

    ⑤json模块

      import  json

      把dict对象转换为JSON格式的字符串——称为“序列化”:    

      //JS:str = JSON.stringify( obj )

      str = json.dumps( obj )

      把JSON格式的字符串解析为dict对象——称为“反序列化”:

      //JS:  obj = JSON.parse( str )

      obj = json.loads( str )

     

    ⑥http.client模块

      模拟浏览器向指定的URL发起HTTP请求(GET/POST/...)

      作用:爬虫程序、服务器端代理

    import  http.client

    conn = http.client.HTTPConnection('www.codeboy.com')  #创建连接

    conn.request('GET', '/index.html')  #发起请求

    res = conn.getresponse( )  #得到响应消息

    body = res.read( )  #读取响应主体

    面试题:跨域的解决方案?各自的利弊?

    ①JSONP: 只能发起GET请求,且服务器端修改代码

    ②CORS: 修改服务器端代码,生成特别响应消息头部

    ③服务器端请求代理方案:让前端服务器代替客户端浏览器向后端服务器发请求

           

     

    ⑦http.server模块

    创建HTTP服务器的方法:

    1)Node.js原生方案http              2)Node.js第三方框架:Express

    3)Python原生方案http.server        4)Python第三方框架:Django

     

     

    3.Pip工具的使用——Python第三方包/模块下载工具

      Node.js官方提供了很多模块,业界还有更多的第三方模块,默认托管在npmjs.com上,可以使用NPM(Node Package Manager)工具下载和维护第三方模块;

      类似的,Python官方提供了很多模块,业界还有更多的第三方模块,默认托管在pypi.org上,可以使用PIP(Package Installer for Python)工具下载和维护第三方模块。

      PIP常用的命令:

      pip  list     #列出已经安装的所有模块

      pip  show  模块名 #显示指定模块的详情

      pip  install  模块名      #下载并安装指定模块

      pip  install  --upgrade  模块名 #升级指定的模块

      pip  uninstall  模块名      #卸载指定模块

    提示:PIP默认安装的模块全部安装在 c:userswebappdatalocalprogramspythonpython38-32libsite-packages

     

      

     

  • 相关阅读:
    (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题
    WPF中,DataGrid最左边多出一行的解决方案
    (转)SQL注入攻击简介
    Bot Framework:Activity类简明指南
    微软Bot Framework文档中,关于Sign-in Card的一处代码错误及更正
    微软分布式机器学习工具包DMTK——初窥门径
    在2017年,如何将你的小米4刷上Windows 10 mobile?(后附大量图赏)
    第十周总结
    产品介绍 宿舍小助手
    博客园 之 “水王”
  • 原文地址:https://www.cnblogs.com/sna-ling/p/12789889.html
Copyright © 2011-2022 走看看