python高級進階


title: python高級進階

參考文獻
  1. https://pythonguidecn.readthedocs.io/zh/latest/
  2. 廖雪峰: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431864715651c99511036d884cf1b399e65ae0d27f7e000
前言

我的文件目錄

  1. virtaulenv虛擬環境合集:

    $ cd ~/.virtualenvs
    
  2. python 工程文件夾

    $ cd PycharmProjects
    
  3. python3包路徑

    $ pip3 -V
    
  4. python 等安裝包路徑

    $ cd /usr/local/Cellar/python3
    $ cd /usr/local/bin/python3
    $ which python3
    /usr/local/bin/python3
    
  5. over

python入門最基本注意點
  1. 使用python3。熟練使用腳本安裝python。
  2. 使用virtaulenv。構建獨立的運行環境。
  3. 使用pycharm,pycharm中interpreter使用virtaulenv。構建優秀的調試和運行環境。
  4. 第三方庫練習。
python安裝
解決 同時安裝 python3,python2環境時,用pip安裝 python3 包
應用場景

默認mac上已經安裝了 python2; 而我又安裝了 python3,并使用 python3;

安裝了 pip 默認,pip安裝的包安裝在了 python2上了;

但是我想用 pip把安裝的包安裝在 python3上 ,所以如下解決方式;

1:在mac上先安裝 virtualenv

   $ sudo pip install virtualenv

2: 找到 python3的路徑;
   $ which python 
   $ /usr/bin
   $ which python3
   $ /usr/local/bin
   也不記得我是什么時候安裝以何種方式安裝過python3了。
   $ brew list 
   $ python3 ,可能是通過brew安裝在Mac上的

   默認 python2的路徑都在 /usr/lib/目錄下,但是python3的不在

   終端:which python3 發現python3 在 /usr/local/lib/目錄下

3:執行 virtualenv 命令,修改 pip的安裝路徑 到 python3上,此處是使用python3創建一個虛擬env,名字為py3env

    $ sudo virtualenv -p /usr/local/bin/python3 py3env

    $ source py3env/bin/activate

4:環境修改之后:

   查看變量修改是否成功

   $ pip -V

   $ pip 1.5.4 from /usr/bin/py3env/lib/python3.4/site-packages (python 3.4)

  看到結果: 后面出現了 python3的路徑,說明修改成功

5:安裝python3包程序

   $ pip install 包名,即可

個人目標:
研究一個月python,一個月java, 一個月Linux
 
pycharm

工欲善其事必先利其器。

使用pycharm 這款python IDE可以節約不少開發時間。有語法提示和簡潔優雅的界面,對開發而言,是非常省事的。

我使用 : http://idea.lanyus.com 這個Lisence server 破解了pycharm。

安裝python3&終端使用python3

使用brew 安裝python3,要方便省事。

安裝方法:http://www.lxweimin.com/p/51811fa24752

$ brew install python3
$ brew ls 
$ python3 
#如果python3無響應,則考慮到
$ echo $PATH
$ vi /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
默認python3在/usr/local/bin下,因此需要將/usr/local/bin放到最上面,zhs在尋找路徑時按照從上往下的路徑搜尋
#如果路徑正確,而python3還是沒有響應,則考慮刪除python3,brew uninstall python3,然后再次重新安裝

over

pyenv python多版本管理

有點像node的nvm。pyenv是Python的多版本管理工具。

參考:https://my.oschina.net/lionets/blog/267469

pyenv 是一個類 Unix 環境下的 Python 版本管理工具。

Linux上安裝 pyenv需要做些準備工作,然后才能用curl安裝

$ yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel 
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
我在默認路徑安裝:
$ which pyenv 
$ /root/.pyenv/bin/pyenv
$ 該文檔建議安裝在$HOME/.pyenv路徑下
$ 安裝完畢后,系統提示需要添加環境變量:
WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bash_profile:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

$ 結合該文檔。我們添加如下參數:
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

并重啟shell
$ exec $SHELL
最后發現無效,所以嘗試退出服務器, exit ,重新登錄服務器才生效

over

virtualenv 小魔法

參考:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000

python實踐: https://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html#virtualenv

jinja2: http://docs.jinkan.org/docs/jinja2/intro.html#id2

每個應用可能需要各自擁有一套“獨立”的Python運行環境。virtualenv就是用來為一個應用創建一套“隔離”的Python運行環境。
$ pip3 install virtualenv 
$ pip3 list 
然后,假設我們開發一個新的項目,需要一套獨立的Python運行環境,可以這么做:
$ mkdir pythonproject_1
$ cd pythonproject_1
pythonproject_1 $ virtualenv --no-site-packages venv (創建一個獨立的Python運行環境,命名為venv)

先激活虛擬環境:
$ source venv/bin/activate 

命令virtualenv就可以創建一個獨立的Python運行環境,我們還加上了參數--no-site-packages,這樣,已經安裝到系統Python環境中的所有第三方包都不會復制過來,這樣,我們就得到了一個不帶任何第三方包的“干凈”的Python運行環境

在venv環境下,用pip安裝的包都被安裝到venv這個環境下,系統Python環境不受任何影響。也就是說,venv環境是專門針對myproject這個應用創建的。

退出venv環境:
$ deactivate 

在激活的條件下
$  pip install jinja2
并且調試:
>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')
'Hello John Doe!
virtualenv基本用法
  1. 參考文獻

    https://virtualenv.pypa.io/en/stable/userguide/

    ?

  2. 創建

    $ virtualenv ENV   #創建虛擬環境
    ENV/lib ENV/include ENV/lib/pythonX.X/site-packages/ 安裝的第三方庫列表
    $(py3env_test) ?  source bin/activate #activate script
    $(py3env_test) ?  deactivate 
    
    
  3. The --system-site-packages Option

    If you build with virtualenv --system-site-packages ENV, your virtual environment will inherit packages from /usr/lib/python2.7/site-packages (or wherever your global site-packages directory is).
    
  4. over

virtualenvwrapper安裝

參考文獻:https://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html#virtualenv

  1. 安裝(確保virtualenv已經安裝)

    $ pip install virtualenvwrapper
    $ export WORKON_HOME=~/Envs
    $ source /usr/local/bin/virtualenvwrapper.sh
    
  2. ?

python requests框架
$ 使用virtualenv 建立虛擬環境
$ sudo pip install requests
$ python3 
>>> import requests
>>> r = requests.post('https://api.yirimao.com/activity/get-newest-activity')
>>> print(r.text)
一堆json數據
python框架Pillow
$ pip install Pillow

$ python3
>>> from PIL import Image
>>> im = Image.open('/Users/yxt/Desktop/launch.jpg')
>>> print(im.format, im.size, im.mode)
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('/Users/yxt/Desktop/999/thumb.jpg', 'JPEG')

//先要創建/Users/yxt/Desktop/999文件夾
bin/ ,usr/bin, usr/local/bin模塊

和usr/local/bin模塊的區別:http://blog.csdn.net/csfreebird/article/details/48804797

/bin 存放系統管理員和普通用戶都要使用的程序。

/sbin 存放用于系統恢復,系統啟動,系統維護等程序

/usr/bin 登錄用戶可以使用的預裝程序一般都放在這里

/usr/share/bin 可以通過web訪問的程序一般放在這里

local 目錄下的都不是系統預裝,而是手動編譯或者安裝的程序

usr 指 Unix System Resource,而不是User

  • /usr/bin里面的都是系統預裝的可執行程序,會隨著系統升級而升級

  • /usr/local/bin目錄是給用戶放置自己的可執行程序的地方,推薦放在這里,不會被系統升級而覆蓋同名文件

  • 如果兩個目錄下有相同的可執行程序,誰優先執行受到PATH環境變量的影響,比如我的一臺服務器的PATH變量為:

    $ echo $PATH  
    $ /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/dean/bin  
    這里/usr/local/bin優先于/usr/bin, 一般都是如此。
    
  • /lib目錄都是為/bin, /sbin準備的,一般作為開發者不用關心

    /lib , /usr/lib , /usr/local/lib

    開發者需要關心下面的事情,一個應用程序啟動的時候,會在/lib 和 /usr/lib庫中查找動態庫,如果動態庫沒有放在此處,需要用環境變量LD_LIBRARY_PATH指定。比如在程序啟動腳本中這樣寫,就能在/usr/local/lib目錄中加載到自己放進去的動態庫.

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 
    注意,這是運行時的環境變量,和程序編譯時沒有關系。
    
  • 阿帆

CentOS安裝git

在centos上安裝git:https://my.oschina.net/antsky/blog/514586

圖方便,使用 yum install git .

也可以使用apt-get安裝,但是centos本機沒有安裝apt-get。

$ git --version 
$ git 
安裝pyenv python多版本管理工具

Django框架學習

菜鳥教程:http://www.runoob.com/django/django-first-app.html


pycharm使用總結

pycharm是一款非常好用的python開發IDE。

幾個比較喜歡的細節點記錄如下:

  1. 創建項目的時候可以選擇python版本。目前我的python版本全部(除系統自帶版本外)用brew管理。brew會將安裝好的版本放置在 usr/local/Cellar:

    $ pip -V
    pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
    $ pip3 -V
    pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
    $ which python3
    /usr/local/bin/python3
    
    

    over

    ?

  2. 自帶Debug和斷點功能,那只小蟲就是斷點debug功能。

  3. 研究IDE。要像Xcode一樣。

pycharm使用virtualenv

參考文獻:

https://segmentfault.com/a/1190000003758895

具體操作:

  1. 打開Pycharm / Preference / Project Interpreter
  2. 點擊該界面的最右側的一個鋸齒形狀的按鈕 ,在下拉列表中有個 "Create VirtualEnv" 選項
  3. 在彈出的對話框中輸入要配置的環境信息:
    1.1 Name中輸入名稱,如flask
    1.2 Location選擇:選擇配置好的virtualenv的默認目錄
  4. 創建項目。
  5. 我創建的項目virtaulenv合集位于:~/.virtualenvs 目錄下
  6. 目前我使用的virtualenv是 py3env_test ,直接選擇more,然后選擇這個env就好
  7. 修改virtaulenv目錄,比如下載requests包,可以放到這個虛擬目錄下。
  8. 運行項目。點運行項目會默認讓你去構建。
  9. 運行項目(需要構建configuration):http://ilaotan.github.io/2015/08/24/python-virtualEnv-pycharm.html
pycharm開發筆記
  1. 使用virtaulenv,可以避免系統庫被污染。直接創建virtaulenv。
  2. 可以運行run和調試debug python腳本
Flask web開發筆記

參考文獻:http://www.lxweimin.com/p/6dce773cb6b8

廖雪峰: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140262673295076f525af00734a8e924c5fc6ff5b6091000

  1. 使用方式

    nginx + gunicorn + flask
    
  2. 使用虛擬virtaulenv,通過pycharm創建項目和python類型的腳本。然后選擇~/.virtualenvs/newEnv 虛擬環境。然后構建python腳本的運行環境。

  3. source bin/activate 開啟虛擬環境

  4. 安裝python web 框架 —flask

    (newEnv) ? pip install flask
    
    
  5. 測試flask是否安裝成功

    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def index():
        return 'hello world'
    if __name__ == '__main__':
        app.debug = True
        app.run()
    
  6. 啟動flask

    本項目直接在pycharm構建運行即可。
    此時,用瀏覽器訪問 http://127.0.0.1:5000 就能看到網頁顯示hello world。
    
  7. 使用gunicorn 部署python web

    (newEnv) ?  pip install gunicorn
    
  8. pip freeze

    pip 是一個重要的工具,python 用來管理包。還有一個最佳生產就是每次使用 pip 安裝的庫,都寫入一個 requirement 文件里面,既能知道自己安裝了什么庫,也方便別人部署時,安裝相應的庫。

    (newEnv) ?  pip freeze > requirements.txt
    
  9. 啟動gunicorn

    通過上面的步驟已經在虛擬環境中裝好了gunicorn。gunicorn具體的參考文獻為:http://gunicorn.org/ 非常明了! 于是我新建了一個yy.python 文件,并且在終端嘗試連接:

    $  gunicorn -w 4 -b127.0.0.1:8000 yy:app 
    
    (newEnv) ?  firtPycharmProject gunicorn -w 4 -b127.0.0.1:8000 yy:app 
    [2017-04-14 00:13:47 +0800] [58319] [INFO] Starting gunicorn 19.7.1
    [2017-04-14 00:13:47 +0800] [58319] [INFO] Listening at: http://127.0.0.1:8000 (58319)
    [2017-04-14 00:13:47 +0800] [58319] [INFO] Using worker: sync
    [2017-04-14 00:13:47 +0800] [58322] [INFO] Booting worker with pid: 58322
    [2017-04-14 00:13:47 +0800] [58323] [INFO] Booting worker with pid: 58323
    [2017-04-14 00:13:47 +0800] [58324] [INFO] Booting worker with pid: 58324
    [2017-04-14 00:13:47 +0800] [58325] [INFO] Booting worker with pid: 58325
    ^C[2017-04-14 00:14:10 +0800] [58319] [INFO] Handling signal: int
    [2017-04-14 00:14:10 +0800] [58322] [INFO] Worker exiting (pid: 58322)
    [2017-04-14 00:14:10 +0800] [58325] [INFO] Worker exiting (pid: 58325)
    [2017-04-14 00:14:10 +0800] [58324] [INFO] Worker exiting (pid: 58324)
    [2017-04-14 00:14:10 +0800] [58323] [INFO] Worker exiting (pid: 58323)
    [2017-04-14 00:14:10 +0800] [58319] [INFO] Shutting down: Master
    
  10. 安裝Nginx

$ brew intall nginx 
$ nginx #啟動nginx 
$ lsof -i tcp:8080 #查看8080端口是否被占用
$ kill PID #根據進程號殺死進程
$ sudo killall nginx #強制退出Nginx
$ /usr/local/etc/nginx/nginx.conf              #nginx 的配置文件                 
$ /usr/local/Cellar/nginx/1.10.1/bin/nginx     #啟動nginx的路徑
  1. 啟動pythonweb.py

    以上步驟完成以后,我們想通過flask 框架,gunicorn工具連接pythonweb.py文件。這個是運行結果。在瀏覽器中打開端口發現成功調取數據!

    (newEnv) ?  firtPycharmProject gunicorn -w 4 -b127.0.0.1:8080 pythonweb:app 
    
    [2017-04-14 00:26:59 +0800] [58552] [INFO] Starting gunicorn 19.7.1
    [2017-04-14 00:26:59 +0800] [58552] [INFO] Listening at: http://127.0.0.1:8080 (58552)
    [2017-04-14 00:26:59 +0800] [58552] [INFO] Using worker: sync
    [2017-04-14 00:26:59 +0800] [58555] [INFO] Booting worker with pid: 58555
    [2017-04-14 00:26:59 +0800] [58556] [INFO] Booting worker with pid: 58556
    [2017-04-14 00:26:59 +0800] [58557] [INFO] Booting worker with pid: 58557
    [2017-04-14 00:26:59 +0800] [58558] [INFO] Booting worker with pid: 58558
    
  2. overf

python安裝

Mac系統自帶python2.7,Mac下很多軟件如xcode-build等依賴該版本的python,所以千萬不要刪除這個版本的python。

誤刪python2.7急救

如果你sb到誤刪了該版本的python,你會發現你連Xcode都無法打開了

其實不要慌,只需要重新到python官網下一個python2.7安裝就好了。嘻嘻。

實在不行,將剛安裝的2.7移動到原來的python2.7的位置。祝你好運。

sudo mv /Library/Frameworks/Python.framework/Versions/3.4 /System/Library/Frameworks/Python.framework/Versions 
pyenv

pyenv是python的版本管理工具,類似node的nvm。

https://github.com/yyuu/pyenv

$ brew install pyenv
今天安裝pyenv時報錯,于是先更新brew
$ sudo brew upgrade
//pyenv 常用命令
$ pyenv --help
$ pyenv --versions
$ pyenv install 3.4.5
//安裝失敗的原因:
安裝失敗是常有的事情,或者是make install失敗,編譯失敗。
選一個低一點的版本的python重新安裝。
python基本語法
1.切片、列表生成器    
classmates = ['chiller', 'tom', 'mm']
print(classmates[0:2])
print([x * x for x in range(1,11)])
2.生成器
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b , a+b
        n = n+1
    return 'done'

f = fib(5)
print(next(f))
3.高階函數
函數名是變量
4.map\reduce
def f(x):
    return x*x

r = map(f, [1,2,3,4,5])
print(list(r))
5.functools.partial將某些函數的參數固定住,返回一個新的函數。
6.*args和**kw參數
7.一個包要成為包,該目錄下必須有__init__.py的文件,否則python會把這個目錄當成普通目錄。__init__.py可以是空文件,也可以有Python代碼,因為__init__.py本身就是一個模塊,而它的模塊名就是mycompany。
8. __slots__限制實例的屬性
9. 用get_name和set_name的方式給類的屬性設置存取方法。
class Student(object):
    def get_name(self):
        return self._score
    def set_name(self,value):
        self.name = value

 s = Student()
 s.set_name('gaolong')
 s.get_name()#galong 
