Python基礎--Python簡介和入門


寫在前面

在說Python之前,我想先說一下自己為什么要學Python,我本人之前也了解過Python,但沒有深入學習。之前接觸的語言都是Java,也寫過一些Java自動化用例,對Java語言只能說有所掌握,但離精通還有較大的距離。Java我先前也有學過,但我覺得學起來還是比較吃力的,特別在自學狀態下。所以自從我了解了Python后,有種相見恨晚的感覺,覺得Python實在是太好用了,據我了解,目前從事測試和運維工作的同學,都在學習Python語言,本人一直從事測試工作,深刻體驗到不會一門語言是多么無奈的一件事,所以此次接着學習自動化的時機,想深入學習一下Python語言。至於我為什么要學Python自動化?主要是因為Java自動化我學不會。。。。。


☞什么是python?
python是一種面向對象、解釋型的計算機語言,它的特點是語法簡潔、優雅、簡單易學。它在哪里都能用,不管是電腦,手機還是網站服務器。世界上無數的人都在使用它。有句話說得好,Life is short, and I use python。它在1989誕生,Guido(龜叔)開發。這里的python並不是蟒蛇的意思,而是龜叔非常喜歡一部叫做《Monty Python飛行馬戲團》的電視劇,所以以python命名(老外就是這么任性)。

Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。這是為什么Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的Python的人創造並經常改進着的。

當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。可移植性

由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那么你的所有Python程序無需修改就可以在下述任何平台上面運行。

這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC!

Python為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,Python還有大量的第三方庫。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
另外,一個令我有點難以接受的事實是,python 是用C寫的 沒錯...不過可能確實難以接受,這么簡單的語言是出自一門如此復雜的語言.不得不佩服C的....

相對於Java、C來說,Python還是有自身的一些缺點,首先它運行速度慢,但這種慢可以忽略,比如一個應用程序如果用C語言0.01秒就能打開,而用Python可能就需要0.1秒才能打開,但由於網絡、傳輸、前端渲染等所花費的時間遠大於這點時間,而且基於Python又有這么多有點來說,這點完全可以忽略,don't care.


☞解釋型語言和編譯型語言
編譯型語言就是先把寫好的程序翻譯成計算機語言然后執行,就是所謂的一次編譯到處運行,比如c、c++就是編譯型語言,這樣的語言特點是運行速度快,但是需要事先把程序編譯好才可以。
解釋型語言就是程序在運行的時候,通過一個解釋器,把代碼一句一句的翻譯成計算機語言然后運行,也就是你寫好代碼之后直接就能運行,比如說python、shell、ruby、java、perl等等都是解釋型語言,當然這樣的語言由於原理不一樣,執行速度並沒有編譯型語言快。
☞選擇python2.x還是python3.x?
現在python有2.x版本和python3.x版本,在選擇版本這個事情上,很多人都是比較糾結的。到底選擇2還是3,因為2和3代碼是不怎么兼容的,現在比較常用的是2.7版本,2.7版本其實是一個過渡版本,在2008年的時候推出了3.0版本,由於3.0版本改動比較大,和2.x的版本不兼容,很多用python2的公司重寫代碼太費勁了,所以在同年又發行了2.6過渡版本的python,加入了一些3.0的特性,在2010年的時候發行了2.7版本,也是一個過渡版本,在2014年的時候python官方宣布2.7支持到2020年,以后不會再發行2.8版本,盡快把程序遷移到3.x版本。python2的默認字符集是ASCII編碼,寫中文會報錯,字符編碼一直是讓程序員頭疼的一件事情,python2在處理中文的時候的確比較頭疼,在python3.x版本中默認字符集是Unicode,省了很多事,so,還是推薦使用python3.x版本。


☞字符集和字符編碼
我們都知道,計算機其實只認識二進制0和1這兩個數字,其他的都不認識,這樣的0或1為一"位",也就是一bit,bit就是位。說完位順便說一下字節、位、bit、byte、KB、B、M、T、字符之間有什么關系

