原题|Left-recursivePEGgrammars作者|GuidovanRossum(Python之父)译者|豌豆花下猫(“Python猫”公众号作者)声明|本翻译是出于交流学习的目的,基于CCBY-NC-SA4.0授权协议。为便于阅读,内容略有改动。我曾几次提及左递归是一块绊脚石,是时候去解决它了。基本的问题在于:使用递归下降解析器时,左递归会因堆栈溢出而导致程序终止。【这是我的PEG系列的第5部分。其它文章参见这个目录】假设有如下的语法规则:ex
系统 2019-09-27 17:49:40 2014
1.1安装模块pipinstallpykafka1.2基本使用#-*coding:utf8*-frompykafkaimportKafkaClienthost='IP:9092,IP:9092,IP:9092'client=KafkaClient(hosts=host)#生产者topicdocu=client.topics['my-topic']producer=topicdocu.get_producer()foriinrange(100):printi
系统 2019-09-27 17:48:56 2014
项目目录结构:按照下图所示创建build文件夹及内容Dockerfile:FROMubuntu:16.04FROMpython:3.6ENVhttp_proxy=http://172.16.6.67:3128ENVhttps_proxy=http://172.16.6.67:3128RUNapt-get-yupdate&&\apt-get-yupgrade&&\apt-getinstall-y\vim\git\python3-dev\python3-set
系统 2019-09-27 17:46:45 2014
1.字典键-值对中,值元素的便捷创建增减主要是利用collections中的defaultdict普通复杂过程:pairs=[('a',1),('a',2),('b',2)]d={}forkey,valueinpairs:ifkeynotind:d[key]=[]d[key].append(value)或d={}#普通字典d.setdefault('a',[]).append(1)d.setdefault('a',[]).append(2)d.setdef
系统 2019-09-27 17:46:19 2014
python文件部分:user={'username':None}shopping_trolley={}shopping_num=[0]money=[0]my_money=[0]#获取商品列表defget_goods_list():withopen('shopping.txt',encoding='utf-8')asfr:shopping_dic=eval(fr.read())returnshopping_dicshopping_dic=get_goods
系统 2019-09-27 17:45:36 2014
这次要为我的python程序加上数据库,主要是实现从mysql中查询出数据并在页面上显示出来。首先是mysql的配置文件config.pyhost="127.0.0.1"user="root"password=""charset="utf8"database="service"port=3306然后是从数据库中读取数据的aService.pyimportMySQLdbimportsysimportconfigclassAService(object):de
系统 2019-09-27 17:45:28 2014
1.编译nginx在网上买了一本《实战nginx-取代Apache的高性能服务器》,写的比较浅,主要是些配置方面的东西,不过却正是目前我所需要的。由于需要支持https和rewrite,所以除了nginx的源码之外,又下载了openssl-0.9.8r.tar.gz和pcre-8.12.tar.gz,把他们和nginx-1.0.4.tar.gz放到同一个目录。为了方便编译,笔者写了一个脚本,代码如下:#!/bin/bash#================
系统 2019-09-27 17:38:47 2014
easy_install卸载通过easy_install安装的模块可以直接通过easy_install-mPackageName卸载,然后删除\Python27\Lib\site-packages目录下的egg。setup.py卸载通过发行包附带的setup.py安装的模块,首选setup.py提供的uninstall选项。如果作者没有提供uninstall选项,则通过如下命令行手动卸载:首先获取安装过程中产生的文件:pythonsetup.pyinsta
系统 2019-09-27 17:38:18 2014
实现代理的方式很多种,流行的web服务器也大都有代理的功能,比如http://www.tornadoweb.cn用的就是nginx的代理功能做的tornadoweb官网的镜像。最近,我在开发一个移动运用(以下简称APP)的后台程序(Server),该运用需要调用到另一平台产品(Platform)的API。对于这个系统来说,可选的一种实现方式方式是APP同时跟Server&Platform两者交互;另一种则在Server端封装掉Platform的API,AP
系统 2019-09-27 17:38:17 2014
一个简易的TCP端口扫描器,使用python3实现。需求:扫描目标网站开放哪些端口号,将所有开放的端口号输出。分析:使用socket连接,如果连接成功,认为端口开放,如果连接失败,认为端口关闭(有可能端口开放但连接失败,这里简单认为端口不开放)使用到的库:socket,threading过程:先定义一个函数,对给定的(ip,port)进行扫描,看其是否能连接成功。deftcpPortScan(ip,port,openPort):sock=socket.so
系统 2019-09-27 17:55:41 2013
Python算术运算符以下假设变量a为10,变量b为20:运算符描述实例+加-两个对象相加a+b输出结果30-减-得到负数或是一个数减去另一个数a-b输出结果-10*乘-两个数相乘或是返回一个被重复若干次的字符串a*b输出结果200/除-x除以yb/a输出结果2%取模-返回除法的余数b%a输出结果0**幂-返回x的y次幂a**b输出结果20//取整除-返回商的整数部分9//2输出结果4,9.0//2.0输出结果4.0以下实例演示了Python所有算术运算符
系统 2019-09-27 17:55:21 2013
1.安装matplotlibpipinstallmatplotlib2.绘制简单图形importmatplotlib.pyplotasplt#图形输入值input_values=[1,2,3,4,5]#图形输出值squares=[1,4,9,16,25]#plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略plt.plot(input_values,squares,linewidth=5)#设置图标标题plt.title("Square
系统 2019-09-27 17:55:03 2013
问题1:如果日期中有千年以前的情况(没法用格式化函数),如('2010-11-23','1989-3-7','2010-1-5','978-12-1','2010-2-4')参照方法1问题2:如果日期中没有千年以前的情况,做法就很多了。参照方法2和方法3#-*-coding:utf-8-*-importtimefromoperatorimportitemgetterarr=('2010-11-23','1989-3-7','2010-1-5','978-1
系统 2019-09-27 17:54:50 2013
今天闲来无聊无意间看到了百度股票,就想着用python爬一下数据,于是就找到了东方财经网,结合这两个网站,写了一个小爬虫,数据保存在文件中,比较简单的示例,就当做用来练习正则表达式和BeautifulSoupl了。首先页面分析,打开东方财经网股票列表页,和百度股票详情页,右键查看网页源代码,网址后面的代码就是股票代码,所以打算先获取股票代码,然后获取详情,废话少说,直接上代码吧:importreimportrequestsfrombs4importBeau
系统 2019-09-27 17:54:39 2013
前言做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码的原理以及带大家实现一个滑动验证码。实际上这类验证码的校验是分为两个步骤的:1.第一步就是前端的校验。一般来说,登录注册页面在点击提交的时候都会伴随着一个表单提交,在表单提交的时候会有JavaScript事件的触发。如果加入了验证码,那么在表单提交的时候会多加一个额外的验证,判断这个验证码是否已经
系统 2019-09-27 17:54:32 2013