免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: timespace
打印 上一主题 下一主题

分享有礼:Python代码的魔鬼细节大比拼!(获奖名单已公布-2014-8-11) [复制链接]

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2014-07-17 20:22 |只看该作者
回复 21# pitonas

argv[1] 为空 报错~


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
22 [报告]
发表于 2014-07-18 10:28 |只看该作者
当然, 小伙伴们, 你说的没错, 是酱.

我想, 人们无论做出哪种选择. 都有着不同的追求, 于是我们做出了不同的选择, 写出不同的代码.
  1. len(sys.argv)
  2. sys.argv.__len__()
  3. c3 = 'Hello ' + (sys.argv[1] if sys.argv.__len__() > 1 else 'world')
复制代码
折腾出这类辊斤拷的代码, 等於摧残心灵. 真心感觉很难不会遭到 perl, ruby 的使用者嘲笑. 这看看就挺揪心的..

    (⊙0⊙) ~ 呃...头好晕..饭都吃不下去了...


作为 一个 Python 的 粉丝.
抱歉, 我也是 不能容忍, Python 这简约低调有内涵的语言夹杂这如此尼玛丑陋的代码...


嗯, 据说
Erlang 有一个哲学: Let it crash (随它崩溃)

在优美雅致与崩溃报错之间, 小伙伴们, 我的选择是:
小伙伴们, 就随它报错好了

Let it crash. let it be ~{:2_172:} {:2_172:}

回复 22# to407


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
23 [报告]
发表于 2014-07-18 20:24 |只看该作者
借用boto 调用Amazon AWS 的API来查询 EC2 的信息。
  1. #!/usr/bin/env python
  2. import boto.ec2
  3. import hashlib

  4. try:
  5.   conn = boto.ec2.connect_to_region ("us-east-1")
  6.   current_sgs = conn.get_all_security_groups()
  7. except boto.exception.BotoServerError, e:
  8.   log.error(e.error_message)
  9. conn.close()

  10. for sg in current_sgs:
  11.   print "="*72
  12.   print "id:\t\t", sg.id
  13.   print "name:\t\t", sg.name
  14.   print "vpc:\t\t", sg.vpc_id
  15.   print "instance:\t", sg.instances()
  16.   print "ingress rules:"
  17.   for rule in sg.rules:
  18.     ruledata = sg.id,rule.grants,rule.ip_protocol,rule.from_port,rule.to_port,"ingress"
  19.     rulehash=hashlib.sha256(str(ruledata)).hexdigest()
  20.     print "\thash:",rulehash
  21.     print "\t",rule.grants,"-> [instance]:",rule.from_port,"-",rule.to_port,rule.ip_protocol
  22.   print "egress rules:"
  23.   for rule in sg.rules_egress:
  24.     ruletuple = sg.id,rule.grants,rule.ip_protocol,rule.from_port,rule.to_port,"ingress"
  25.     rulehash=hashlib.sha256(str(ruletuple)).hexdigest()
  26.     print "\thash:",rulehash
  27.     print "\t[instance]->",rule.grants,":",rule.from_port,"-",rule.to_port,rule.ip_protocol
  28.   print "="*72
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
24 [报告]
发表于 2014-07-21 13:11 |只看该作者
老师的帖子,先顶个...

论坛徽章:
0
25 [报告]
发表于 2014-07-21 18:06 |只看该作者
pitonas 发表于 2014-07-17 12:51
俺个人来说, 是爱 Python 的! 他有很多迷人的地方.
就本人看来: python 这种语言十分优美, 十分低调, 和十 ...



为什么我把cs打印出来然后拿到命令行执行,什么都没有,而直接运行这个程序却有输出呢?

论坛徽章:
0
26 [报告]
发表于 2014-07-21 18:10 |只看该作者
原来是因为那个感叹号!

论坛徽章:
0
27 [报告]
发表于 2014-07-22 19:53 |只看该作者
本帖最后由 adaready 于 2014-07-22 20:00 编辑