bit就是位,也叫比特位,是計算機表示數據最小的單位

 byte就是字節,1byte=8bit,1byte就是1B;

一個字符=2字節;
1T=1024M
1M=1024KB
1KM=1024B
1B=8bit

既然計算機只認識0和1,那怎么表示這些英文字母、以及漢字、標點符號呢?在回答這個問題前,先說一下字符集和字符集編碼

那么什么是字符集呢?前面說到計算機只認識0和1,而我們在計算機上看到的有各國語言文字,這些文字最終都是通過二進制0和1轉化過來的,這兩者之間的轉換就是通過字符集轉換的,所以說字符集就是規定了某個文字對應的二進制數字存放方式(編碼)和某串二進制數值代表了哪個文字(解碼)的轉換關系

字符集只是一個規則集合的名字,例如我們常見的UTF-8、Unicode、GB2312等這些都是字符集,對於一個字符集來說要正確編碼轉碼一個字符需要三個關鍵元素:字庫表(character repertoire)、編碼字符集(coded character set)、字符編碼(character encoding form)。其中字庫表是一個相當於所有可讀或者可顯示字符的數據庫,字庫表決定了整個字符集能夠展現表示的所有字符的范圍。編碼字符集,即用一個編碼值code point來表示一個字符在字庫中的位置。字符編碼,將編碼字符集和實際存儲數值之間的轉換關系。

簡單來說,包括各國家文字、標點符號、圖形符號、數字就相當於字符集,而將這些符號轉換為計算機可以接受的數字系統編碼就是字符編碼

 

字符集有很多種,

我們知道,計算機是由美國發明的,所以最早的字符集也是有美國發明的ASCII字符集,它主要是基於拉丁字母的一套電腦編碼系統,主要包括控制字符(回車鍵、退格、換行鍵等);可顯示字符(英文大小寫字符、阿拉伯數字和西文符號)

ASCII編碼使用7位(bits)表示一個字符,共128字符,為了表示更多的歐洲常用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符。ASCII字符集映射到數字編碼規則如下圖所示:

圖1 ASCII編碼表

圖2 擴展ASCII編碼表

ASCII的最大缺點是只能顯示26個基本拉丁字母、阿拉伯數目字和英式標點符號,因此只能用於顯示現代美國英語(而且在處理英語當中的外來詞如naïve、café、élite等等時,所有重音符號都不得不去掉,即使這樣做會違反拼寫規則)。而EASCII雖然解決了部份西歐語言的顯示問題,但對更多其他語言依然無能為力。因此現在的蘋果電腦已經拋棄ASCII而轉用Unicode。

那么問題來了,計算機認識英文了,那咱們天朝怎么辦,天朝專家把那些127號之后的奇異符號們(即EASCII)取消掉,規定:一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一起時,就表示一個漢字,取了127后面的一些數字后,只要遇到這個區間的數字,就知道是中文,去另一個編碼表里面找,這個里面存的都是中文,還有其他國家的文件,比如說日文,韓文等等,這個叫做gb2312編碼,它收錄了6000+個漢字,這樣的話,就可以解決計算機不認識中文的問題了。但是中國文化,博大精深,豈止有6000+個漢字,然后又有了gbk、Unicode、UTF-8等等編碼,Unicode編碼也叫萬國碼,哪個國家的文字都適用,但是它不管你是一個英文字母,還是一個漢字都是占2個字節大小,原來ASCII碼一個英文字母就占一個字節,這一下變大了,原來100G的東西,現在可能得200G才存的下,這可不行,然后就又出現了UTF-8字符集,它也屬於Unicode,和Unicode的不一樣的是,它對Unicode做了壓縮,比如說英文字母的還是占一個字節,這樣的話,就節省的很多的空間,這就是為啥現在大家都用utf8的原因。

圖3 GB2312編碼表的開始部分

 

