A. python调用isprime函数输出1-5000中最大的素数
C语言代码如下:
#include<stdio.h>
int main()
{
int a,b;
printf("please enter two number:"); -----两个数字用空格隔开,以回车键结束输入。
scanf("%d %d",&a,&b);if(a>b)
printf("The max is %d",a);
else if(b>a)
printf("The max is %d",b);
else
printf("The two Numbers are the same");
return 0;
}
运行结果图:
(1)python结构化数组扩展阅读:
c语言特点:
基本特性:
1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。
2、结构式语言:结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。 [
4、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。
C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。
java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。
一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
特有特点:
C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
2.C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
3.不同的变量类型可以用结构体(struct)组合在一起。
4.只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
5.部份的变量类型可以转换,例如整型和字符型变量。
6.通过指针(pointer),C语言可以容易的对存储器进行低级控制。
7.预编译处理(preprocessor)让C语言的编译更具有弹性。
优缺点:
优点
1.简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。
把高级语言的基本结构和语句与低级语言的实用性结合起来。
C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3、数据类型丰富
C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。
4、表达方式灵活实用
C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。
它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。
5、允许直接访问物理地址,对硬件进行操作
由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
6、生成目标代码质量高,程序执行效率高
C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当.
C语言一般只比汇编程序生成的目标代码效率低10%~20%。
7、可移植性好
C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
8、表达力强
C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。
C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。
C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。
它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。
另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
缺点
1、 C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
2、 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。
从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。
B. 为什么要使用Python进行数据分析
我使用python这门语言也有三年了,被其简洁、易读、强大的库所折服,我已经深深爱上了python。其pythonic语言特性,对人极其友好,可以说,一个完全不懂编程语言的人,看懂python语言也不是难事。
在数据分析和交互、探索性计算以及数据可视化等方面,相对于R、MATLAB、SAS、Stata等工具,Python都有其优势。近年来,由于Python库的不断发展(如pandas),使其在数据挖掘领域崭露头角。结合其在通用编程方面的强大实力,我们完全可以只使用Python这一种语言去构建以数据为中心的应用程序。
由于python是一种解释性语言,大部分编译型语言都要比python代码运行速度快,有些同学就因此鄙视python。但是小编认为,python是一门高级语言,其生产效率更高,程序员的时间通常比CPU的时间值钱,因此为了权衡利弊,考虑用python是值得的。
Python强大的计算能力依赖于其丰富而强大的库:
Numpy
Numerical Python的简称,是Python科学计算的基础包。其功能:
1. 快速高效的多维数组对象ndarray。
2. 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
3. 线性代数运算、傅里叶变换,以及随机数生成。
4. 用于将C、C++、Fortran代码集成到Python的工具。
除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无需进行任何数据复制工作。
SciPy
是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:
1. scipy.integrate:数值积分例程和微分方程求解器。
2. scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能。
3. scipy.optimize:函数优化器(最小化器)以及根查找算法。
4. scipy.signal:信号处理工具。
5. scipy.sparse:稀疏矩阵和稀疏线性系统求解器。
6. scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数)的Fortran库)的包装器。
7. scipy.stats:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法。
8. scipy.weave:利用内联C++代码加速数组计算的工具。
注:NumPy跟SciPy的有机结合完全可以替代MATLAB的计算功能(包括其插件工具箱)。
SymPy
是python的数学符号计算库,用它可以进行数学表达式的符号推导和演算。
pandas
提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
对于使用R语言进行统计计算的用户,肯定不会对DataFrame这个名字感到陌生,因为它源自于R的data.frame对象。但是这两个对象并不相同。R的data.frame对象所提供的功能只是DataFrame对象所提供的功能的一个子集。也就是说pandas的DataFrame功能比R的data.frame功能更强大。
matplotlib
是最流行的用于绘制数据图表的Python库。它最初由John D. Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。它跟IPython(马上就会讲到)结合得很好,因而提供了一种非常好用的交互式数据绘图环境。绘制的图表也是交互式的,你可以利用绘图窗口中的工具栏放大图表中的某个区域或对整个图表进行平移浏览。
TVTK
是python数据三维可视化库,是一套功能十分强大的三维数据可视化库,它提供了Python风格的API,并支持Trait属性(由于Python是动态编程语言,其变量没有类型,这种灵活性有助于快速开发,但是也有缺点。而Trait库可以为对象的属性添加检校功能,从而提高程序的可读性,降低出错率。) 和NumPy数组。此库非常庞大,因此开发公司提供了一个查询文档,用户可以通过下面语句运行它:
>>> from enthought.tvtk.toolsimport tvtk_doc
>>> tvtk_doc.main()
Scikit-Learn
是基于python的机器学习库,建立在NumPy、SciPy和matplotlib基础上,操作简单、高效的数据挖掘和数据分析。其文档、实例都比较齐全。
小编建议:初学者使用python(x, y),其是一个免费的科学和工程开发包,提供数学计算、数据分析和可视化展示。非常方便!
C. python常用到哪些库
Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类库,Python在各个领域都能发挥巨大的作用。
下面我们就来看一下python中常用到的库:
数值计算库:
1. NumPy
支持多维数组与矩阵运算,也针对数组运算提供大量的数学函数库。通常与SciPy和Matplotlib一起使用,支持比Python更多种类的数值类型,其中定义的最重要的对象是称为ndarray的n维数组类型,用于描述相同类型的元素集合,可以使用基于0的索引访问集合中元素。
2. SciPy
在NumPy库的基础上增加了众多的数学、科学及工程计算中常用的库函数,如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等,可进行插值处理、信号滤波,以及使用C语言加速计算。
3. Pandas
基于NumPy的一种工具,为解决数据分析任务而生。纳入大量库和一些标准的数据模型,提供高效地操作大型数据集所需的工具及大量的能快速便捷处理数据的函数和方法,为时间序列分析提供很好的支持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。
数据可视化库:
4. Matplotlib
第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。
5. Seaborn
利用了Matplotlib,用简洁的代码来制作好看的图表。与Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感。
6. ggplot
基于R的一个作图库ggplot2,同时利用了源于《图像语法》(The Grammar of Graphics)中的概念,允许叠加不同的图层来完成一幅图,并不适用于制作非常个性化的图像,为操作的简洁度而牺牲了图像的复杂度。
7. Bokeh
跟ggplot一样,Bokeh也基于《图形语法》的概念。与ggplot不同之处为它完全基于Python而不是从R处引用。长处在于能用于制作可交互、可直接用于网络的图表。图表可以输出为JSON对象、HTML文档或者可交互的网络应用。
8. Plotly
可以通过Python notebook使用,与Bokeh一样致力于交互图表的制作,但提供在别的库中几乎没有的几种图表类型,如等值线图、树形图和三维图表。
9. pygal
与Bokeh和Plotly一样,提供可直接嵌入网络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成方法,且默认的风格也很漂亮,用几行代码就可以很容易地制作出漂亮的图表。
10. geoplotlib
用于制作地图和地理相关数据的工具箱。可用来制作多种地图,比如等值区域图、热度图、点密度图。必须安装Pyglet(一个面向对象编程接口)方可使用。
11. missingno
用图像的方式快速评估数据缺失的情况,可根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图对数据进行修正。
web开发库:
12. Django
一个高级的Python Web框架,支持快速开发,提供从模板引擎到ORM所需的一切东西,使用该库构建App时,必须遵循Django的方式。
13. Socket
一个套接字通讯底层库,用于在服务器和客户端间建立TCP或UDP连接,通过连接发送请求与响应。
14. Flask
一个基于Werkzeug、Jinja 2的Python轻量级框架(microframework),默认配备Jinja模板引擎,也包含其他模板引擎或ORM供选择,适合用来编写API服务(RESTful rervices)。
15. Twisted
一个使用Python实现的基于事件驱动的网络引擎框架,建立在deferred object之上,一个通过异步架构实现的高性能的引擎,不适用于编写常规的Web Apps,更适用于底层网络。
数据库管理:
16. MySQL-python
又称MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架也基于此库进行开发。只支持Python 2.x,且安装时有许多前置条件。由于该库基于C语言开发,在Windows平台上的安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代品为衍生版本。
17. mysqlclient
完全兼容MySQLdb,同时支持Python 3.x,是Django ORM的依赖工具,可使用原生SQL来操作数据库,安装方式与MySQLdb一致。
18. PyMySQL
纯Python实现的驱动,速度比MySQLdb慢,最大的特点为安装方式简洁,同时也兼容MySQL-python。
19. SQLAlchemy
一种既支持原生SQL,又支持ORM的工具。ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的一些损失。
自动化运维:
20. jumpsever跳板机
一种由Python编写的开源跳板机(堡垒机)系统,实现了跳板机的基本功能,包含认证、授权和审计,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap编写,界面美观,自动收集硬件信息,支持录像回放、命令搜索、实时监控、批量上传下载等功能,基于SSH协议进行管理,客户端无须安装agent。主要用于解决可视化安全管理,因完全开源,容易再次开发。
21. Mage分布式监控系统
一种用Python开发的自动化监控系统,可监控常用系统服务、应用、网络设备,可在一台主机上监控多个不同服务,不同服务的监控间隔可以不同,同一个服务在不同主机上的监控间隔、报警阈值可以不同,并提供数据可视化界面。
22. Mage的CMDB
一种用Python开发的硬件管理系统,包含采集硬件数据、API、页面管理3部分功能,主要用于自动化管理笔记本、路由器等常见设备的日常使用。由服务器的客户端采集硬件数据,将硬件信息发送至API,API负责将获取的数据保存至数据库中,后台管理程序负责对服务器信息进行配置和展示。
23. 任务调度系统
一种由Python开发的任务调度系统,主要用于自动化地将一个服务进程分布到其他多个机器的多个进程中,一个服务进程可作为调度者依靠网络通信完成这一工作。
24. Python运维流程系统
一种使用Python语言编写的调度和监控工作流的平台,内部用于创建、监控和调整数据管道。允许工作流开发人员轻松创建、维护和周期性地调度运行工作流,包括了如数据存储、增长分析、Email发送、A/B测试等诸多跨多部门的用例。
GUI编程:
25. Tkinter
一个Python的标准GUI库,可以快速地创建GUI应用程序,可以在大多数的UNIX平台下使用,同样可以应用在Windows和Macintosh系统中,Tkinter 8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
26. wxPython
一款开源软件跨平台GUI库wxWidgets的Python封装和Python模块,是Python语言的一套优秀的GUI图形库,允许程序员很方便地创建完整的、功能健全的GUI用户界面。
27. PyQt
一个创建GUI应用程序的工具库,是Python编程语言和Qt的成功融合,可以运行在所有主要操作系统上,包括UNIX、Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
28. PySide
一个跨平台的应用程式框架Qt的Python绑定版本,提供与PyQt类似的功能,并相容API,但与PyQt不同处为其使用LGPL授权。
更多Python知识请关注Python自学网。
D. python 数据挖掘需要用哪些库和工具
python 数据挖掘常用的库太多了!主要分为以下几大类:
第一数据获取:request,BeautifulSoup
第二基本数学库:numpy
第三 数据库出路 pymongo
第四 图形可视化 matplotlib
第五 树分析基本的库 pandas
数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘本质上像是机器学习和人工智能的基础,它的主要目的是从各种各样的数据来源中,提取出超集的信息,然后将这些信息合并让你发现你从来没有想到过的模式和内在关系。这就意味着,数据挖掘不是一种用来证明假说的方法,而是用来构建各种各样的假说的方法。
想要了解更多有关python 数据挖掘的信息,可以了解一下CDA数据分析师的课程。CDA数据分析师证书的含金量是很高的,简单从两个方面分析一下:首先是企业对于CDA的认可,经管之家CDA LEVEL Ⅲ数据科学家认证证书,属于行业顶尖的人才认证,已获得IBM大数据大学,中国电信,苏宁,德勤,猎聘,CDMS等企业的认可。CDA证书逐渐获得各企业用人单位认可与引进,如中国电信、中国移动、德勤,苏宁,中国银行,重庆统计局等。点击预约免费试听课。
E. python常用到哪些库
第一、NumPy
NumPy是NumericalPython的简写,是Python数值计算的基石。它提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。NumPy还包括其他内容:
①快速、高效的多维数组对象ndarray
②基于元素的数组计算或数组间数学操作函数
③用于读写硬盘中基于数组的数据集的工具
④线性代数操作、傅里叶变换以及随机数生成
除了NumPy赋予Python的快速数组处理能力之外,NumPy的另一个主要用途是在算法和库之间作为数据传递的数据容器。对于数值数据,NumPy数组能够比Python内建数据结构更为高效地存储和操作数据。
第二、pandas
pandas提供了高级数据结构和函数,这些数据结构和函数的设计使得利用结构化、表格化数据的工作快速、简单、有表现力。它出现于2010年,帮助Python成为强大、高效的数据分析环境。常用的pandas对象是DataFrame,它是用于实现表格化、面向列、使用行列标签的数据结构;以及Series,一种一维标签数组对象。
pandas将表格和关系型数据库的灵活数据操作能力与Numpy的高性能数组计算的理念相结合。它提供复杂的索引函数,使得数据的重组、切块、切片、聚合、子集选择更为简单。由于数据操作、预处理、清洗在数据分析中是重要的技能,pandas将是重要主题。
第三、matplotlib
matplotlib是最流行的用于制图及其他二维数据可视化的Python库,它由John D.
Hunter创建,目前由一个大型开发者团队维护。matplotlib被设计为适合出版的制图工具。
对于Python编程者来说也有其他可视化库,但matplotlib依然使用最为广泛,并且与生态系统的其他库良好整合。
第四、IPython
IPython项目开始于2001年,由FernandoPérez发起,旨在开发一个更具交互性的Python解释器。在过去的16年中,它成为Python数据技术栈中最重要的工具之一。
尽管它本身并不提供任何计算或数据分析工具,它的设计侧重于在交互计算和软件开发两方面将生产力最大化。它使用了一种执行-探索工作流来替代其他语言中典型的编辑-编译-运行工作流。它还提供了针对操作系统命令行和文件系统的易用接口。由于数据分析编码工作包含大量的探索、试验、试错和遍历,IPython可以使你更快速地完成工作。
第五、SciPy
SciPy是科学计算领域针对不同标准问题域的包集合。以下是SciPy中包含的一些包:
①scipy.integrate数值积分例程和微分方程求解器
②scipy.linalg线性代数例程和基于numpy.linalg的矩阵分解
③scipy.optimize函数优化器和求根算法
④scipy.signal信号处理工具
⑤scipy.sparse稀疏矩阵与稀疏线性系统求解器
SciPy与Numpy一起为很多传统科学计算应用提供了一个合理、完整、成熟的计算基础。
第六、scikit-learn
scikit-learn项目诞生于2010年,目前已成为Python编程者首选的机器学习工具包。仅仅七年,scikit-learn就拥有了全世界1500位代码贡献者。其中包含以下子模块:
①分类:SVM、最近邻、随机森林、逻辑回归等
②回归:Lasso、岭回归等
③聚类:K-means、谱聚类等
④降维:PCA、特征选择、矩阵分解等
⑤模型选择:网格搜索、交叉验证、指标矩阵
⑥预处理:特征提取、正态化
scikit-learn与pandas、statsmodels、IPython一起使Python成为高效的数据科学编程语言。
F. 如何系统地自学 Python
是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?
幸运的是,Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。
Python 的设计哲学之一就是简单易学,体现在两个方面:
语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。
切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
废话不多说,学会一门语言的捷径只有一个: Getting Started
¶ 起步阶段
任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识。
硬知识
“硬知识”指的是编程语言的语法、算法和数据结构、编程范式等,例如:变量和类型、循环语句、分支、函数、类。这部分知识也是具有普适性的,看上去是掌握了一种语法,实际是建立了一种思维。例如:让一个 Java 程序员去学习 Python,他可以很快的将 Java 中的学到的面向对象的知识 map 到 Python 中来,因此能够快速掌握 Python 中面向对象的特性。
如果你是刚开始学习编程的新手,一本可靠的语法书是非常重要的。它看上去可能非常枯燥乏味,但对于建立稳固的编程思维是必不可少。
下面列出了一些适合初学者入门的教学材料:
廖雪峰的 Python 教程 Python 中文教程的翘楚,专为刚刚步入程序世界的小白打造。
笨方法学 Python 这本书在讲解 Python 的语法成分时,还附带大量可实践的例子,非常适合快速起步。
The Hitchhiker’s Guide to Python! 这本指南着重于 Python 的最佳实践,不管你是 Python 专家还是新手,都能获得极大的帮助。
Python 的哲学:
学习也是一样,虽然推荐了多种学习资料,但实际学习的时候,最好只选择其中的一个,坚持看完。
必要的时候,可能需要阅读讲解数据结构和算法的书,这些知识对于理解和使用 Python 中的对象模型有着很大的帮助。
软知识
“软知识”则是特定语言环境下的语法技巧、类库的使用、IDE的选择等等。这一部分,即使完全不了解不会使用,也不会妨碍你去编程,只不过写出的程序,看上去显得“傻”了些。
对这些知识的学习,取决于你尝试解决的问题的领域和深度。对初学者而言,起步阶段极易走火,或者在选择 Python 版本时徘徊不决,一会儿看 2.7 一会儿又转到 3.0,或者徜徉在类库的大海中无法自拔,Scrapy,Numpy,Django 什么都要试试,或者参与编辑器圣战、大括号缩进探究、操作系统辩论赛等无意义活动,或者整天跪舔语法糖,老想着怎么一行代码把所有的事情做完,或者去构想圣洁的性能安全通用性健壮性全部满分的解决方案。
很多“大牛”都会告诫初学者,用这个用那个,少走弯路,这样反而把初学者推向了真正的弯路。
还不如告诉初学者,学习本来就是个需要你去走弯路出 Bug,只能脚踏实地,没有奇迹只有狗屎的过程。
选择一个方向先走下去,哪怕脏丑差,走不动了再看看有没有更好的解决途径。
自己走了弯路,你才知道这么做的好处,才能理解为什么人们可以手写状态机去匹配却偏要发明正则表达式,为什么面向过程可以解决却偏要面向对象,为什么我可以操纵每一根指针却偏要自动管理内存,为什么我可以嵌套回调却偏要用 Promise...
更重要的是,你会明白,高层次的解决方法都是对低层次的封装,并不是任何情况下都是最有效最合适的。
技术涌进就像波浪一样,那些陈旧的封存已久的技术,消退了迟早还会涌回的。就像现在移动端应用、手游和 HTML5 的火热,某些方面不正在重演过去 PC 的那些历史么?
因此,不要担心自己走错路误了终身,坚持并保持进步才是正道。
起步阶段的核心任务是掌握硬知识,软知识做适当了解,有了稳固的根,粗壮的枝干,才能长出浓密的叶子,结出甜美的果实。
¶ 发展阶段
完成了基础知识的学习,必定会感到一阵空虚,怀疑这些语法知识是不是真的有用。
没错,你的怀疑是非常正确的。要让 Python 发挥出它的价值,当然不能停留在语法层面。
发展阶段的核心任务,就是“跳出 Python,拥抱世界”。
在你面前会有多个分支:科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,这些都不是仅仅知道 Python 语法就能解决的问题。
拿爬虫举例,如果你对计算机网络,HTTP 协议,HTML,文本编码,JSON 一无所知,你能做好这部分的工作么?而你在起步阶段的基础知识也同样重要,如果你连循环递归怎么写都还要查文档,连 BFS 都不知道怎么实现,这就像工匠做石凳每次起锤都要思考锤子怎么使用一样,非常低效。
在这个阶段,不可避免要接触大量类库,阅读大量书籍的。
类库方面
“Awesome Python 项目”:vinta/awesome-python · GitHub
这里列出了你在尝试解决各种实际问题时,Python 社区已有的工具型类库,如下图所示:
vinta/awesome-python
你可以按照实际需求,寻找你需要的类库。
至于相关类库如何使用,必须掌握的技能便是阅读文档。由于开源社区大多数文档都是英文写成的,所以,英语不好的同学,需要恶补下。
书籍方面
这里我只列出一些我觉得比较有一些帮助的书籍,详细的请看豆瓣的书评:
科学和数据分析:
❖“集体智慧编程”:集体智慧编程 (豆瓣)
❖“数学之美”:数学之美 (豆瓣)
❖“统计学习方法”:统计学习方法 (豆瓣)
❖“Pattern Recognition And Machine Learning”:Pattern Recognition And Machine Learning (豆瓣)
❖“数据科学实战”:数据科学实战 (豆瓣)
❖“数据检索导论”:信息检索导论 (豆瓣)
爬虫:
❖“HTTP 权威指南”:HTTP权威指南 (豆瓣)
Web 网站:
❖“HTML & CSS 设计与构建网站”:HTML & CSS设计与构建网站 (豆瓣)
...
列到这里已经不需要继续了。
聪明的你一定会发现上面的大部分书籍,并不是讲 Python 的书,而更多的是专业知识。
事实上,这里所谓“跳出 Python,拥抱世界”,其实是发现 Python 和专业知识相结合,能够解决很多实际问题。这个阶段能走到什么程度,更多的取决于自己的专业知识。
¶ 深入阶段
这个阶段的你,对 Python 几乎了如指掌,那么你一定知道 Python 是用 C 语言实现的。
可是 Python 对象的“动态特征”是怎么用相对底层,连自动内存管理都没有的C语言实现的呢?这时候就不能停留在表面了,勇敢的拆开 Python 的黑盒子,深入到语言的内部,去看它的历史,读它的源码,才能真正理解它的设计思路。
这里推荐一本书:
“Python 源码剖析”:Python源码剖析 (豆瓣)
这本书把 Python 源码中最核心的部分,给出了详细的阐释,不过阅读此书需要对 C 语言内存模型和指针有着很好的理解。
另外,Python 本身是一门杂糅多种范式的动态语言,也就是说,相对于 C 的过程式、 Haskell 等的函数式、Java 基于类的面向对象而言,它都不够纯粹。换而言之,编程语言的“道学”,在 Python 中只能有限的体悟。学习某种编程范式时,从那些面向这种范式更加纯粹的语言出发,才能有更深刻的理解,也能了解到 Python 语言的根源。
这里推荐一门公开课
“编程范式”:斯坦福大学公开课:编程范式
讲师高屋建瓴,从各种编程范式的代表语言出发,给出了每种编程范式最核心的思想。
值得一提的是,这门课程对C语言有非常深入的讲解,例如C语言的范型和内存管理。这些知识,对阅读 Python 源码也有大有帮助。
Python 的许多最佳实践都隐藏在那些众所周知的框架和类库中,例如 Django、Tornado 等等。在它们的源代码中淘金,也是个不错的选择。
¶ 最后的话
每个人学编程的道路都是不一样的,其实大都殊途同归,没有迷路的人只有不能坚持的人!
希望想学 Python 想学编程的同学,不要犹豫了,看完这篇文章,
Just Getting Started !!!
G. 什么是python编程
Python是一门新兴的编程语言,编程语言有很多,比如C++、Java、C#、PHP、JavaScript等,Python也是其中之一,在学习Python前,我们需要对它有一定的了解。
Python支持多种编程范型,如函数式、指令式、结构化、面向对象和反射式编程。
Python解释器易于扩展,可以使用C或C++或其他可以通过C调用的语言扩展新的功能和数据类型。
Python编写的程序不需要编译成二进制代码,可以直接从源代码运行程序,在计算机内部,Python解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
语法简洁而清晰,具有丰富和强大的类库,使用Python快速生成程序的原型,然后对其中有特别要求的部分,用更合适的语言改写,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。
只有基础建牢固了,才会更利于我们以后的发展及进步,现如今Python的发展十分迅速,已经将C++语言甩在了后边,在不久的将来,可能会超过C和Java这些主流语言。