前两天写的一个客户电子渠道多渠道签约新老**渠道签约信息合并的程序。
效率上一般吧,主要在python方便,几千万的数据也就是5-6分钟就跑完了,
比较符合我的期望。

注释的部分是原本期望将结果算好了再输出的,后来发现效率非常差(比现在
的版本要慢近10倍),所以只好在跑出结果的同时直接输出,算起来少了nlogn
的查找。
  1. #coding=gbk
  2. import sys

  3. G_CHN={}

  4. def ScanChnFile(fname):
  5.     fd=open(fname,'r')
  6.     line=''
  7.     while True:

  8.         v=[0,0,0]
  9.         flds=[]
  10.         line=fd.readline()
  11.         if line == "" : break
  12.         try:
  13.             flds=line.strip().split('|')
  14.             (chn_type,chn_cust_no)=(flds[0],flds[1])
  15.         except:
  16.             continue
  17.         if chn_cust_no in G_CHN:
  18.             v=G_CHN[chn_cust_no]
  19.         if chn_type=="01": v[0]|=1
  20.         if chn_type=="02": v[1]|=1
  21.         if chn_type=="05": v[2]|=1
  22.         
  23.         G_CHN[chn_cust_no]=v
  24.     fd.close()

  25. def RefineCHN():
  26.     idno,flag,keylen='','',0
  27.     it=G_CHN.iteritems()
  28.     while True:
  29.         try:
  30.             idno,flag='','N'
  31.             k,v=it.next()
  32.             keylen=len(k)
  33.             if keylen==15:
  34.                 idno=Id15to18(k)
  35.             if keylen == 18:
  36.                 idno=Id18to15(k)
  37.             if idno not in G_CHN: #15位或18位只有一条的情况
  38.                 flag='Y'
  39.             else:
  40.                 vv=G_CHN[idno]
  41.                 v[0]|=vv[0]
  42.                 v[1]|=vv[1]
  43.                 v[2]|=vv[2]
  44.                 if keylen==15: #原证件号15位且18位存在的情况下,只取18位那条
  45.                     flag='N'
  46.                 if keylen==18:
  47.                     flag='Y'
  48.             if flag=='Y':
  49.                 #print "%s|%d%d%d|%s|" % (k, v[0],v[1],v[2],idno)
  50.                 print '{KEY}|{V0}{V1}{V2}|{IDNO}'.format(KEY=k,V0=v[0],V1=v[1],V2=v[2],IDNO=idno)  
  51. #             if flag=='Y':
  52. #                 v.append((flag,idno))
  53. #             else:
  54. #                 v.append((flag,idno))           
  55. #             G_CHN[k]=v
  56.         except :
  57.             break

  58. def Id15to18(idno):
  59.     TailChars="10X98765432"
  60.     WI=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  61.     try:
  62.         id17=idno[:6]+"19"+idno[6:]
  63.         s=0
  64.         for i in range(len(id17)):
  65.             s+=int(id17[i])*WI[i]
  66.         return id17+TailChars[s%11]
  67.     except:
  68.         return idno

  69. def Id18to15(idno):
  70.     return idno[:6]+idno[8:17]


  71. if __name__=="__main__":
  72.     ScanChnFile(sys.argv[1])
  73.     RefineCHN()
  74. #     for (k,v) in G_CHN.items():
  75. #         net,mob,sms,flag,idno=v[0],v[1],v[2],v[3][0],v[3][1]
  76. #         if(flag=='Y'):
  77. #             print "%s|%d%d%d|%s|" % (k,net,mob,sms,idno)
复制代码

论坛徽章:
0
28 [报告]
发表于 2014-07-23 17:34 |只看该作者
本帖最后由 大海里的骆驼 于 2014-08-13 17:18 编辑

.........................