☞python安裝
python怎么安裝呢,這個是一個沒有營養的話題,我就不寫了,百度一下一堆堆的,要注意的就是,如果想使用python命令需要把python的安裝目錄加到環境變量中,windows下還要把python安裝目錄下的scripts目錄加入到環境變量中,因為一些python的可執行命令,比如說pip,是安裝在這個目錄下的,linux下因為默認帶python了,如果要升級版本的,要先把系統自帶的python改名或者卸載掉,再安裝你要的python版本,centos下由於yum依賴自帶的python2.6,所有不能卸載,修改下yum腳本里面的python環境變量位置即可。
六、運行python代碼
Windows下,安裝好python並且配置好環境變量之后,直接在命令行里面輸入python就可以進入python交互式命令行了,linux下面也是一樣,什么叫交互式呢,交互就是你給我說一句話,我回應你一句,這個就是交互,看下面的圖,安裝完python之后Python也自帶了一個idle,也就是可以在它里面寫代碼,但是那個比較不好用,這里就不贅述了。

但是這樣寫代碼實在是太不方便了,怎么把代碼都寫好了,然后一起運行呢,就是把代碼都寫到文件里面,然后運行文件,以.py結尾的就是python文件,有很多python的編輯器,比如說pycharm、sublime  text、notepad++等等,都可以使用,使用編輯器有代碼提示,可以很方便調試和運行,這里我推薦使用pycharm。新建一個python文件,然后寫上代碼,運行即可,如下圖:

在linux下運行也是如此,和Windows下有一點不一樣的是,liunx下可以直接運行python文件,前面不需要加python命令,加上執行權限即可,但是需要在python文件最前面指定python解釋器,加上python解釋器的路徑即可,有兩種寫法,代碼看下面,兩種的區別是第一種是直接去你指定的目錄下找python解釋器,第二種是在自己配置的環境變量中去找python解釋器,現在新建一個test.py的python文件

我相信,每個一個程序員在學習語言的時候,第一個寫的程序肯定都是hello world,OK,那來寫第一個程序吧,其實很簡單,python的語法就是簡單、優雅,一個print就搞定。

print('Hello world!')

 在pycharm中執行如下:

注意:Python對空格很敏感,不同的域空格一定要保持一致,子域的空格一定要多於父域,在父域的后面,切記!

如下圖所示,每個框都代表一個子域,每個域內的縮進必須相同,且子域要包含在父域內!

 

 

PyCharm快捷鍵

既然選擇了用pycharm做Python開發,那么一些常用的快捷鍵還是要了解的

Ctrl + D 復制選定的區域或行

Ctrl + / 行注釋

Ctrl + Alt + I 自動縮進行
Ctrl + Y 刪除當前插入符所在的行
Ctrl + Delete 刪除到字符結尾
Ctrl + Backspace 刪除到字符的開始
Ctrl+t SVN更新
Ctrl+k SVN提交
Ctrl + 鼠標 簡介
F8 跳過
F7 進入
Shift + F8 退出
Alt + F9 運行游標
Alt + F8 驗證表達式
Ctrl + Alt + F8 快速驗證表達式
F9 恢復程序
Ctrl + F8 斷點開關
Ctrl + Shift + F8 查看斷點

☞變量及調用
變量是干嘛的呢?說的簡單點,就是存東西,供后面來用的。值得一提的是python變量里面存的是內存地址,如果再把這個變量賦值給另一個變量的話,新的變量通過之前那個變量知道那個變量值的內存地址存起來,而不是指向的之前那個變量。代碼如下:

name = 'sriba' new_name = name #new_name存的也是sriba的內存地址

正常情況下,變量調用是傳地址的,但可以用[:] 來只復制值

a = [1, 2, 3] b = a c = a[:] print(a,b,c,) print(id(a),id(b),id(c))#輸出變量的地址

輸出結果為

[1, 2, 3] [1, 2, 3] [1, 2, 3] 33432392 33432392 33431752

可以看出變量b和a的地址一樣,也就是說b調用的是a的地址,若b的值改變,a的值也會改變,而c的地址已經變了,它調用的只是a的值,后面無論c的值怎么改變都不影響a的值。

