成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

正群調整Python 編寫速度

開發 后端
Python 編寫的速度的確很慢;慢的程度不止是“我希望能快一點點”,而是“吃了一頓長時間的午餐還希望它能快點結束”的程度。

Spark 是一種用 Python 編寫的強大的、通用的解析器/編譯器框架。在某些方面,Spark 所提供的比 SimpleParse 或其它 Python 解析器提供的都要多,下面進行學習研究。

然而,因為它完全是用 Python 編寫的,所以速度也會比較慢。David 在本文中討論了 Spark 模塊,給出了一些代碼樣本,解釋了它的用途,并對其應用領域提供了一些建議。本文中會介紹一些解析的基本概念,并對 Spark 模塊進行了討論。解析框架是一個內容豐富的主題,它值得我們多花時間去全面了解;

這兩篇文章為讀者和我自己都開了一個好頭。在日常的編程中,我經常需要標識存在于文本文檔中的部件和結構,這些文檔包括:日志文件、配置文件、定界的數據以及格式更自由的(但還是半結構化的)報表格式。所有這些文檔都擁有它們自己的“小語言”,用于規定什么能夠出現在文檔內。我編寫這些非正式解析任務的程序的方法總是有點象大雜燴。

其中包括定制狀態機、正則表達式以及上下文驅動的字符串測試。這些程序中的模式大概總是這樣:“讀一些文本,弄清是否可以用它來做些什么,然后可能再多讀一些文本,一直嘗試下去。”

解析器將文檔中部件和結構的描述提煉成簡明、清晰和說明性的規則,確定由什么組成文檔。大多數正式的解析器都使用擴展巴科斯范式(Extended Backus-Naur Form,EBNF)上的變體來描述它們所描述的語言的“語法”。

基本上,EBNF 語法對您可能在文檔中找到的部件賦予名稱;另外,較大的部件通常由較小的部件組成。小部件在較大的部件中出現的頻率和順序由操作符指定。舉例來說,清單 1 是 EBNF 語法 typographify.def,我們在 SimpleParse 那篇文章中見到過這個語法(其它工具運行的方式稍有不同):

  1. #-*- encoding: gb2312 -*-  
  2. import quopri  
  3.  
  4. a = "only a test數據" 
  5. b = quopri.encodestring(a) # 對字符串編碼  
  6. print b  
  7. print quopri.decodestring(b) # 對字符串解碼  
  8.  
  9. import StringIO  
  10.  
  11. c = StringIO.StringIO()  
  12. d = StringIO.StringIO()  
  13. e = StringIO.StringIO()  
  14.  
  15. c.write(a)  
  16. c.seek(0)  
  17.  
  18. quopri.encode(c, d, 0)  # 編碼StringIO中的數據, 第三個參數0表示不對空格和tab符號編碼,為1表示進行編碼  
  19. print d.getvalue()  
  20. d.seek(0)  
  21. quopri.decode(d, e)  # 解碼StringIO中的數據  
  22. print e.getvalue()  
  23.  
  24. f1 = open("aaa.txt", "w")  
  25. f1.write(a)  
  26. f1.close()  
  27.  
  28. f1 = open("aaa.txt", "r")  
  29. f2 = open("bbb.txt", "w")  
  30.  
  31. quopri.encode(f1, f2, 0) # 編碼aaa.txt中的數據到bbb.txt  
  32.  
  33. f1.close()  
  34. f2.close()  
  35.  
  36. print open("bbb.txt", "r").read() 

這里有一個有趣的地方。WordScanner 本身是一個完美的掃描程序類;但 Spark 掃描程序類本身可以通過繼承進一步特化:子正則表達式模式在父正則表達式之前匹配,而如果需要,子方法/正則表達式可以覆蓋父方法/正則表達式。

所以,WordPlusScanner 將在 WordScanner 之前對特化進行匹配(可能會因此先獲取一些字節)。模式文檔字符串中允許使用任何正則表達式(舉例來說,.t_contraction() 方法包含模式中的一個“向后插入”)。查找記號的確有一點意思,但真正有意思的是如何向記號列表應用語法。解析階段在記號列表的基礎上創建任意的樹結構。它只是指定了表達式語法而已。

Spark 有好幾種創建 AST 的方法。“手工”的方法是特化 GenericParser 類。在這種情況下,具體子解析器會提供很多方法。方法名的形式為 p_foobar(self, args)。每個這樣的方法的文檔字符串都包含一個或多個模式到名稱的分配。只要語法表達式匹配,每種方法就可以包含任何要執行的代碼。

【編輯推薦】

  1. 有關Python系統文件進行介紹指導
  2. 如何正確的使用Python函數
  3. 對Python 構建工具進行詳細介紹分析
  4. PythonAndroid淺析Python優勢所在
  5. 如何使用Python模塊解析配置文件?
責任編輯:chenqingxiang 來源: 51cto.com
相關推薦

2010-02-06 14:59:37

Android程序

2014-04-08 16:54:27

移動應用運營

2022-05-25 16:31:25

數據泄露勒索軟件網絡攻擊

2021-10-19 10:03:06

Windows 功能系統

2025-06-10 02:33:00

RustPython庫代碼

2021-07-07 15:27:48

5G運營商網絡

2023-12-12 11:38:56

聊天機器人ChatGPTOpenAI

2020-04-30 21:25:33

Python 函數程序員

2021-10-12 15:15:01

深度學習神經網絡人工智能

2024-03-11 15:47:11

RustPython代碼

2021-01-11 13:20:06

Python圖像大小編程語言

2013-09-27 10:26:49

騰訊架構調整

2021-06-18 15:15:51

機器學習Rust框架

2023-01-13 18:10:17

Windows 11微軟

2022-03-03 15:05:46

微軟Windows 11

2020-09-30 08:32:40

Python

2021-02-20 09:27:36

Python編程語言機器學習

2010-02-02 18:20:43

Python編寫

2010-02-03 13:55:51

Python 代碼

2023-12-18 18:58:54

Python類型提示代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 草久视频 | 国产传媒毛片精品视频第一次 | 亚洲欧美bt| aaaaaaa片毛片免费观看 | 国户精品久久久久久久久久久不卡 | 精品日韩 | 日本在线小视频 | 精品欧美一区二区在线观看欧美熟 | 国产亚洲人成a在线v网站 | 日韩视频一区二区在线 | 亚洲天堂久久 | 日本欧美黄色片 | 天天射网站 | 黄视频网站在线 | 欧美一区二 | 一区二区视频免费观看 | 欧美成人精品一区二区男人看 | 91精品一区 | 精品久久久久久一区二区 | 亚洲另类春色偷拍在线观看 | 亚洲成人午夜在线 | 久久涩涩| 在线精品观看 | 日本精品一区二区三区在线观看视频 | 久久久久综合 | 九九热在线视频观看这里只有精品 | 久久大陆 | 久久久久久久一区二区三区 | 国产一区二区在线视频 | 午夜av在线 | 夜夜爽99久久国产综合精品女不卡 | 婷婷91| 国产精品一区久久久 | 欧美激情综合 | 国产91久久久久蜜臀青青天草二 | 日韩一区二区三区在线视频 | 天堂av免费观看 | 三级免费| 日韩一区二区三区av | 最新中文字幕一区 | av无遮挡 |