最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單的Python2.7編程初學經驗總結

 更新時間:2015年04月01日 14:54:36   作者:rustyrazorblade  
這篇文章主要是作者寫給Python2.7編程初學者的經驗總結,側重于包管理、代碼調試等實際使用方面,需要的朋友可以參考下

如果你從來沒有使用過Python,我強烈建議你閱讀Python introduction,因為你需要知道基本的語法和類型。
包管理

Python世界最棒的地方之一,就是大量的第三方程序包。同樣,管理這些包也非常容易。按照慣例,會在 requirements.txt 文件中列出項目所需要的包。每個包占一行,通常還包含版本號。這里有一個例子,本博客使用Pelican
 

pelican==3.3
Markdown
pelican-extended-sitemap==1.0.0

Python 程序包有一個缺陷是,它們默認會進行全局安裝。我們將要使用一個工具,使我們每個項目都有一個獨立的環(huán)境,這個工具叫virtualenv。我們同樣要安裝一個更高級的包管理工具,叫做pip,他可以和virtualenv配合工作。

首先,我們需要安裝pip。大多數python安裝程序已經內置了easy_install(python默認的包管理工具),所以我們就使用easy_install pip來安裝pip。這應該是你最后一次使用easy_install 了。如果你并沒有安裝easy_install ,在linux系統中,貌似從python-setuptools 包中可以獲得。

如果你使用的Python版本高于等于3.3, 那么Virtualenv 已經是標準庫的一部分了,所以沒有必要再去安裝它了。

下一步,你希望安裝virtualenvvirtualenvwrapper。Virtualenv使你能夠為每個項目創(chuàng)造一個獨立的環(huán)境。尤其是當你的不同項目使用不同版本的包時,這一點特別有用。Virtualenv wrapper 提供了一些不錯的腳本,可以讓一些事情變得容易。

sudo pip install virtualenvwrapper

當virtualenvwrapper安裝后,它會把virtualenv列為依賴包,所以會自動安裝。

打開一個新的shell,輸入mkvirtualenv test 。如果你打開另外一個shell,則你就不在這個virtualenv中了,你可以通過workon test 來啟動。如果你的工作完成了,可以使用deactivate 來停用。

201541144554964.jpg (477×181)

IPython

IPython是標準Python交互式的編程環(huán)境的一個替代品,支持自動補全,文檔快速訪問,以及標準交互式編程環(huán)境本應該具備的很多其他功能。

當你處在一個虛擬環(huán)境中的時候,可以很簡單的使用pip install ipython 來進行安裝,在命令行中使用ipython 來啟動

201541144637950.jpg (690×380)

另一個不錯的功能是”筆記本”,這個功能需要額外的組件。安裝完成后,你可以使用ipython notebook,而且會有一個不錯的網頁UI,你可以創(chuàng)建筆記本。這在科學計算領域很流行。

201541144705248.jpg (985×916)

測試

我推薦使用nose或是py.test。我大部分情況下用nose。它們基本上是類似的。我將講解nose的一些細節(jié)。

這里有一個人為創(chuàng)建的可笑的使用nose進行測試的例子。在一個以test_開頭的文件中的所有以test_開頭的函數,都會被調用:
 

def test_equality():
  assert True == False

不出所料,當運行nose的時候,我們的測試沒有通過。

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ nosetests                                                                   
F
======================================================================
FAIL: test_nose_example.test_equality
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/jhaddad/.virtualenvs/test/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
  self.test(*self.arg)
 File "/Users/jhaddad/.virtualenvs/test/src/test_nose_example.py", line 3, in test_equality
  assert True == False
AssertionError
 
----------------------------------------------------------------------

nose.tools中同樣也有一些便捷的方法可以調用
 

from nose.tools import assert_true
def test_equality():
  assert_true(False)

如果你想使用更加類似JUnit的方法,也是可以的:
 

from nose.tools import assert_true
from unittest import TestCase
 
class ExampleTest(TestCase):
 
  def setUp(self): # setUp & tearDown are both available
    self.blah = False
 
  def test_blah(self):
    self.assertTrue(self.blah)

開始測試:
 

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ nosetests                                                                   
F
======================================================================
FAIL: test_blah (test_nose_example.ExampleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/jhaddad/.virtualenvs/test/src/test_nose_example.py", line 11, in test_blah
  self.assertTrue(self.blah)
AssertionError: False is not true
 
----------------------------------------------------------------------
Ran 1 test in 0.003s
 
FAILED (failures=1)

卓越的Mock庫包含在Python 3 中,但是如果你在使用Python 2,可以使用pypi來獲取。這個測試將進行一個遠程調用,但是這次調用將耗時10s。這個例子顯然是人為捏造的。我們使用mock來返回樣本數據而不是真正的進行調用。
 

import mock
 
from mock import patch
from time import sleep
 
class Sweetness(object):
  def slow_remote_call(self):
    sleep(10)
    return "some_data" # lets pretend we get this back from our remote api call
 
def test_long_call():
  s = Sweetness()
  result = s.slow_remote_call()
  assert result == "some_data"

當然,我們的測試需要很長的時間。
 

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ nosetests test_mock.py                                                            
 
Ran 1 test in 10.001s
 
OK

太慢了!因此我們會問自己,我們在測試什么?我們需要測試遠程調用是否有用,還是我們要測試當我們獲得數據后要做什么?大多數情況下是后者。讓我們擺脫這個愚蠢的遠程調用吧:
 

import mock
 
from mock import patch
from time import sleep
 
class Sweetness(object):
  def slow_remote_call(self):
    sleep(10)
    return "some_data" # lets pretend we get this back from our remote api call
 
def test_long_call():
  s = Sweetness()
  with patch.object(s, "slow_remote_call", return_value="some_data"):
    result = s.slow_remote_call()
  assert result == "some_data"

好吧,讓我們再試一次:
 

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ nosetests test_mock.py                                                            
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
 
OK

好多了。記住,這個例子進行了荒唐的簡化。就我個人來講,我僅僅會忽略從遠程系統的調用,而不是我的數據庫調用。

nose-progressive是一個很好的模塊,它可以改善nose的輸出,讓錯誤在發(fā)生時就顯示出來,而不是留到最后。如果你的測試需要花費一定的時間,那么這是件好事。
pip install nose-progressive 并且在你的nosetests中添加--with-progressive
調試

iPDB是一個極好的工具,我已經用它查出了很多匪夷所思的bug。pip install ipdb 安裝該工具,然后在你的代碼中import ipdb; ipdb.set_trace(),然后你會在你的程序運行時,獲得一個很好的交互式提示。它每次執(zhí)行程序的一行并且檢查變量。

201541144752239.jpg (609×162)

python內置了一個很好的追蹤模塊,幫助我搞清楚發(fā)生了什么。這里有一個沒什么用的python程序:
 

a = 1
b = 2
a = b

這里是對這個程序的追蹤結果:
 

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ python -m trace --trace tracing.py                                                    1 ? 
 --- modulename: tracing, funcname: <module>
tracing.py(1): a = 1
tracing.py(2): b = 2
tracing.py(3): a = b
 --- modulename: trace, funcname: _unsettrace
trace.py(80):     sys.settrace(None)

當你想要搞清楚其他程序的內部構造的時候,這個功能非常有用。如果你以前用過strace,它們的工作方式很相像

在一些場合,我使用pycallgraph來追蹤性能問題。它可以創(chuàng)建函數調用時間和次數的圖表。

201541144830219.jpg (568×444)

最后,objgraph對于查找內存泄露非常有用。這里有一篇關于如何使用它查找內存泄露的好文。
Gevent

Gevent 是一個很好的庫,封裝了Greenlets,使得Python具備了異步調用的功能。是的,非常棒。我最愛的功能是Pool,它抽象了異步調用部分,給我們提供了可以簡單使用的途徑,一個異步的map()函數:
 

from gevent import monkey
monkey.patch_all()
 
from time import sleep, time
 
def fetch_url(url):
  print "Fetching %s" % url
  sleep(10)
  print "Done fetching %s" % url
 
from gevent.pool import Pool
 
urls = ["http://test.com", "http://bacon.com", "http://eggs.com"]
 
p = Pool(10)
 
start = time()
p.map(fetch_url, urls)
print time() - start

非常重要的是,需要注意這段代碼頂部對gevent monkey進行的補丁,如果沒有它的話,就不能正確的運行。如果我們讓Python連續(xù)調用 fetch_url 3次,通常我們期望這個過程花費30秒時間。使用gevent:
 

(test)jhaddad@jons-mac-pro ~VIRTUAL_ENV/src$ python g.py                                                                  
Fetching http://test.com
Fetching http://bacon.com
Fetching http://eggs.com
Done fetching http://test.com
Done fetching http://bacon.com
Done fetching http://eggs.com
10.001791954

如果你有很多數據庫調用或是從遠程URLs獲取,這是非常有用的。我并不是很喜歡回調函數,所以這一抽象對我來說效果很好。
結論

好吧,如果你看到這里了,那么你很可能已經學到了一些新東西。這些工具,在過去的一年里對我影響重大。找打它們花費了不少時間,所以希望本文能夠減少其他人想要很好利用這門語言需要付出的努力。

相關文章

  • 基于python實現從尾到頭打印鏈表

    基于python實現從尾到頭打印鏈表

    這篇文章主要介紹了基于python實現從尾到頭打印鏈表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python3實現倒計時效果

    python3實現倒計時效果

    這篇文章主要為大家詳細介紹了python3實現倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python生成器以及應用實例解析

    Python生成器以及應用實例解析

    這篇文章主要介紹了Python生成器以及應用實例解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 15個應該掌握的Jupyter Notebook使用技巧(小結)

    15個應該掌握的Jupyter Notebook使用技巧(小結)

    這篇文章主要介紹了15個應該掌握的Jupyter Notebook使用技巧(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 探索Python數據可視化庫中Plotly Express的使用方法

    探索Python數據可視化庫中Plotly Express的使用方法

    在數據分析和可視化領域,數據的有效呈現是至關重要的,python作為一種強大的編程語言,提供了多種數據可視化工具和庫,本文將介紹Plotly Express的基本概念和使用方法,幫助讀者快速入門并掌握數據可視化的技巧
    2023-06-06
  • 一個檢測OpenSSL心臟出血漏洞的Python腳本分享

    一個檢測OpenSSL心臟出血漏洞的Python腳本分享

    這篇文章主要介紹了一個檢測OpenSSL心臟出血漏洞的Python腳本,心臟出血漏洞是互聯網上的地震,看到的同學趕緊升級OpenSSL,避免黑客入侵
    2014-04-04
  • python如何獲取文件當前位置和定位某個位置

    python如何獲取文件當前位置和定位某個位置

    這篇文章主要介紹了python如何獲取文件當前位置和定位某個位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python開發(fā)之射擊闖關游戲的實現

    Python開發(fā)之射擊闖關游戲的實現

    這篇文章主要為大家詳細介紹了如何利用Python實現射擊闖關游戲,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • python實現數字華容道

    python實現數字華容道

    這篇文章主要為大家詳細介紹了python實現數字華容道,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python實時獲取外部程序輸出結果的方法

    python實時獲取外部程序輸出結果的方法

    今天小編就為大家分享一篇python實時獲取外部程序輸出結果的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

木兰县| 新野县| 佛冈县| 普宁市| 陵川县| 克东县| 大港区| 专栏| 保亭| 松江区| 郯城县| 韶山市| 筠连县| 淮安市| 太湖县| 武义县| 云和县| 栖霞市| 古交市| 两当县| 阳高县| 耒阳市| 北辰区| 贵溪市| 南通市| 右玉县| 夏津县| 仁怀市| 大城县| 浦城县| 临清市| 荔浦县| 肇源县| 新蔡县| 天津市| 阿鲁科尔沁旗| 兴海县| 贵州省| 阳原县| 文安县| 新巴尔虎左旗|