numpy快速入门
安装 1pip3 install numpy numpy快速入门 数组是 NumPy 库的核心数据结构。创建数组的最简单方法之一是使用array函数。 1 创建数组 123456789import numpy as np x = np.array([[1,2,3],[2,3,4]]) print(x)"""输出:[[1 2 3][2 3 4]]""" array函数可以在列表甚至嵌套列表上调用。 由于此处输入的嵌套级别是2,因此生成的数组是二维的。 这意味着可以使用两个整数集对数组进行索引。 计算数组维数的最简单方法是检查数组的ndim属性,也可以通过检查数组的shape属性,数组中的元素总数使用size查看: 123456789print(array.ndim)print(array.shape)print(array.size)"""输出:2(2, 3)6""" 创建初始值为0、为1、空值(随机值)的数组: 123456789101112array=np.zeros(2)print(array)array=np.ones(2)print(array)array=np.empt ...
pandas快速入门
安装 1pip3 install pandas pandas快速入门 1 pandas擅长处理哪些数据 在处理表格数据时,例如存储在电子表格或数据库中的数据,pandas是适合您的工具。pandas将帮助您探索、清理和处理数据。在pandas中,数据表称为DataFrame。 要加载pandas包并开始使用它,请导入该包。社区一致使用的pandas别名是pd,因此将pandas加载为pd是所有pandas文档的标准做法: 1import pandas as pd 2 创建DataFrame 下面是一个简单的示例: 1234567891011121314import pandas as pdmydataset = { 'sites': ["aaa", "bbb", "ccc"], 'number': [1, 2, 3]}myvar = pd.DataFrame(mydataset)print(myvar)"""输出: sites number0 aaa 11 bbb 22 ccc 3""" 二维数组的手动创建使用DataFra ...
redis源码分析
redis源码分析 持续更新… 一、C语言基础 本节参考资料: 1、C Primer Plus(第6版)中文版 2、stdint.h 3、编译器特性 attribute_((packed)) redis基于C语言编写,因此在阅读之前,先对C语言的相关语法进行简单回顾。 1 变量 1.1 整型 整型一般使用int定义,它占用一个机器字长,现在一般的个人计算机使用32位(4字节)来储存一个整型的数据。 除此之外,还有其它的附属关键字来定义整型: short或short int,它占用16位(2字节)存储一个整型数据。 long或long int,它占用32位(4字节)或64位(8字节),具体占用多少取决于什么样的操作系统。 long long或long long int,它占用64位(8字节)存储整型数据。 在上述关键字的基础上,使用unsigned可以定义无符号整型,如unsigned int、unsigned short等,它的占用和对应的关键字占用相同,但表示的范围不同(非负)。 1.2 字符型 字符型char实际上也是一个整型,它实际存储的是整数而不是字符。根据不同的字 ...
twisted快速入门
一、介绍 twisted是基于事件驱动的网络引擎框架,事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。 twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。 twisted的架构与单线程、多线程的对比如下: 和asyncio一样,twisted的编程模型可以在单线程下实现并发编程,即事件驱动版本的程序中,多个任务交错执行,但仍然在一个单独的线程控制中。当处理I/O或者其他耗时的操作时,注册一个回调到事件循环中,然后当I/O操作完成时继续执行。回调描述了该如何处理某个事件。事件循环轮询所有的事件,当事件到来时将它们分配给等待处理事件的回调函数。这种方式让程序尽可能的得以执行而不需要用到额外的线程。事件驱动型程序比多线程程序更容易推断出行为,因为程序员不需要关心线程安全问题。 二、反应堆reactor 1 hello world 12345678910from twisted.internet import reactor# ...
对于TCP的一次抓包分析
一、TCP基础 1 TCP介绍 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,它建立在IP层之上,用于解决可靠传输、有序传输等问题。 TCP包又称TCP报文段,报文段分为TCP首部和TCP数据两个部分。TCP首部最小为20B,最大为60B,如图: 其中: 源端口和目的端口字段:各占2B(2^16-1=65535,这是端口号的上限) 序列号字段:占4B,TCP是基于字节流的通信协议,在传输数据流时,要为每个字节编号。比如一个TCP报文的序列号字段为101,总共占100B,则代表这个TCP报文的最后一个字节序号为200,下一个TCP报文的起始序号字段就为201。 确认号字段:占4B,表示期望收到的另一个TCP报文的序列号,ack=seq+1(期望收到的下一个seq)。比如:我收到了一个TCP报文,其seq为301,长度为300B,此时我正确接收了301-600序号的数据,接下来期望收到seq为601的TCP报文,于是我把自己的ack置为601。 数据偏移:占4bit,它表示首部长度,即:TCP数据部分距离TCP整个报文的首部偏移量为多少,数据偏移以4B为单位,最小为(01 ...
scrapy源码分析
一、初出茅庐 1 架构总览 Scrapy的基础架构: 关于架构,很有趣的一点是在Scrapy文档里的问题: Did Scrapy “steal” X from Django? Probably, but we don’t like that word. We think Django is a great open source project and an example to follow, so we’ve used it as an inspiration for Scrapy. We believe that, if something is already done well, there’s no need to reinvent it. This concept, besides being one of the foundations for open source and free software, not only applies to software but also to documentation, procedures, policies, etc ...
Docker
docker 持续更新中.. 一、 简介 1 虚拟化技术 虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。虚拟机和docker都属于虚拟化技术的一种。 2 容器技术 容器技术属于虚拟化技术。当一个项目仅由几个大组件构成的时候,可以为它们单独创建虚拟机,为它们提供完全独立的环境(分配独立的硬件环境);但是,但这些组件逐渐解耦成为更小的组件,它们的数量逐渐增长,为它们一一分配虚拟机是浪费资源的行为,并且大大增加了系统管理员和运维人员的负担。 容器技术应运而生地解决了这个问题,它的开销相比虚拟机小很多,并且在一台机器上允许运行多个相互隔离的服务。在宿主机看来,一个容器不过是一个运行的进程,在容器本身看来,就好像是机器和操作系统上运行的唯一一个进程。 3 虚拟机和容器比较 虚拟机和容器比较,容器更加轻量。因为容器直接运行在宿主机的操作系统上,虚拟机则需要创建出虚拟的硬件资源,将操作系统跑在这些硬件资源之上。 但是虚拟机的好处是它们提供完全隔离的环境,每个虚拟机运行在自己的lin ...
MySQL
MySQL 一、数据库概述 数据库的本质其实就是一款基于网络通信的程序,用于持久化数据,可以理解为存储数据的“仓库”,它保存了一系列有组织的数据。以实现结构化查询,方便管理。 1 数据库相关概念 DB:数据库,保存一组有组织的数据的容器 DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 SQL:结构化查询语言,用于和DBMS通信的语言 SQL 的优点: 不是某个特定数据库供应商专有的语言,几乎所有 DBMS 都支持 SQL 。 简单易学。 虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。 2 数据库存储数据的特点 将数据放到表中,表再放到库中一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性” 表中的数据是按行存储的,每一行类似于java中的“对象”。 3 数据库的分类 关系型数据库:数据之间彼此有关系或者约 ...
pycharm配置远程解释器开发
在windows上开发python,经常会遇到第三方库无法安装的情况,比如lxml,scrapy,celery,twisted等,有些可以通过手动安装wheel文件来解决(wheel文件下载地址),有些根本无法安装,遇到这样的问题,解决方案如下: 换电脑:最简单的方法,换成linux或者mac 在windows电脑安装ubuntu虚拟机,在虚拟机中开发 配置远程解释器,仍然在本地windows开发,使用远程linux的解释器运行 本文介绍的就是第三种方法。 pycharm提供了多种方式配置远程解释器,下面分别介绍。 一、配置SSH解释器 步骤如下: 打开pycharm-->左上角settings-->Python Interpreter-->小齿轮-->Add.. 如果勾选了Automatically upload project files to the server,你本地的代码会自动上传到远程服务器,无需手动上传。 接下来运行代码测试一下: 如果需要安装第三方模块,可以通过编写requirements.txt,连接到远程服务器,执行 1pip3 ...
MongoDB
MongoDB 一、介绍 1 基本介绍 MongoDB是一个基于分布式文件存储的数据库,由C++编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是一个面向文档(document-oriented)的数据库,而不是关系型数据库。它支持的数据结构非常松散,类似json格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能。 MongoDB作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外,还提供了一系列不断扩展的独特功能: 索引 支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、地理空间索引、全文索引 聚合 支持聚合管道,用户能通过简单的片段创建复杂的集合,并通过数据库自动优化 特殊的集合类型 支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话session。类似地,MongoDB也支持固定大小的集合,用于保存近期数据,如日志 文件存储 支持一种非常易用的协议,用于存储大文件和文件元数据。MongoDB并不具备一些在关系型数据库中很普遍的功能,如链接join和复 ...