python学习

对于python需要注意的地方:

1、在代码扫描上java是自上而下的,python则没有这方面的限定,比如你可以在python里面将上一个函数需要调用到的函数写在当前函数的下面。


2、在Java里面引用的都是类,然后使用类的方法,而在python里面可以直接引用函数。在python里面函数一般就是小写的,而类就是大写的,变量是大写加下划线连接,这点和java是一样的。


3、由于python2到python3的转变,导致很多框架不兼容python3或者根本不支持python3.


4、python可以运行的不仅仅是类,更多的是使用函数,命令。


5、使用python xxxx.py &可以让程序在后台运行。使用pip install -r xxx.txt可以批量下载,在文件xxx.txt里面最好是每一行一个下载文件。同时注意使用pip install xxxx == 版本号可以指定版本下载,但是需要注意>和<是定向符号,因此指定版本范围时,需要使用单引号,例如pip install ‘xxx>=版本号’。


6、python的容器模块需要多加强


7、python的网页,网络,并发,存储特别是数据库方面需要加强。


8、python的数据获取以及解析到存储需要特别加强,特别是在爬虫这点上。


9、代码格式可以使用pylint,pyflask,pep8检查。


10、python中对于错误很难及时发现,即使是在pycharm中有高亮代码提示,但是对于一些运行错误时没办法发现的,因此需要特别注意。因此需要测试,可以使用python的unittest单元测试,doctest测试,或者nose第三方包进行测试。但是如果是在实际的编程过程中,那么一般是很少使用单元测试的,更多的情况下使用的调试,而python自身其实是有内置的调试器的,就是pdb,使用python -m pdb xxxx就可以进行了。最后可以使用logging模块和他的logging.logger进行log调试。


11、测试代码时间可以使用timeit模块。


12、pip已经取代easy_install了,;另外Linux的发型版本流行apt-get,yum,dpkg,zypper。最后如果使用pip,那么pip+virtualenv会比较好,virtualenv可以修改包安装路径,可以避免冲突。


13、使用Cython,Numpy,c扩展提高python运行速度(注意,我们使用的是CPython虚拟机,和Cython是不一眼的概念,注意不要混淆)。另外,可以使用PyPy解释器,这个解释器使用了java的加速技术,所以比CPython快。


14、python的GUI有内置的tkinter,但是比较简单,所以可以尝试框架,例如Qt的两种版本pyside是免费的,而pyqt则是付费的;GTK+的pyGTK;WxPython的WxWidgets;kivy。


15、可以使用的关系型数据库:SQLite,MySQL,PostgreSQL,SQLAlchemy。可以使用的NoSQL:dbm family,memcached,Redis


16、python内置测试服务器:python -m http.server 9999,其中9999是端口号,可以不添加,默认是8000


17、输入import antigravity可以打开标准库的webbrowser模块,以显示python的入门网页。


18、使用subprocess,multiprocessing操作并发。


19、使用python xxxx.py &可以让程序在后台运行。


20、python的标准库中的email模块smtplib,email,poplib,imaplib。如果想编写自己的python SMTP服务器,可以试试smtpd。Lamson是一个纯python的SMTP服务器,可以在数据库中存储邮件甚至过滤垃圾邮件。


21、远程程序调用可以使用xmlrpc。fabric可以运行远程或者本地命令,上传或者下载文件。salt最初是为了实现远程运行,但是后来变成了一个完整的系统管理平台,它是基于zeroMQ开发的,不是基于SSH。类似的产品有puppet,chef,他们喝Ruby关系亲密。ansible是python携程的另一个Salt的系统。salt和ansible都包含了fabric的功能,可以进行初始化配置,部署和远程执行。


22、对于Python的优秀代码,首先推荐的是Python包索引PyPi,其中pip搜索的就是PyPi。然后是Github也有很多优秀的代码。不过最重要的是Python自身有本身就有很多优秀的代码。


23、使用pdb进行调试,使用命令python -m pdb XXXX就可以了,另外还可以使用logging以及logging.logger可以调试,使用timeit模块测试代码效率


24、statistics模块有很多有用的数学函数






常用的python框架有:

1、bitstring,construct,hachoir,binio提供了更加直观的定义和提取二进制数据的方法

2、二进制数据交换格式比XML,JSON更加快速和复杂,可以使用MsgPack,Protocol Buffers,Avro,Thrift进行解析

3、NoSQL数据库:Cassandra,CouchDB,HBase,Kyoto,MongoDB,Riak

4、全文数据库:Lucene,Solr,ElasticSearch,Sphinx,Xapian,Whoosh

5、网络请求可以使用requests

6、Web服务器框架可以使用入门级别的bottle,或者更好的Flask,他们都是python的,

但是可以选择非python的Web服务器框架例如:apache,Nginx。

而如果开发的网站基于数据库,并且数据库的结构不会经常发生变化,那最好是用大型的python Web框架:django,web2py,pyramid,turbogears,wheezy.web。其中django,web2py,pyramid已经内置在pycharm中。

另外,有一些类似apache和nginx的基于python的WSGI服务器,使用多进程和\或县城来处理并发请求:uwsgi,cherrypy,pylons。基于时间的服务器,只使用单线程但不会阻塞:tornado,gevent,gunicorn。

7、使用scrapy制作爬虫,使用beautifusoup解析数据。(使用pip install beautifusoup4,别忘了后面的4,不然安装的是旧版本)

8、使用gevent将程序实现为协程,另外gevent.spawn()会为每个gevent.socket.gethostbyname(url)创建一个绿色线程(也叫微线程)。另外gevent的猴子不定monkey函数会修改标准模块,比如socket,会直接让他们使用绿色线程,而不是gevent版本。而且如果想在整个程序中应用gevent,这个方法非常有用,而且即使是无法直接接触的代码也会被改变。

9、并发库:gevent是基于事件,twisted是异步事件驱动的网络框架,asyncio是异步IO。另外Redis可以实现网络并发,使用redis.Redis可以实现队列。

10、celery是一个非常不错的包,他可以同步或者异步执行分布式任务,使用了multiprocessing,gevent的方法。

thoonk基于Redis构建,可以创建任务队列并实现发布-订阅

rq这是一个处理任务队列的Python库,基于Redis

Queues网站介绍了队列化软件,其中有些是基于python开发的。


11、对于发布-订阅,可以使用Redis,zeroMQ实现。其他的框架有:RabbitMQ,pubsubhubbub,也可以在Pypi.python.org搜索pubsub来寻找类似pypubsub这样的python包


12、scapy是一个优秀的python数据包分析工具。不兼容python3.


13、需要特别注意,对于云上的服务有google,amazon,OpenStack三大商家,分别是

google:App Engine,Compute Engine,Cloud Datastore,Cloud SQL,Cloud Endpoints, Big Query

amazon:Elastic Beanstalk,EC2,S3,RDS,DynamoDB,Redshift,EMR

OpenStack:Keystone,Nova,Swift,Glance,Cinder,Horizon,Neutron,Heat,Ceilometer


14、使用pylint,pyflakes,pep8检查代码,使用nose进行测试,这个框架和unittest类似,测试代码其实未必要进行的,也就是说unittest,doctest,nose未必要使用。


15、Python图形标准库有imghdr,colorsys,使用PIL处理图片。还可以使用Pillow框架,这个框架包含了libjpeg,libfreetype,zlib几个系统包,我们可以使用Pillow显示图片。ImageMagick是处理位图的程序,其中一个支持python的库是Wand。


16、Python的3D包:Blender,Maya,Houdini。


17、matplotlib是绘图库


18、在线显示图形框架bokeh依赖NumPy,Pandas,Redis。


19、音频生成:pyknon,mingus,remix,sebastian,piano;整理音乐集合和数据:Beets,Echones,Monstermash,Shiva


20、处理office的库:docx,python-excel,oletools


21、自动处理windows应用:pywin32,pywinauto,swapy


22、使用Fedex或UPS运送货物,使用stamps.com API邮递,OpenERP是一个大型的商用企业资源计划系统。


23、商业和政府提供的数据源:data.gov,Opening gevernment with Python, python-sunlight,froide。以及寻找公开数据的网站(http://blog.visual.ly/data-sources/)


24、金融:Quantitative economics,Pythoin for finance,Quantopian,PyAlgoTrade,Quandl,Ultra-finance


25、需要pyshp库来读取shapefile文件


26、Python绘图软件:basemap(基于matplotlib),mapnik,tilemill,Vincent,Python for ArcGIS


27、科学版本的Python:Anaconda,Enthought Canopy,Python(x,y)(仅能在windows下使用),Pyzo(建立在Anaconda上),ALGORETE Loopy(建立在Anaconda上)


28、进行快速多维矩阵运算而设计的Numpy。SciPy是建立在NumPy之上的库,包含了更多的数学函数和统计函数以及其他多种例如图像信号处理的功能。


29、SciKit特长是机器学习


30、交互式数据分析工具包Pandas。NumPy是针对传统科学计算而设计,主要处理单一的类型的多维数据集,通常为浮点型数据。Pandas更像是一个数据库编辑器,可以处理包含多种数据类型的组。在某些语言中,这种组被称为记录或者结构。

应该说Pandas是一款用于处理真实世界中各种类型的混杂数据的ETL工具。

NumPy,SciPy,IPython是用于进行痛哦过几计算。根据模型拟合数据、绘制图表、发表,等等


31、安装Anaconda可以代替pip,因为Anaconda里面有一个跨平台安装程序conda,它是pip的增强版。而且Anaconda里面有bearutifulsoup4,flask,ipython、matplotlib、nose、numpy、pandas、pillow、pip、scipy、tables、zmq等等。


32、virtualenv+pip可以修改安装路径。






        最后需要注意,对于python命令,有两种运行方式,1、python xxxx.py;2、python -m xxx.py。这里后者意思是将文件当成模块来运行的意思,也就是说-m是import的意思。例如打开python内置的测试服务器python -m http.server命令,这里其实http是Lib文件夹下的http模块,而http.server是Lib\http\server.py文件。

        所以总的来说,所有的python命令其实都是定位到Lib文件夹下查找文件作为脚本运行。而我们使用的scrapy,pip等命令其实是调用了Script下的exe文件。





你可能感兴趣的:(python学习)