自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 收藏
  • 关注

原创 云南龙头装饰好不好,C语言随机数生成教程

在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:int rand (void);void 表示不需要传递参数。C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的

2021-01-19 10:06:33 239

原创 蒋丽苑,C++用顶层函数重载操作符

在前面两节中,我们是将操作符重载函数声明为类的成员函数,其实除了能将操作符重载函数声明为类的成员函数之外,我们也可以将操作符重载函数声明为顶层函数。在前面将操作符重载函数声明为类成员函数时,我们不断强调二元操作符,其函数参数为一个,一元操作符重载函数不需要函数参数。但是一旦将操作符重载函数声明为顶层函数时,则必须至少有一个类对象参数,否则的话编译器无法区分操作符是系统内建的还是程序设计人员自己定义的,有了一个类对象参数之后,系统则会根据情况调用内建或自定的操作符。如果以顶层函数的形式重载操作符时,二元操作符

2021-01-15 09:44:57 271

原创 蒋丽苑,C++基本操作符重载

操作符重载指的是将C++提供的操作符进行重新定义,使之满足我们所需要的一些功能。在C++中可以重载的操作符有:/ % ^ & | ~ ! = < > += -= = /= %= ^= &= |=<< >> <<= >>= == != <= >= && || ++ – , -> -> () []new new[

2021-01-15 09:42:53 301

原创 蒋丽苑,C++ dynamic_cast操作符

在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。例1:#includeusing namespace std;class base{public :void m(){cout<<“m”<<endl;}};class derived : public base{public:void f(){cout<<“f”&l

2021-01-15 09:41:54 160

原创 蒋丽苑,C++抽象基类和纯虚成员函数

公共接口是指一系列成员函数的集合,支持该接口的类必须以合适的方式重新定义这些成员函数,否则就无法创建对象。在C++中,可以通过抽象基类来实现公共接口。为了介绍抽象基类,我们需要先来了解一下纯虚成员函数。纯虚成员函数的声明语法如下:virtual 函数返回类型 函数名 (函数参数) = 0;纯虚成员函数没有函数体,只有函数声明,在纯虚函数声明结尾加上“=0”表明此函数为纯虚成员函数。包含纯虚成员函数的类即为抽象基类,之所以说它抽象,那是因为它无法实例化,也即无法用于创建对象。例1:#include

2021-01-15 09:41:07 172

原创 蒋丽苑,C++重载、覆盖和遮蔽

多态函数是指在运行期才将函数入口地址与函数名绑定的函数,仅有虚函数才是多态。但是除了虚函数以外,重载和遮蔽同样具有函数名相同的特征,在此做一下区分。为了说明方便,我们引入函数签名这一概念。函数签名包括函数名和函数参数的个数、顺序以及参数数据类型。例1:void f( )void g( )void f(int)例2:void f( int)void f(double)例3:void f(double, int)void f(int, double)为了理解函数签名的含义,我们先来看一下上

2021-01-15 09:40:26 154

原创 蒋丽苑,C++静态成员函数

只有非静态成员函数才可以成为虚函数,而静态成员函数不能声明为虚函数。例1:class test{public :virtual test(){a = new int[5];} //errorstatic void g(); //okvirtual void f(); //okvirtual static void h(); //compile errorvirtual ~test(){delete[] a;} //okprivate:int * a;

2021-01-15 09:39:27 112

原创 蒋丽苑,C++虚析构函数

在类中,构造函数用于初始化对象及相关操作,构造函数是不能声明为虚函数的,因为在执行构造函数前对象尚未完成创建,虚函数表尚不存在,此时就无法去查询虚函数表,因此也就无法得知该调用哪一个构造函数了。析构函数则用于销毁对象时完成相应的资源释放工作,析构函数可以被声明为虚函数。我们先通过一个例子来说明析构函数声明为虚函数的必要性。例1:#includeusing namespace std;class base{public:base();~base();private:int * a;};

2021-01-15 09:38:52 145

原创 蒋丽苑,C++虚成员函数表vtable

通过前两节的介绍,想必对多态有一定的了解了。这一节将介绍多态是如何实现的,关于如何实现多态,对于程序设计人员来说即使不知道也是完全没有关系的,但是对于加深对多态的理解具有重要意义,故而在此节中稍微阐述一下多态的实现机制。在C++中通过虚成员函数表vtable实现多态,虚函数表中存储的是类中虚函数的入口地址。在普通的类中是没有虚函数表的,只有在具有虚函数的类中(无论是自身添加的虚函数还是继承过来的虚函数)才会具有虚函数表,通常虚成员函数表的首地址将会被存入对象的最前面(在32位的操作系统中,存储地址是用4个

2021-01-15 09:38:13 77

原创 蒋丽苑,C++虚成员函数

在上一节中已经提到了虚函数的声明方法了,就是在函数返回类型前加上virtual关键字。virtual关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字了,在C++中只有类中的成员函数能被声明为虚函数,而对于顶层函数则不能声明为虚函数,原因很简单,声明虚函数是为了构成多态,而构成多态的第一个条件就是需要继承关系,顶层函数很明显是不具有继承关系的,因此也就不能被声明为虚函数了。例1:#includeusing namespace std;class base{public

2021-01-15 09:37:09 195

原创 蒋丽苑,C++多态的概念及前提条件

在C++程序中,程序的每一个函数在内存中会被分配一段存储空间,而被分配的存储空间的起始地址则为函数的入口地址。例如我们在设计一个程序时都必须为程序设计一个主函数,主函数同样会在内存中被分配一段存储空间,这段存储空间的起始地址即为函数的入口地址。在前面的所有列举的程序中,函数的入口地址与函数名是在编译时进行绑定的,我们称之为编译期绑定,而多态的功能则是将函数名动态绑定到函数入口地址,这样的动态绑定过程称为运行期绑定,换句话来说就是函数名与函数入口地址在程序编译时无法绑定到一起,只有等运行的时候才确定函数名与

2021-01-15 09:36:22 169

原创 蒋丽苑,C语言中的文件是什么?

我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如:通常把显示器称为标准输出文件,printf 就是向这个文件输出数据;通常把键盘称为标准输入文件,scanf 就是从这个文件读取数据。常见硬件设备所对应的文件文件 硬件设备stdin 标准输入文件,一般指键盘;scanf()、getch

2021-01-13 09:47:03 71

原创 蒋丽苑,C语言常量定义详解

有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定:const int MaxNum = 100; //班级的最大人数这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的行为都将引发错误:MaxNum = 90; //错误,试图向 const 变量写入数据我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为:co

2021-01-13 09:46:27 206

原创 蒋丽苑,C语言typedef的用法详解

C语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。起别名的目的不是为了提高程序运行效率,而是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:struct stu stu1;struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:STU stu1;这种写法更加简练,意义也非常明确,不管是在标准头文件中还是以后的编程实践中,都会大量使用这种别名。使用关键字 typedef 可以为类型起一个新

2021-01-13 09:40:31 195

原创 蒋丽苑,C语言位域(位段)详解

在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子:struct bs{unsigned m;unsigned n: 4;unsigned char ch: 6;};:后面的数字用来限定成员变量占用的位数。成员 m 没有限制,根据数据类型即可推算出它占用 4 个字节(Byte)的内存。成员 n、ch 被:后面的数字限制,不能再根据数据类型计算长度,它们分别占用 4、6 位(Bit)的内存。n、ch 的取值范围非常有限,数据稍微大些就会发生溢出,请看

2021-01-13 09:39:45 209

原创 蒋丽苑,C语言共用体

通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:union 共用体名{成员列表};共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可

2021-01-13 09:39:06 199

原创 蒋丽苑,C语言枚举类型

以每周七天为例,我们可以使用#define命令来给每天指定一个名字:#include <stdio.h>#define Mon 1#define Tues 2#define Wed 3#define Thurs 4#define Fri 5#define Sat 6#define Sun 7int main(){int day;scanf("%d", &day);switch(day){case Mon: puts(“Monday”); break;case

2021-01-13 09:38:22 55

原创 蒋丽苑,C语言枚举类型

以每周七天为例,我们可以使用#define命令来给每天指定一个名字:#include <stdio.h>#define Mon 1#define Tues 2#define Wed 3#define Thurs 4#define Fri 5#define Sat 6#define Sun 7int main(){int day;scanf("%d", &day);switch(day){case Mon: puts(“Monday”); break;case

2021-01-13 09:37:45 64

原创 蒋丽苑,C语言结构体数组详解

在C语言中,定义结构体数组和定义结构体变量的方式类似,请看下面的例子:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //所在小组float score; //成绩}class[5];表示一个班级有5个学生。结构体数组在定义的同时也可以初始化,例如:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //

2021-01-13 09:36:58 152

原创 蒋丽苑,C语言结构体详解

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //所在学习小组float score; //成绩};

2021-01-13 09:36:14 107

原创 蒋丽苑,Verilog 时延

关键词:时延, 惯性时延连续赋值延时语句中的延时,用于控制任意操作数发生变化到语句左端赋予新值之间的时间延时。时延一般是不可综合的。寄存器的时延也是可以控制的,这部分在时序控制里加以说明。连续赋值时延一般可分为普通赋值时延、隐式时延、声明时延。下面 3 个例子实现的功能是等效的,分别对应 3 种不同连续赋值时延的写法。//普通时延,A&B计算结果延时10个时间单位赋值给Zwire Z, A, B ;assign #10 Z = A & B ;//隐式时延,声明一个wi

2021-01-13 09:35:36 304

原创 LRU缓存实现(Java)

LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉,废话不多说,下面来说下Java版的LRU缓存实现Java里面实现LRU缓存通常有

2020-11-18 11:40:13 288

原创 Java反射机制详解

1反射机制是什么反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。2反射机制能做什么反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。3反射机制的相关API通过一个对象获得完整的包名和类名Java | 复制

2020-11-18 11:39:30 63

原创 Java分布式技术选型-诺禾-诺禾科技

Java是主流开发语言,应用普遍,Spring Boot是常用框架,有丰富的组件和易用功能,在电商系统、信息管理系统、各种企业应用开发中处于垄断地位。一,系统架构基本框架可分为接口服务、数据层、异步任务调度、业务处理、日志监控等几大模块。打开百度APP,查看更多高清图片1,集成ActiveMQ消息队列,平滑高峰期负载高峰期时,为了及时处理响应客户端请求,系统架构中引入ActiveMQ消息队列,异步处理业务数据,将瞬间高负载平滑,保障运行稳定,架构易扩展。2,集成Redis缓存系统,提高数据读写效

2020-08-31 10:19:28 284

原创 Java集合-Iterator-诺禾-诺禾科技

Java Iterator接口表示一个对象,该对象能够遍历Java对象的集合,一次迭代一个对象。Iterator 接口是Java中用于迭代对象集合的最古老的机制之一(尽管不是最早的-Enumerator 早于Iterator )。使用java的Iterator ,首先从需要迭代的对象集合中获取一个Iterator 实例。获得的迭代器跟踪底层集合中的元素,以确保遍历所有元素。如果在遍历指向该集合的迭代器时,修改基础集合,迭代器通常会检测到它,并在下次尝试从迭代器获取下一个元素时抛出异常。下面会继续讲述。I

2020-08-31 09:48:58 124

原创 推荐一个贼好用的 Java 工具类库|诺禾,诺禾科技

最近看到了一款小而全的 Java 工具类库:Hutool,Github 已经接近 15K Star 了,想必一定很优秀,现在推荐给大家,很多轮子不要再造了!Hutool 是什么Hutool 是一个 Java 工具包类库,它可以对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种 Utils 工具类。Hutool 即是 Hu(谐音“糊涂”) + tool,前者致敬作者 “前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。Hutool

2020-08-31 09:41:33 174

原创 为什么说Java程序员到了必须掌握SpringBoot的时候-美可普

Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在思考: Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot? 传统企业使用 Spring Boot 会给我们带来什么样变革?给大家推荐一个专门收集 Spring Boot 学习资源的地方:Spring Boot带着

2020-08-31 09:39:56 219

原创 Java集合-Collection-福州美可普

Collection接口 (java.util.Collection)是java集合根接口中的一个,尽管不直接实例化Collection,但是我们经常用到其子类,而且通常把其子类当做Collection使用,本文我们会讲到。创建Collection正如上面所说,我们不直接实例化Collection,而是实例化其子类,下面是创建Collection子类List的代码:Collection collection = new ArrayList();上面的示例适用于Collection的每个子类型。Co

2020-08-31 09:38:47 95

原创 如何更规范化编写 Java 代码-美可普

一、MyBatis 不要为了多个查询条件而写 1 = 1当遇到多个查询条件,使用where 1=1 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了 “where 1=1 ”的过滤条件之后,数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(即全表扫描) 以比较此行是否满足过滤条件,当表中的数据量较大时查询速度会非常慢;此外,还会存在SQL 注入的风险。反例: select count(*) from t_rule_BookInfo t wher

2020-08-31 09:37:55 93

原创 Java和Go语言,三方面比较,二选一很难吗?美可普口腔

Java是当前使用最普遍的编程语言,Go是冉冉升起的新星。打开百度APP,查看更多高清图片根据2020年4月份的TIOBE编程语言指数排行榜,排名前三的分别是Java、C、Python,Go排名在第12位。TIOBE编程排行榜根据全球工程师、课程和搜索引擎数量为指数得出,在一定程度上反映了编程语言的发展趋势。一,编程语言从编程语言本身来说,Java首次推出在1995年5月,Go在2009年11月正式推出。1,Java两种语言各有特点,Java经历了20多年,一直在不断更新推出新版本。2009年

2020-08-31 09:36:56 1602

原创 “Smile”一下,轻松用Java玩转机器学习,美可普

Smile,如其名,会是一个让你「笑着用」的好工具。它的全名叫做 Statistical Machine Intelligence and Learning Engine,是一个快速、全面的机器学习系统。试问有多全?可以说是「方方面面」。机器学习方面,例如分类、回归、聚类、关联规则挖掘、特征选取、流形学习、多维尺度分析、遗传算法、最邻近搜索等等。当然还有像数据可视化、数理统计等其他任务也是 hold 得住。还体现在语言方面,例如 Java、Scala、Kotlin 和 Clojure 都可以轻松驾

2020-08-31 09:36:13 260

原创 Java基础知识笔记二,美可普

第一时间关注技术干货!随机数(Rano)1,作用:产生一个随机数2,使用步骤:(1)导包:(2)创建对象:(3)获取随机数:产生的数据在0到100之间,含头不含尾[0,100)。如果我们想要产生一个30~59 ,45~99这样的数。我们就可以利用(A-B)+B+1;列如(59-30)+30+1随机产生式30 ~59,列如(99-45)+45+1随机产生式45 ~99。4,练习5,和Scanner方式类似,我觉得Java这个导包就好比C语言中的头文件。数组概述1,数组的概念数组是存储同

2020-08-31 09:34:33 81

原创 Python|常见的反爬及解决方法-诺禾

我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术。首先我们来看一下爬虫程序和反爬虫之间的一张逻辑图:以下说4种网站反爬虫方式。1.通过User-Agent来控制访问无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers, 表明身份。对于爬虫程序来说,最需要注意的字段就是:User-Agent很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能

2020-08-12 15:16:16 396

原创 Python 下使用 Altair 数据制图|诺禾

Python 中的 绘图库 提供了呈现数据的多种方式,可以满足你不同的偏好,如灵活性、布局、易用性,或者特殊的风格。和其它方式相比,我发现,Altair 提供的是一种不同的解决方案,且总体而言使用起来更为简单。得益于声明式的绘图语言 Vega ,Altair 拥有一套优雅的接口,可以直接定义要绘的图应该是什么样子,而不是通过写一大堆循环和条件判断去一步步构建。绘图流程我通过绘制同一个多柱状图比较了多个 Python 绘图库的差异。正式开始之前,你需要将你的 Python 环境调整到能运行下面代码的状态

2020-08-12 15:15:28 791

原创 基于Python的决策树分类器与剪枝|诺禾

决策树通常包括:根节点-表示被进一步划分为同质组的样本或总体拆分-将节点分为两个子节点的过程决策节点-当一个子节点根据某个条件拆分为其他子节点时,称为决策节点叶节点或终端节点-不进一步拆分的子节点信息增益-要使用一个条件(比如说信息最丰富的特征)来分割节点,我们需要定义一个可以优化的目标函数。在决策树算法中,我们倾向于在每次分割时最大化信息增益。在测量信息增益时,通常使用三种度量。它们是基尼不纯度、熵和分类误差基于Python的决策树分类器与剪枝数学理解为了理解决策树是如何发展的,我们需要更

2020-08-12 15:13:19 339

原创 为什么学习Python?数据给你八大理由|诺禾

学习Python的人不在少数,你是否问过自己:“我为什么选择学习Python?”编程语言有很多,如果打算选择学习Python,你的理由是什么呢?Python是世界上公认的编程语言中需求最大和最流行的编程语言之一。在最新的StackOverflow调查中,Python已经取代了C语言、C++和Java,登上榜首。这就是为什么许多程序员和新手开发人员更愿意学习Python,并且认为Python认证是最受欢迎的编程认证之一。为什么学习Python?数据给你八大理由为什么应该学习Python?当你从基础知识

2020-08-12 15:11:06 176

原创 诺禾、Python 为什么能支持任意的真值判断?

Python 在涉及真值判断(Truth Value Testing)时,语法很简便。比如,在判断某个对象是否不为 None 时,或者判断容器对象是否不为空时,并不需要显示地写出判断条件,只需要在 if 或 while 关键字后面直接写上该对象即可。下图以列表为例,if my_list 这个简短的写法可以表达出两层意思:Python 为什么能支持任意的真值判断?简便用法如果需要作出相反的判断,即“如果为 None 或为空”,只需要写成if not my_list 即可。与众不同的真值判断方式通

2020-08-12 14:27:21 115

原创 诺禾-使用 ZeroMQ 消息库在 C 和 Python 间共享数据 | Linux 中国

作为软件工程师,我有多次在要求完成指定任务时感到浑身一冷的经历。其中有一次,我必须在一些新的硬件基础设施和云基础设施之间写一个接口,这些硬件需要 C 语言,而云基础设施主要是用 Python。实现的方式之一是 用 C 写扩展模块 ,Python 支持 C 扩展的调用。快速浏览文档后发现,这需要编写大量的 C 代码。这样做的话,在有些情况下效果还不错,但不是我喜欢的方式。另一种方式就是将两个任务放在不同的进程中,并使用 ZeroMQ 消息库 在两者之间交换消息。在发现 ZeroMQ 之前,遇到这种类型的情

2020-08-12 14:26:23 289

原创 用Python构建个性化智能闹钟|诺禾

你可能之前有见过有人使用Python语言构建闹钟,帮助他唤醒或提醒他一个重要的会议。这些都是很简单,没有任何智能,他们所做的只是播放你设置的闹钟音乐,或者随机选择一个YouTube视频或歌曲来播放。所以,让我们更上一层楼,做一些更聪明,更个性化的东西,它能理解你,帮助你更快更好地醒来。我们将在本文中构建的个性化闹钟系统将从过去的事件中学习并理解它们,以便在下一个闹钟中获得更好的性能。每次使用它都会变得更好。它会记录用户关闭闹钟所花的时间(用户醒来所用的时间),并推荐有助于你更快醒来的闹铃调音。所以

2020-08-12 14:25:14 323

原创 这5个Python库太难搞!每位数据科学家都应该了解|诺禾

Pthon之所以能成为世界上最受欢迎的编程语言之一,与其整体及其相关库的生态系统密不可分,这些强大的库让Python保持着生命力和高效力。作为数据科学家免不了会使用一些Python库用于项目和研究,除却那些常见的库,还有很多库能够增强你的数据科学研究能力。本文将介绍五大难懂的Python库,理解起来并不容易,但搞定它们你就能功力大增!1.Scrapy每位数据科学家的项目都是从处理数据开始的,而互联网就是最大、最丰富、最易访问的数据库。但可惜的是,除了通过pd.read_html函数来获取数据时,一旦涉

2020-08-12 14:24:05 294

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除