變量的定義規則:
變量名最好要能見名知其意,不要隨意起名,在Python中:
變量名可以是 字母、數字漢字或下划線的任意組合,變量名的第一個字符不能是數字

對,你沒看錯,Python可以用漢字當變量名,就是這么任性!比這還任性的是,python中定義變量很簡單,一個等號搞定,也不需要指定數據類型,直接定義就好,如下圖所示:

 

另外,Python中,多個變量可以同時定時定義,如下

a,b,c = 'chenshifeng','塵世風',666
print(a) print(b) print(c)

輸出結果為

chenshifeng 塵世風 666


python中定義變量的時候字符串都用用引號括起來,單引號和雙引號沒有區別,用啥都行,如果說這個字符串里面有單引號的話,那你外面就用雙引號,里面有雙引號的話,外面就用單引號,如果既有單又有雙,那么用三引號,三引號也可以多行注釋代碼,單行注釋,使用#,代碼如下:

1 print('我們,學python') 2 print("let's go")#有單引號,所以外面用雙引號
3 print('"孤獨"是生命的禮物')#有雙引號,所以外面用單引號
4 print('''let's go "哇哈哈"''')#有雙引號和雙引號,所以外面用三引號
5 '''
6 這里是注釋 7 人生苦短,我要學Python 8 '''

 

和其他語言一樣,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']

☞輸入、輸出

python怎么來接收用戶輸入呢,使用input函數,python2中使用raw_input,接收的是一個字符串,輸出呢,第一個程序已經寫的使用print,代碼入下:

1 name=input('Please enter your name:') #把接收到的值賦給name變量
2 print(name)#輸出接收到的輸入

input在接收輸入的時候,是可以看到你輸入的值的,如果是輸入密碼這樣的呢,不想讓別人看到你的密碼,怎么辦呢,就需要用到一個標准庫,getpass,什么是標准庫呢,就是不需要你再去安裝,裝完python就有的庫,就是標准庫,getpass就是一個標准庫,導入進來之后,直接使用getpass.getpass方法就可以在輸入的時候,不回顯了,代碼如下:

1 import getpass #導入getpass模塊 
2 password = getpass.getpass('Please enter your password:') #接收輸入的密碼
3 print(password)

注,此模塊在pycharm中無法使用,在命令提示符中可以使用,如下圖

 

還有一點,在Python2.x中,由於默認編碼不是utf-8,所以首行需加#coding=utf-8,而且輸出可以用下面兩種寫法
#print xxx #在python2里面是的可以
# print("hello world!")

☞條件判斷
python中條件判斷使用if else來判斷,多分支的話使用if elif ... else,也就是如果怎么怎么樣就怎么怎么樣,否則就怎么怎么這樣,格式如下:

1         if 明天下雨: 2  那么明天帶傘 3         else4             明天不帶傘

python中是以縮進來表示代碼塊的,這樣看起來代碼很有條理,比如說上面的例子,如果明天下雨,那么明天才會帶傘,明天帶傘就相當於if的兒子,所以也可以認為有縮進的都是有父子關系的,寫個實際點的例子,如下:

1                 score = int(input('請輸入你的分數:')) #接收輸入,因為input接收的是一個字符串,所以需要用int函數強制類型轉換成整數類型
2                 if score==100: #如果成績等於100分的話
3                     print('小天才,你是滿分') 4                 elif score >=90 and score < 100: #如果成績大於等於90分小於100分的話
5                     print('兄弟,你的分數不低啊,不錯') 6                 elif score > 60 and score <90:#如果成績大於60分小於90分的話
7                     print('兄弟,這次考試馬馬虎虎啊') 8                 else: #如果分數小於60分的話
9                     print('兄弟,你在搞什么,該努力了')

☞循環
循環是干嘛的呢,說白了就是為你重復的去做事情,比如說你想建1000個文件夾,一個個建累死你, 這樣就可以寫段代碼,使用循環給你創建1000個就省事了,python中有兩種循環,while和for,兩種循環的區別是,while循環之前,先判斷一次,如果滿足條件的話,再循環,for循環的時候必須有一個可迭代的對象,才能循環,比如說得有一個數組,值得一提的是,別的語言中,for循環的時候需要先定義一個計數器變量,然后從0開始加,直到這個計數器達到你預設的一個值,然后停止循環,取數據的時候也是通過數組的下標從0開始取,這樣就很麻煩,python中for循環很簡單,循環的是一個可迭代對象中的元素,你這個對象中有多少個元素,就循環多少次,比如說一個數組list,list = ['a','b','c'],在別的語言中要想獲取到list中所有的值,必須得使用循環取下標這種方式去取數據,就得這樣寫list[x],list[x],list[x]這樣,在Python里面就不需要直接循環就取的是這個list里面的值,循環里面還有兩個比較重要的關鍵字,continue和break,continue的意思是,跳出本次循環,繼續進行下一次循環,break的意思是停止循環,也就是說在continue和break下面的代碼都是不執行的,格式如下:

 1   #while 循環
 2     count = 0  3     while count<10: #如果count小於10的話,就執行下面的代碼,如果不小於3就走else
 4             print(count)  5             if count==5:  6                 break#如果count等於5的話,就結束循環
 7             count+=1 #這個意思是每次循環完,count的值就加一,如果不加的話,條件就一直為真了,就死循環了,一直不停的循環
 8     else#這個else是可以不寫的,意思就是說,如果條件不滿足了去干嘛
 9             print('條件沒滿足') 10     #for 循環
11     names = ['marry','lily','lilei'] 12     for name in names: 13         if name == 'lily': 14             contiune #如果名字等於lily的話,就不執行continue下面的代碼了,再循環下一次
15          print(name) 16     else#for也有個else,不過這個一般沒人寫它,意思是如果正常循環完了去做什么
17         print('over')

☞小練習
既然我們已經學了條件判斷和循環,那就用它來練習練習,寫個小游戲,猜數字的游戲,要求是這樣,產生一個隨機數字,1-100之間,接收用戶輸入,如果猜對了,游戲結束,猜大了,提示猜大了,小了提示猜小了。產生隨機數模塊使用random.randint(1,101),是一個標准包,導入使用即可,代碼如下:

 1 while True:  2     guess = input('請輸入一個1-100之間的數字:')  3     guess = int(guess)  4     if guess>src_num:  5         print('你輸入的太大了!')  6     elif guess<src_num:  7         print('你輸入的太小了!')  8     else:  9         print('恭喜你,猜對了,數字是%d'%src_num) 10         break

什么是格式化輸出呢,就是說把你的輸出都格式化成一個樣子的,比如說登錄的歡迎信息,都是welcome to login,Marry. 每個用戶登錄都是這樣歡迎,但是每個用戶的用戶名都是一樣的,你不能一個用戶就寫一行代碼吧,這就需要用到格式化輸出了,有三種方式,第一種是用“+”連接,直接把輸出的字符串和變量連接起來就可以了;第二種是用占位符,占位符有常用的有三種,%s、%d和%f,%s是后面的值是一個字符串,%d是后面的值必須是一個整數,%f后面是小數;第三種是使用{}和fromat方法,這三種呢,官方推薦是使用format方法,不推薦使用第一種,第一種用加號的,會在內存里面開辟多個內存空間,而后面兩種是只開辟一塊內存空間,使用方式如下:

 

1     name = input('請輸入你的名字:') 2     print('你的名字是'+name) #使用加號連接
3     print('你的名字是%s'%name)#使用占位符 
4     print('你的名字是{your_name}'.format(your_name=name)) #使用format格式化輸出,{}里面的名字可以隨便寫但是要和后面的format中的名字保持一致,然后再把你前面定義的變量寫到等號后面就可以了。
5     age = 18
6     print('我的名字是%s,年齡是%d歲.'%(name,age))#這種是里面有多個格式化內容的,前面那個是字符串,后面這
7     個是整數,多個變量的后面跟值的時候必須要加上括號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM