Python基礎01-20160508

1、Python簡介html

1.1 Python介紹java

Python的創始人:Guido van Rossumpython

最新的TIOBE排行榜:http://www.tiobe.com/tiobe_index
linux


1.2 Python應用c++

Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

目前Python主要應用領域:
雲計算: 雲計算最火的語言, 典型應用OpenStack
WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系統運維: 運維人員必備語言
金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
圖形GUI: PyQT, WxPython,TkInter

Python在一些公司的應用:
谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
CIA: 美國中情局網站就是用Python開發的
NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
YouTube:世界上最大的視頻網站YouTube就是用Python開發的
Dropbox:美國最大的在線雲存儲網站,所有用Python實現,天天網站處理10億個文件的上傳和下載
Instagram:美國最大的圖片分享社交網站,天天超過3千萬張照片被分享,所有用python開發
Facebook:大量的基礎庫均經過Python實現的
Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
豆瓣: 公司幾乎全部的業務均是經過Python開發的
知乎: 國內最大的問答社區,經過Python開發(國外Quora)
春雨醫生:國內知名的在線醫療網站是用Python開發的
除上面以外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各類各樣的任務。
web

1.3 Python解釋器shell

1)Cpython(官方)
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。CPython是使用最廣的Python解釋器。

2)IPython
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。

3)PyPy
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。

4)Jython
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。

5)IronPython
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。

小結:
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。

vim

2、Python發展歷史windows

1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。
Granddaddy of Python web frameworks, Zope 1 was released in 1999
Python 1.0 - January 1994 增長了 lambda, map, filter and reduce.
Python 2.0 - October 16, 2000,加入了內存回收機制,構成了如今Python語言框架的基礎
Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
Python 2.5 - September 19, 2006
Python 2.6 - October 1, 2008
Python 2.7 - July 3, 2010
In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
Python 3.0 - December 3, 2008
Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
Python 3.3 - September 29, 2012
Python 3.4 - March 16, 2014
Python 3.5 - September 13, 2015瀏覽器


3、Python 2.X vs Python 3.X

3.1 概述

Python 2.7 是一個過渡版本

Python 3.x 是長期版本


3.2 詳細差別

1)編碼問題 Python3.x無需再特地指定UTF-8,默認支持UTF-8編碼

2)print函數區別

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello World"
Hello World
>>>

C:\Users\Administrator>python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello World"
  File "<stdin>", line 1
    print "Hello World"
                      ^
SyntaxError: Missing parentheses in call to 'print'
>>> print("Hello World")
Hello World

3)某些庫更名了

4)用戶輸入

Python 2.x:raw_input
Python 3.x:input

5)1/2問題

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0
>>>
C:\Users\Administrator>python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0.5

6)class定義

7)性能
Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認爲Py3.0有極大的優化空間,在字符串和×××操做上可
以取得很好的優化結果。
Py3.1性能比Py2.5慢15%,還有很大的提高空間。

8)range()

Python 2.x
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(range(10))
<type 'list'>

Python 3.x
>>> range(10)
range(0, 10)
>>> type(range(10))
<class 'range'>



4、Python安裝

4.1 安裝介紹

詳見:http://madsstudy.blog.51cto.com/6249249/1770483


4.2 使用建議

Window 下開發工具較多,優先在Windows環境開發

Linux環境適用於代碼調試和簡單的運維腳本編寫


5、第一個Python程序

mads@mads-virtual-machine:~/python$ cat hello.py 
#!/usr/bin/env python3         # 明確的指出hello.py腳本由python解釋器來執行
#_*_coding:utf-8_*_

print("Hello World!")

mads@mads-virtual-machine:~/python$ chmod +x hello.py # 執行前需給予hello.py執行權限    
mads@mads-virtual-machine:~/python$ ./hello.py 
Hello World!

對比其餘語言hello world

http://madsstudy.blog.51cto.com/6249249/1771215


6、變量

6.1 變量聲明

#!/usr/bin/env python
# encoding: utf-8
 
name = "zhangsan"

注:聲明瞭一個變量,變量名爲: name,變量name的值爲:"zhangsan" 


6.2 變量定義規則

1)變量名只能是 字母、數字或下劃線的任意組合

2)變量名的第一個字符不能是數字,能夠是下劃線及字母

3)不能與Python關鍵字重複

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 
'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 
'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 
'raise', 'return', 'try', 'while', 'with', 'yield']


6.3 變量賦值

name1 = "zhangsan"
name2 = name1
print(name1,name2)
print(id(name1),id(name2))
name1 = "lisi"
print(name1,name2)
print(id(name1),id(name2))

解釋爲什麼最後name1 與 name2的值不一樣?
1)給name1變量分配一個內存地址存放name的值zhangsan
2)把name2變量的值等於nam1e內存地址中存放的值zhangsan

3)將name1的變量值修改成lisi,是從新分配一個內存地址存放name1的新值,此時 name1=lisi 而name2不變等於zhangsan


7、字符編碼

字符編碼出現的時間:ASCII>Unicode>UTF-8

三種編碼的特色

ASCII:(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,因此,ASCII碼最多隻能表示 255 個符號

Unicode:Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多

UTF-8:UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

Python解釋器在加載.py文件中的代碼時,會對內容進行編碼(默認ASCII),以下報錯:

mads@mads-virtual-machine:~/python$ cat hello.py 
#!/usr/bin/env python
print('你好')
mads@mads-virtual-machine:~/python$ python hello.py 
  File "hello2.py", line 3
SyntaxError: Non-ASCII character '\xe4' in file hello2.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

解決:

mads@mads-virtual-machine:~/python$ cat hello.py
#!/usr/bin/env python
#_*_coding:utf-8_*_
print(u'你好')
mads@mads-virtual-machine:~/python$ python hello.py
你好


Python 3.X已經不存在這個問題

mads@mads-virtual-machine:~/python$ cat hello.py
#!/usr/bin/env python3
print('你好')
mads@mads-virtual-machine:~/python$ python3 hello.py
你好


8、註釋

註釋原則:源程序有效註釋量應該在20%以上,註釋的原則是有助於對程序的閱讀理解,在該加的地方都加了,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。    

開發規範1:每行不能超過80個字符

單行註釋:# 我被註釋掉了,僅到行尾爲止
多行註釋:''' 在這個範圍內的全部內容都經被註釋'''


9、用戶輸入

9.1 常規使用

#!/usr/bin/env python3
# encoding: utf-8

name = input("Please input your name:")      # Python 3.x
name = raw_input("Please input your name:")  # Python 2.x
print(name)


9.2 隱藏輸入內容實現

getpass模塊(適用範圍 linux能夠, window不行; Python 2.x不行,Python 3.x能夠)

mads@mads-virtual-machine:~/python$ cat test_getpass.py
#!/usr/bin/python
#-*-coding:utf-8-*-
 
import getpass
 
username = input("username:")
password = getpass.getpass("password:")
print (username,password)
mads@mads-virtual-machine:~/python$ python3 test_getpass.py 
username:root
password:
root sss


10、模塊

Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持

sys:

mads@mads-virtual-machine:~/python$ cat input.py 
#!/usr/bin/env python
#_*_coding:utf-8_*_
import sys
if len(sys.argv)<2:
   print "\033[32;1m"+"Usages: Host Port"+"\033[0m"
   sys.exit(2)
   
host = sys.argv[1]
port = sys.argv[2]

print "host:%s port:%s" % (host,port)
mads@mads-virtual-machine:~/python$ python input.py 192.168.1.1 22
host:192.168.1.1 port:22


os:

>>> import os
>>> os.mkdir('student')                  # 新建目錄
>>> os.system('ls -l')                    # 查看當前目錄內容總用量 20
-rwxrwxr-x 1 mads mads   83 5月   8 15:39 hello.py
drwxrwxr-x 2 mads mads 4096 5月   8 18:02 __pycache__
drwxrwxr-x 2 mads mads 4096 5月   8 18:16 student
-rwxrwxr-x 1 mads mads  151 5月   8 18:00 test_getpass.py
-rwxrwxr-x 1 mads mads   73 5月   5 15:53 test.py0
>>> cmd_res = os.system('ls -l')          # 僅保存命令執行的返回值總用量 20
-rwxrwxr-x 1 mads mads   83 5月   8 15:39 hello.py
drwxrwxr-x 2 mads mads 4096 5月   8 18:02 __pycache__
drwxrwxr-x 2 mads mads 4096 5月   8 18:16 student
-rwxrwxr-x 1 mads mads  151 5月   8 18:00 test_getpass.py
-rwxrwxr-x 1 mads mads   73 5月   5 15:53 test.py
>>> print cmd_res0    
>>> cmd_res = os.popen('ls -l').read()    # 保存命令的執行結果
>>> print cmd_res                     
總用量 20
-rwxrwxr-x 1 mads mads   83 5月   8 15:39 hello.py
drwxrwxr-x 2 mads mads 4096 5月   8 18:02 __pycache__
drwxrwxr-x 2 mads mads 4096 5月   8 18:16 student
-rwxrwxr-x 1 mads mads  151 5月   8 18:00 test_getpass.py
-rwxrwxr-x 1 mads mads   73 5月   5 15:53 test.py


sys和os結合

import sys,os
os.system(''.join(sys.argv[1:]))


編寫tab補全模塊

vim中設置(待補充)

windows環境

# python startup file for window 
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')

del os,readline, rlcompleter

linux環境

#!/usr/bin/env python 
# python startup file 
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion 
readline.parse_and_bind('tab: complete')
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
    readline.read_history_file(histfile)
except IOError:
    pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter


mac環境

import sys
import readline
import rlcompleter
if sys.platform == 'darwin' and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac

注:保存內容爲tab.py,使用import tab命令引用該模塊。若是想在系統的何何一個地方都使用,要把這個tab.py放到python全局環境變量目錄裏。print(sys.path) 能夠查看python環境變量列表,基本通常都放在一個叫 Python/2.7/site-packages 目錄下,這個目錄在不一樣的OS裏放的位置不同。

注意:環境列表的第一個' '表示當前目錄,即環境查找的順序問題


11、Python語言

1)編譯型和解釋型
編譯型:首先由編譯器編譯成機器能識別的機器碼,才能開始執行
解釋型:通常翻譯一遍執行