论坛徽章:
0
29 [报告]
发表于 2014-07-23 18:20 |只看该作者
  1. #coding:utf8
  2. import requests,cookielib,time,threading
  3. page = '---'
  4. def getPageToRequestsCookie(url=None):
  5.     """功能:通过requests的cookie的方式得到页面信息
  6.                    传入参数:url 需要得到的页面地址
  7.                     返回值:page 页面的信息
  8.     """  
  9.     cookie = ''
  10.     jar = cookielib.FileCookieJar(cookie)
  11.     r = requests.get(url, cookies=jar,headers={'Referer':url,"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20140624 Firefox/3.5"})
  12.     page =  r.content
  13.     return page
  14. def get_page_info(url=None):
  15.         """功能:得到详情页的源码, 出现异常使用递归方法调用5次
  16.                         传入参数:url 是单个产品平台地址
  17.                         返回值:page 产品详情页的源码
  18.         """
  19.         try:
  20.             page = getPageToRequestsCookie(url)
  21.         except:
  22.             time.sleep(5)
  23.             page = getPageToRequestsCookie(url)
  24.         return page
  25.    
  26. def get_page_main(product_url):
  27.         """进行获得页面源码方法进行监控
  28.                         传入参数:product_url
  29.         """
  30.         global page
  31.         try:
  32.             page = get_page_info(product_url)
  33.         except:
  34.             time.sleep(1)
  35.             page = get_page_info(product_url)
  36.             
  37. def thread_test(tHandle,timeout):
  38.         global page
  39.         tHandle.setDaemon(True)
  40.         tHandle.start()
  41.         tHandle.join(timeout)
  42.         time.sleep(1)
  43.         if page == '---':
  44.             page = 'thread victory~~'
  45.             
  46. def main_general_url(page_temp,url):
  47.         global page
  48.         page = page_temp
  49.         tcheck = threading.Thread(target=get_page_main,args =(url,))
  50.         caller = threading.Thread(target=thread_test,args=(tcheck,4,))
  51.         caller.start()
  52.         test_i= 0
  53.         while test_i < 20:
  54.             if page <> '---' :
  55.                 if page == 'thread victory~~':
  56.                     return page
  57.                     break
  58.                 else:
  59.                     return page
  60.                     break
  61.             elif test_i > 10:
  62.                 return 'thread victory~~'
  63.                 break   
  64.             time.sleep(1)
  65.             test_i += 1
  66.         return 'thread victory~~'
  67. if __name__ =='__main__':
  68.     page = '---'
  69.     url = 'http://www.baidu.com/'
  70.     print main_general_url(page,url)
复制代码
我是新人,碰巧做了爬虫学到了python,这个代码功能是抓取数据的。
简单介绍一下:我做的是监控“某宝”上的数据,需要频繁访问,有时间会遇到卡死,程序不报异常吗,但是一直卡中,类似于一种死循环,一直想能有一个监控的程序,如果卡死就返回一个特殊的字符串,想到了线程,但是python没有类似于杀死线程的机制,于是就写了一个这样的程序,代码写的很难可能,但是功能实现了,个人很有成就感,可能很拙劣,拿出来跟大家分享一下,如果有大神看到,能帮我改进一下,小弟感激不尽~~~
抛砖引玉~~支持这个活动

论坛徽章:
10
CU大牛徽章
日期:2013-09-18 15:20:48程序设计版块每日发帖之星
日期:2016-07-21 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:01技术图书徽章
日期:2014-10-14 16:00:43天蝎座
日期:2013-09-27 17:41:29CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58每日论坛发贴之星
日期:2016-07-21 06:20:00
30 [报告]
发表于 2014-07-23 21:43 |只看该作者

  1. import socket
  2. import ssl
  3. sock = ssl.wrap_socket(socket.socket())
  4. sock.connect(('192.168.1.100', 443))
  5. fmt = '''GET /?a=reg&%s HTTP/1.1\r\nUser-Agent: python-https-client\r\n\r\n'''
  6. dfmt = "n=%s&d=%s" % (n,d)
  7. data = fmt % (dfmt )
  8. sock.sendall(data)
复制代码
偶在Mac上要做个功能,又没动过xcode,所以就用python做个小工具,还可以做一个简单的编译。
python上访问https服务端,简单灵活方便

在web端的工具,php不能编译的问题太严重了,经费又不足以支持 c++写服务端,以后可能要以python为主了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP