python 基礎回顧1

1、python介紹python

python 是Guido van Rossum建立與1989年聖誕節期間,爲了打發無聊的聖誕節而編寫的一個編程語言,是ABC編程語言的繼承。第一個公開發行版發行於1991年。python 是一種面向對象、直譯式計算機程序設計語言,Python語法簡捷而清晰,具備豐富和強大的類庫。linux

python 特性web

  • Python 是一種解釋型語言: 這意味着開發過程當中沒有了編譯這個環節。相似於PHP和Perl語言。算法

  • Python 是交互式語言: 這意味着,您能夠在一個Python提示符,直接互動執行寫你的程序。shell

  • Python 是面嚮對象語言: 這意味着Python支持面向對象的風格或代碼封裝在對象的編程技術。編程

  • Python 是可擴展性語言: 若是須要一段關鍵代碼運行得更快或者但願某些算法不公開,能夠部分程序用C或C++編寫,而後在Python程序中使用它們。

python 排名windows

前10名編程語言的走勢圖:python3.x

排名

 

編程語言排行榜 TOP 20 榜單:榜單瀏覽器

 

因而可知,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!框架

python 解釋器的種類

CPython

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

CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。

IPython

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

CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。

PyPy

PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。

絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。

Jython

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

IronPython

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

 

2、python發展史

  • 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 與 python 3.x的區別

一、__future__模塊

python3的一些特性能夠同過future模塊來導入,例如想要在python2.x中導入python3.x的print函數

from __future__ import print_function

print('導入陳功。')
feature optional in mandatory in effect
nested_scopes 2.1.0b1 2.2 PEP 227: Statically Nested Scopes
generators 2.2.0a1 2.3 PEP 255: Simple Generators
division 2.2.0a2 3.0 PEP 238: Changing the Division Operator
absolute_import 2.5.0a1 3.0 PEP 328: Imports: Multi-Line and Absolute/Relative
with_statement 2.5.0a1 2.6 PEP 343: The 「with」 Statement
print_function 2.6.0a2 3.0 PEP 3105: Make print a function
unicode_literals 2.6.0a2 3.0 PEP 3112: Bytes literals in Python 3000

二、print函數

在python3.x 中 print 再也不是語句,而是函數,書寫方式由 print  改成 print()

python 2.x

print 'Hello World'
python 3.x

print('Hello World')

三、整除,原來1/2(兩個整數相除)結果是0,如今是0.5了

python 2.x

>>>1/2
0
python 3.x

>>> 1/2
0.5

 

四、python 3.x中沒有舊式類,只有新式類

在Python 3中,沒有舊式類,只有新式類,也就是說不用再像這樣 class Foobar(object): pass 顯式地子類化object,聲明的都是新式類。

 

五、xrange重命名爲range

python 3.x 中不存在 xrange 函數,而range 函數返回的就是迭代器對象,同時更改的還有一系列內置函數及方法, 都返回迭代器對象, 而不是列表或者 元組, 好比 filter, map, dict.items 等。

六、!=取代 < >

python 3.x中再也不存在 <>符號,判斷不等於的話,使用 !=號

七、long重命名爲int

python3 廢棄了 long 長整型表示方法,統一爲 int , 支持高精度整數運算

八、except Exception, e變成except (Exception) as e

注意該寫法,python 3.x中再使用以前的寫法會報錯

九、next()函數 和.next()方法

在python3.x中只有 next() 函數,廢棄了.next()方法

十、字符串格式化 由原先的 % ,在py3.x中提倡是用 format函數

十一、python3.x中某些類庫作了調整

例如python 2.x中 urllib 和 urllib2 兩個庫 在python 3.x中合併成了一個庫 urllib

  

  

 

 

4、python字符編碼

由於計算機只能處理數字,若是要處理文本,就必須先把文本轉換爲數字才能處理。最先的計算機在設計時採用8個比特(bit)做爲一個字節(byte),因此,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),若是要表示更大的整數,就必須用更多的字節。好比兩個字節能夠表示的最大整數是65535。

因爲計算機是美國人發明的,所以,最先只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII編碼,好比大寫字母A的編碼是65,小寫字母z的編碼是122。

要處理中文顯然一個字節是不夠的,至少須要兩個字節,並且還不能和ASCII編碼衝突,因此,中國製定了GB2312編碼,用來把中文編進去。

全世界有上百種語言,日本不承認中文的編碼,日本把日文編到Shift_JIS裏,韓國也不承認中文的編碼,韓國把韓文編到Euc-kr裏,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。

Unicode就誕生了。Unicode把全部語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。

Unicode 最經常使用的是用兩個字節表示一個字符(部分偏僻的字符,就須要4個字節)。現代操做系統和大多數編程語言都直接支持Unicode。

可是,若是都採用Unicode的編碼的話,亂碼問題今後消失了。可是,若是你寫的文本基本上所有是英文的話,用Unicode編碼比ASCII編碼須要多一倍的存儲空間,在存儲和傳輸上就十分不划算。

因此,爲了節約空間,又出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。

到這裏,編碼的歷史大概介紹了一遍,總結一下,在計算機內存中,統一使用Unicode編碼,當須要保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼。

下圖是編碼存儲與讀取轉換的過程

 

python2.x版本原生支持ASCII編碼,後來添加了對Unicode的支持,以Unicode表示的字符串用u'...'表示。

python代碼中包含中文的時候,在保存代碼時,就須要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,咱們一般在文件開頭寫上這兩行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

第一行適用於類Unix系統,告訴系統使用什麼解釋器

第二行聲明代碼編碼類型

5、python變量

變量的概念基本上和初中代數的方程變量是一致的,只是在計算機程序中,變量不只能夠是數字,還能夠是任意數據類型。

變量在程序中就是用一個變量名錶示了,變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭。

在python中給變量賦值使用 = 號,python是弱類型的動態編程語言,在給變量賦值以前不須要聲明變量的類型,同一個變量能夠反覆複製,並且能夠是不一樣的類型。

例如:

>>> a = 'abc'

>>> a_ = 123

>>> a_123 = True

python把一個值賦值給變量,等於在內存中開闢了一塊地址存儲該值。

>>> a = ‘QWE’

執行上邊的語句時,等於幹了兩件事情:

一、在內存中建立一個‘QWE’的字符串

二、在內存中建立一個名字爲a的變量,並將他指向‘QWE’

>>> b = a

>>> a = 'ASD'

>>> print (a, '', b)
ASD QWE

當將變量a複製給變量b的時候,其實是將變量b指向變量a的所指向的數據。

當再次給變量a賦值時,a指向了另外一個變量空間。

 

6、用戶輸入

 

python3.x中使用 input函數獲取用戶的輸入,input的函數把用戶的一切輸入都看成是字符串。

 

#!/usr/bin/env python
#_*_coding:utf-8_*_

user_input = input('input your name:' )

print (user_input)

 

輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import getpass
  
# 將用戶輸入的內容賦值給 name 變量
pwd = getpass.getpass("請輸入密碼:")
  
# 打印輸入的內容
print(pwd)

 

7、基本數據類型

「一切數據是對象,一切命名是引用」 ,這是python數據類型的核心

python有如下的數據類型

一、字符串
二、布爾類型
三、整數
四、浮點數
五、複數型

python使用單引號或者雙引號表示字符串,兩種表示功能方式相同

s = 'test'

s = "test"

還可以使用'''三引號表示長段的字符串

s = '''
    this a test with a lot pf
    words which show the
    long string in Python
    '''
字符串經常使用功能:
  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片

 

布爾型

布爾型 實際上是整型的子類型,布爾型數據只有兩個取值:True和False,分別對應整型的1和0。

每個Python對象都天生具備布爾值(True或False),進而可用於布爾測試(如用在if、while中)。

如下對象的布爾值都是False:

  • None
  • False(布爾型)
  • 0(整型0)
  • 0L(長整型0)
  • 0.0(浮點型0)
  • 0.0+0.0j(複數0)
  • ''(空字符串)
  • [](空列表)
  • ()(空元組)
  • {}(空字典)
  • 用戶自定義的 類實例,該類定義了方法 __nonzero__()__len__(),而且這些方法返回0或False

整型

Python語言的整型至關於C語言中的long型,在32位機器上,整型的位寬爲32位,取值範圍爲-231~231-1,即-2147483648~2147483647;在64位系統上,整型的位寬一般爲64位,取值範圍爲-263~263-1,即-9223372036854775808~9223372036854775807。
Python中的整數不只能夠用十進制表示,也能夠用八進制和十六進制表示。當用八進制表示整數時,數值前面要加上一個前綴「0」;當用十六進制表示整數時,數字前面要加上前綴0X或0x。

 

長整型

在python 2.x中還存在長整型,跟C語言不一樣,Python的長整型沒有指定位寬,也就是說Python沒有限制長整型數值的大小,可是實際上因爲機器內存有限,因此咱們使用的長整型數值不可能無限大。
在使用過程當中,咱們如何區分長整型和整型數值呢?一般的作法是在數字尾部加上一個大寫字母L或小寫字母l以表示該整數是長整型的。

 

浮點型

浮點型用來處理實數,即帶有小數的數字。Python的浮點型至關於C語言的雙精度浮點型。實數有兩種表示形式,一種是十進制數形式,它由數字和小數點組成,而且這裏的小數點是不可或缺的,如1.23,123.0,0.0等;另外一種是指數形式,好比789e3或789E3表示的都是789×103,字母e(或E)以前必須有數字,字母e(或E)以後能夠有正負號,表示指數的符號,若是沒有則表示正號;此外,指數必須爲整數。

 

複數類型

複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。注意,虛數部分的字母j大小寫均可以,如5.6+3.1j,5.6+3.1J是等價的。
對於複數類型變量n,咱們還能夠用n.real來提取其實數部分,用n.imag來提取其虛數部分,用n.conjugate返回複數n的共軛複數。

 

8、條件判斷與循環

條件判斷

根據年齡打印不一樣的內容,在Python程序中,用if語句實現:

1 age = 20
2 if age >= 18:
3     print('your age is', age)
4     print('adult')

根據Python的縮進規則,若是if語句判斷是True,就把縮進的兩行print語句執行了,不然,什麼也不作。

也能夠給if添加一個else語句,意思是,若是if判斷是False,不要執行if的內容,去把else執行了:

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

還能夠用elif作更細緻的判斷:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

elifelse if的縮寫,徹底能夠有多個elif,因此if語句的完整形式就是:

if <條件判斷1>:
    <執行1>
elif <條件判斷2>:
    <執行2>
elif <條件判斷3>:
    <執行3>
else:
    <執行4>

循環

for 循環

循環10次

for i in range(10):
    print("loop:", i )

輸出

loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

改變下條件,遇到小於5的循環次數就不走了,直接跳入下一次循環

for i in range(10):
    if i<5:
        continue #不往下走了,直接進入下一次loop
    print("loop:", i )

再次改變下條件,可是遇到大於5的循環次數就不走了,直接退出

for i in range(10):
    if i>5:
        break #不往下走了,直接跳出整個loop
    print("loop:", i )

 

9、字符串格式化

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

10、模塊初識

Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫

sys

import sys
 
print(sys.argv)
 
 
#輸出
$ python test.py helo world
['test.py', 'helo', 'world']  #把執行腳本時傳遞的參數獲取到了

os

import os
 
os.system("df -h")

結合一下

import os,sys
 
os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數看成一條命令交給os.system來執行

 

本身寫個模塊


本身編寫模塊以後將模塊文件放到 /usr/local/lib/pythonx.x/site-packages/ 目錄下

下面添加個自動不全模塊

#!/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

for Linux
for linux
# 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
for windows
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
for mac

注:保存內容爲tab.py,使用import tab命令引用該模塊。該文件存放的位置就是 /usr/local/lib/pythonx.x/site-packages/ 

相關文章
相關標籤/搜索