2)動態類型語言和靜態類型語言
動態類型語言:在運行期間纔會作數據類型的檢查的語言
靜態類型語言:在編寫程序的時候就要聲明全部變量的數據類型

3)強類型定義語言和弱類型定義語言
強類型定義語言:變量一旦被賦值,必須通過強制轉換才能被再次使用
弱類型定義語言:與強類型語言相反,一個變量能夠附不用數據類型的值


結論:python是一門動態解釋性的強類型定義語言


12、數據類型

12.1 數據類型
1)整數
2)浮點型
3)字符串 轉義字符
轉義字符\能夠轉義不少字符,好比\n表示換行,\t表示製表符,字符\自己也要轉義,因此\\表示的字符就是\
4)布爾類型
False True
能夠進行and,or和not運算
5)空值


12.2 字符串格式化

Python採用的格式化方式和C語言相似

%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?佔位符,後面就跟幾個變量或者值,順序要對應好。若是隻有一個%?,括號能夠省略。

%s永遠起做用,它會把任何數據類型轉換爲字符串

對於Unicode字符串,用法徹底同樣,但最好確保替換的字符串也是Unicode字符串

有些時候,字符串裏面的%是一個普通字符怎麼辦?這個時候就須要轉義,用%%來表示一個%

 

py3 的字符串格式化 提倡使用 format 函數

 

案例:

方法1:

name = raw_input("Please input your name:")
age = int(raw_input("Please input your age:"))
provice = raw_input("Please input your provice:")
company = raw_input("Please input your company:")
msg = '''
Infomation of user %s
-------------------------
name    :   %s
age     :   %2f
provice :   %s
company :   %s
-----------End-----------
''' % (name,name,age,provice,company)
print msg


方法2:字符拼接

name = input("Please input your name:")
age = int(input("Please input your age:"))
provice = input("Please input your provice:")
company = input("Please input your company:")
print("Infomation of:" + name + "\nname:" + name + "\nage:" + str(age) + "\npprovice:" + provice + "\ncompany:" + company)


十3、數據運算

詳見:http://www.runoob.com/python/python-operators.html


十4、表達式(待補充)

十5、測試題

相關文章
相關標籤/搜索