10.裝飾器給類定義屬性
class Student(object):
    @property
    def score(self):
        return self._score
    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be integer')
        if value < 0 or value > 100:
            raise ValueError('score must between 0~100')
        self._score = value
s = Student()
s.score = 90
print(s.score)
11.只定義getter,不定義setter方法就是只讀屬性
12.多繼承與Minxin
class Bat(Mammal, Flyable)
      pass
既集成Mammal,又集成Flayble
MinXin:
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
    pass
Python自帶了TCPServer和UDPServer這兩類網絡服務,而要同時服務多個用戶就必須使用多進程或多線程模型,這兩種模型由ForkingMixIn和ThreadingMixIn提供。
13.定制類
__str__ :打印類信息
__iter__:循環
__getattr__:調用不存在的屬性時,避免報錯
__call__:直接在實例本身調用方法
14.使用枚舉類
15.使用元類:運行時
type():可以查看一個類型或者變量的類型,我們說class的定義就是在運行時動態創建的,而創建的class的方法就是使用type()函數。
Hello = type('Hello', (object,), dict(hello=fn))
16.操作文件和目錄
17.序列化
可存儲和可傳輸
我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling。
json:不同語言之間傳遞對象必須把對象序列化成標準格式,如XML\JSON

pycharm引入第三方庫

file-->default Settings-->Project interpreter-->python3.5-->+選擇available packages導入第三方庫。比起pip導入和管理第三方庫更加簡便。

$ cd /Users/gaolong/Library/Python/3.5/lib/python/site-packages
$ cd /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages

//報錯,導入aiohttp或者beautifulsoup4
導入第三方庫時發現包的地址位置不對,實際導入的位置在上面那個文件夾中,而pycharm/site-packages文件夾下并沒有這個我導入的第三方庫。
需要在 project interpreter-->show all-->左下角的show path for interpreter改變地址,選擇我們的pycharm的地址。記住點擊OK要用力。
//環境配置的根本在于路徑?。?!
//shell編程的根本在于路徑

import aiohttp
如果上一句不報錯就是導入成功了。
python爬蟲學習

python的主攻方向有網絡編程、數據處理、web后臺開發等,個人主攻python的爬蟲方向,并且首先熟悉python語法,為python做自動化處理,為提高工作效率做準備。

#encoding:UTF-8
import urllib.request

url = "http://www.baidu.com"
data = urllib.request.urlopen(url).read()
data = data.decode('UTF-8')
print(data)
上述是一個簡單的爬蟲,爬取指定頁面的數據。
python基本庫的學習

python提供大量的內置庫學習

1.with as 語句與try except finally語句
with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
    data = f.read()
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s,: %s' % (k, v))
    print('Data:', data.decode('utf-8'))
with as 語句會將函數返回結果給后面的as 執行!python執行with as時會調用__enter__函數,然后把該函數return的值傳給as后指定的變量。
//post請求
post請求需要傳輸大量的參數和header
//Handler,通過Proxy去訪問網站。

Python網絡編程

網絡通訊其實就是兩個進程之間的通訊

1.互聯網最重要的協議是TCP/IP協議

通信的時候,雙方必須知道對方的標識,好比發郵件必須知道對方的郵件地址?;ヂ摼W上每個計算機的唯一標識就是IP地址,類似123.123.123.123。如果一臺計算機同時接入到兩個或更多的網絡,比如路由器,它就會有兩個或多個IP地址,所以,IP地址對應的實際上是計算機的網絡接口,通常是網卡。

IP協議負責把數據從一臺計算機通過網絡發送到另一臺計算機。數據被分割成一小塊一小塊,然后通過IP包發送出去。由于互聯網鏈路復雜,兩臺計算機之間經常有多條線路,因此,路由器就負責決定如何把一個IP包轉發出去。IP包的特點是按塊發送,途徑多個路由,但不保證能到達,也不保證順序到達。

IP地址實際上是一個32位整數(稱為IPv4),以字符串表示的IP地址如192.168.0.1實際上是把32位整數按8位分組后的數字表示,目的是便于閱讀。

IPv6地址實際上是一個128位整數,它是目前使用的IPv4的升級版,以字符串表示類似于2001:0db8:85a3:0042:1000:8a2e:0370:7334。

TCP協議則是建立在IP協議之上的。TCP協議負責在兩臺計算機之間建立可靠連接,保證數據包按順序到達。TCP協議會通過握手建立連接,然后,對每個IP包編號,確保對方按順序收到,如果包丟掉了,就自動重發。

許多常用的更高級的協議都是建立在TCP協議基礎上的,比如用于瀏覽器的HTTP協議、發送郵件的SMTP協議等。

一個IP包除了包含要傳輸的數據外,還包含源IP地址和目標IP地址,源端口和目標端口。

端口有什么作用?在兩臺計算機通信時,只發IP地址是不夠的,因為同一臺計算機上跑著多個網絡程序。一個IP包來了之后,到底是交給瀏覽器還是QQ,就需要端口號來區分。每個網絡程序都向操作系統申請唯一的端口號,這樣,兩個進程在兩臺計算機之間建立網絡連接就需要各自的IP地址和各自的端口號。

一個進程也可能同時與多個計算機建立鏈接,因此它會申請很多端口。
//tcp是建立可靠連接、并且通訊雙方都可以以流的形式發送數據,相對TCP 、UDP則是面向無連接的協議。
 //使用UDP協議時,不需要建立連接,只需要知道對方的IP地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。
 //雖然用UDP傳輸數據不可靠,但它的優點是和TCP比,速度快,對于不要求可靠到達的數據,就可以使用UDP協議
  
綁定數據庫

為了便于程序保存和讀取數據,而且能直接通過條件快速查詢到指定的數據,就出現了數據庫。

HTTP協議
1.Request Header
GET / HTTP/1.1
GET表示一個讀取請求,將從服務器獲取網頁數據,/表示URL的路徑,URL總是以/開頭,/就表示首頁,最后的HTTP/1.1指示采用的HTTP協議版本是1.1。目前HTTP協議的版本就是1.1,但是大部分服務器也支持1.0版本,主要區別在于1.1版本允許多個HTTP請求復用一個TCP連接,以加快傳輸速度。
Host:www.sina.com.cn
 表示請求的域名是www.sina.com.cn。
HTTP響應分為Header和Body兩部分(Body是可選項),我們在Network中看到的Header最重要的幾行如下:
    200 OK
    
堆棧、堆、棧的區別

python中有個語法是尾遞歸優化,遞歸需要很多內存空間,存儲局部變量的值,所以容易導致棧溢出。系統給每個進程分配的??臻g是2M,32位系統。

參考文獻:http://www.cppblog.com/oosky/archive/2006/01/21/2958.html

一個由c/C++編譯的程序占用的內存分為以下幾個部分:

  1. 棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。
  2. 堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。
  3. 全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放
  4. 文字常量區—常量字符串就是放在這里的。 程序結束后由系統釋放
  5. 程序代碼區—存放函數體的二進制代碼。
2.1申請方式 
stack: 
由系統自動分配。 例如,聲明在函數中一個局部變量 int b; 系統自動在棧中為b開辟空間 
heap: 
需要程序員自己申請,并指明大小,在c中malloc函數 
如p1 = (char *)malloc(10); 
在C++中用new運算符 
如p2 = (char *)malloc(10); 
但是注意p1、p2本身是在棧中的。 
utf-8編碼和Unicode編碼的區別

oo

參考文檔
  1. http://www.yiibai.com/python/python3-webbug-series1.html
  2. http://www.cnblogs.com/xin-xin/p/4297852.html

python每日實戰練習

參考文獻:
  1. https://github.com/Yixiaohan/show-me-the-code
  2. https://www.zhihu.com/question/29372574
  3. http://www.aosabook.org/en/500L/blockcode-a-visual-programming-toolkit.html
000將圖片或者頭像加一段文字

http://www.aosabook.org/en/500L/blockcode-a-visual-programming-toolkit.html

from PIL import Image, ImageDraw, ImageFont
 
def add_num(img):
    draw = ImageDraw.Draw(img)
    myfont = ImageFont.truetype('C:/windows/fonts/Arial.ttf',size=20)
    fillcolor = "#ff0020"
    width, heigth = img.size
    draw.text((width-40, 0), "lizhixin", font=myfont, fill=fillcolor)
    img.save('result.jpg','jpeg')
 
    return 0
 
if __name__ == '__main__':
    image = Image.open('image.jpg')
    add_num(image)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容