Python學習筆記(一)基礎,python學習筆記基礎

來源:互聯網
上載者:User

Python學習筆記(一)基礎,python學習筆記基礎
Python基礎

Python使用縮排來組織代碼塊,請務必遵守約定俗成的習慣,堅持使用4個空格的縮排。

在文字編輯器中,需要設定把Tab自動轉換為4個空格,確保不混用Tab和空格。

整數 浮點數

整數和浮點數在電腦內部的儲存方式是不同的,整數運算永遠是精確的(除法也是),而浮點數運算則可能會有四捨五入的誤差。

字串

字串是以單引號'或雙引號“括起來的任意文本。如果'本身也是一個字元那就可以用“”括起來,如“I'm OK”。

如果字串既包含'又包含“,可以用逸出字元\來標識:

'I\'m \"OK\"!'
表示的字串內容為 I'm "OK"!

逸出字元可以轉義很多字元,如\n表示換行,\t表示定位字元,字元\本身也要轉義,所以\\表示的字元就是\。

如果字串裡面有很多字元都需要轉義,就需要加很多\,為了簡化,Python還允許用r''表示''內部的字串預設不轉義

>>> print('\\\t\\')\       \>>> print(r'\\\t\\')\\\t\\

如果字串內部有很多換行,用\n寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''的格式表示多行內容。

>>> print('''line1... line2... line3''')line1line2line3

如果寫成程式並存為.py檔案,就是:

print('''line1line2line3''')

多行字串'''...'''還可以在前面加上r使用,即多行字串不轉義。

布爾值一個布爾值只有True和False兩種,布爾值可以用and(&)、or(|)和not運算。

>>> TrueTrue>>> FalseFalse>>> 3 > 2True>>> 3 > 5False
>>> True and TrueTrue>>> True and FalseFalse>>> False and FalseFalse>>> 5 > 3 and 3 > 1True
>>> True or TrueTrue>>> True or FalseTrue>>> False or FalseFalse>>> 5 > 3 or 1 > 3True
>>> not TrueFalse>>> not FalseTrue>>> not 1 > 2True

空值

Python的空值用None表示。

變數

在Python中,=是賦值語句,可以把任何資料類型賦給變數,同一個變數可以反覆賦值,而且可以是不同類型的變數,例如:

a=123 #a是整數print(a)a='ABC' #a是字串print(a)

這種變數本身類型不固定的語言叫做動態語言,即不需要聲明標量類型。

理解變數在電腦記憶體中的表示:

a=‘ABC’

Python解譯器幹了兩件事:

1.在記憶體中建立了一個'ABC'的字串;

2.在記憶體中建立了一個名為a的變數,並把它指向'ABC'。

同樣可以把變數a賦值給變數b:

a='ABC'b=aa='XYZ'print(b)
可以得到結果'ABC'。

常量

在Python中有兩種除法,一種除法是/:

>>>10/33.3333333333333335
/除法計算結果是浮點數,即使兩個整數恰好整除,結果也是浮點數:

>>>9/33.0

還一種除法是//,稱為地板除,兩個整數的除法仍然是整數:

>>>10/33
//除法只取結果的整數部分,相當於C語言/除法。

Python提供餘數運算:(%)

>>>10%31
故無論是//還是%,結果永遠是整數,也就是前文所述整數運算永遠是精確的。

注意:Python的整數沒有大小限制。浮點數也沒有大小限制,但是超出一定的範圍就直接表示為inf(無限大)。

字元編碼

UTF-8編碼把一個Unicode(通常是2位元組)字元根據不同的數字大小編碼成1-6個位元組,常用的英文字元被編碼成1位元組,漢字通常是3個位元組,只有很生僻的字元才會編碼成4-6個位元組。如果要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間的:

字元 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101
在電腦記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸時,就轉換為UTF-8編碼。

即當編輯文本時,UTF-8字元轉換為Unicode字元到記憶體,編輯完成後,儲存或傳輸時,再把Unicode轉換為UTF-8進行儲存或者傳輸。


Python的字串

對於單個字元的編碼,Python提供了ord()函數把字元轉換為字元的編碼數,chr()函數把編碼轉換為對應的字元:

>>> ord('A')65>>> ord('中')20013>>> chr(66)'B'>>> chr(25991)'文'
由於Python的字串類型是str,在記憶體中以Unicode表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str變為以位元組為單位的bytes。

Python對bytes類型的資料用帶b首碼的單引號或雙引號表示:

x=b'ABC'

要注意區分'ABC'和b'ABC',前者是str,Unicode編碼,後者雖然內容顯示一致,但每個字元都只佔用一個位元組。

以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:(' '.encode(' '))

>>> 'ABC'.encode('ascii')b'ABC'>>> '中文'.encode('utf-8')b'\xe4\xb8\xad\xe6\x96\x87'>>> '中文'.encode('ascii')>>> x='ABC'>>> x.encode('utf-8')b'ABC'
注意:含有中文的str無法用ASCII編碼。

反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes。要把bytes變為str,就需要用decode()方法:(' '.decode(' '))

>>> b'ABC'.decode('ascii')'ABC'>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')'中文'

len()函數

要計算str包含多少個字元,可以用len()函數:

>>> len('ABC')3>>> len('中文')2
len()Function Compute的是str的字元數,如果換成bytes,len()函數就計算位元組數:

>>> len(b'ABC')3>>> len(b'\xe4\xb8\xad\xe6\x96\x87')6>>> len('中文'.encode('utf-8'))6

在操作字串時,,經常遇到str和bytes的互相轉換,為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

由於Python原始碼也是一個文字檔,所以當原始碼中包含中文字元時,在儲存原始碼時就需要務必指定儲存為UTF-8編碼。當Python解譯器讀取原始碼時,為了讓它按照UTF-8讀取,我們通常在檔案開頭寫上這兩行:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

(如果原始碼中含有中文:

1.確保文字編輯器使用UTF-8 without BOM;

2.原始碼開頭寫上2行注釋。)

格式化

在Python中,採用格式化的方式和C語言一致,用%實現,例如:

>>> 'Hello, %s' % 'world''Hello, world'>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'
有幾個%?預留位置,後面就跟幾個變數或者值,順序一一對應。如果只有一個%?,括弧可以省略。

常見的預留位置:

%d 整數
%f 浮點數
%s 字串
%x 十六進位整數

其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位元:

>>> print('%2d-%02d' % (3, 1))3-01>>> print('%.2f' % 3.1415926)3.14
如果不確定用什麼,%s永遠起作用,它會把任何類型轉換為字串:

>>> 'Age: %s. Gender: %s' % (25, True)'Age: 25. Gender: True'
當字串裡的%是一個一般字元時,這是用%%轉義來表示一個%:

>>> 'growth rate: %d %%' % 7'growth rate: 7 %'

list 和 tuplelist

Python內建的一種資料類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。(list=[ , ,])

>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classmates['Michael', 'Bob', 'Tracy']
變數classmates就是一個list。

用len()函數可以擷取list元素的個數:

>>> len(classmates)3
用索引來訪問list中每一個位置的元素,記得索引是從0開始的:
>>> classmates[0]'Michael'>>> classmates[1]'Bob'>>> classmates[2]'Tracy'>>> classmates[3]Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: list index out of range
注意:確保索引不越界。

如果要取最後一個元素,出了計算索引位置外,還可以用-1做索引,直接擷取最後一個元素:

>>> classmates[-1]'Tracy'
以此類推,可以擷取倒數第二個、第三個:

>>> classmates[-2]'Bob'>>> classmates[-3]'Michael'>>> classmates[-4]Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: list index out of range
同樣不能越界。

list函數

除len()函數擷取list元素個數外,還有以下函數:

.append( )可以往list中追加元素至末尾:

>>> classmates.append('Adam')>>> classmates['Michael', 'Bob', 'Tracy', 'Adam']
.insert(n, )可以把元素插入到指定的第n個位置:

>>> classmates.insert(1, 'Jack')>>> classmates['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
.pop()刪除list末尾的元素:

>>> classmates.pop()'Adam'>>> classmates['Michael', 'Jack', 'Bob', 'Tracy']
.pop(i)刪除指定位置的元素:

>>> classmates.pop(1)'Jack'>>> classmates['Michael', 'Bob', 'Tracy']
把某個元素替換成別的元素,可以直接賦值給隊友的索引位置:

>>> classmates[1] = 'Sarah'>>> classmates['Michael', 'Sarah', 'Tracy']
list裡的元素的資料類型也可以不同:

>>> L = ['Apple', 123, True]

list元素也可以是另一個list:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']>>> len(s)4
要注意s只有4個元素,其中s[2]又是一個list。

要拿到'php'可以寫s[2][1],因此s可以看成是一個二維數組。累死的還有三維、四維……

如果list中一個元素也沒有,就是一個空的list,長度為0。

tuple

另一種有序列表叫元組:tuple。(tuple=( , , ))。tuple一旦初始化就不能修改:

>>> classmates = ('Michael', 'Bob', 'Tracy')
現在classmates這個tuple不能變了,也沒有append(),insert()這樣的方法。其他擷取元素的方法和list一樣,可以正常使用classmates[0],classmates[-1],但不能複製成另外的元素。因為tuple不可變,所以代碼不可變。

tuple陷阱:當定義一個tuple時,在定義的時候,tuple就必須被確定下來,如:

>>> t = (1, 2)>>> t(1, 2)
要定義一個空的tuple,可以寫成():

>>> t = ()>>> t()
但是,定義一個只有一個元素的tuple時,必須要加一個逗號,來消除歧義(因為當t=(1)時,定義的不是tuple,而是1這個數):

>>> t = (1,)>>> t(1,)
Python在顯示只有一個元素的tuple時,也會加一個逗號。

“可變的”tuple:

當tuple內涵list類元素時,list內元素可變:

>>> t = ('a', 'b', ['A', 'B'])>>> t[2][0] = 'X'>>> t[2][1] = 'Y'>>> t('a', 'b', ['X', 'Y'])
這是因為,變的是list內元素,而tuple指向的list並沒有變成其他的list。所謂的“不變”是說,tuple每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list就不能改成指向其他對象,但指向的這個list本身是可以變的。(list內可變,指向的list不可變)

條件判斷

基本語句:

if 條件 :    執行語句elif 條件 :    執行語句else :    執行語句
elif是else if的縮寫。注意不要少寫了冒號。例如:

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

input()

有下面程式:

birth = input('birth: ')if birth < 2000:    print('00前')else:    print('00後')
輸入1982,結果報錯。

這是因為input()返回的資料類型是str,str不能直接和整數比較,必須先把str轉換成整數。int()函數完成了這件事:

s = input('birth: ')birth = int(s)if birth < 2000:    print('00前')else:    print('00後')
再次運行,得到正確結果。但是如果輸入abc,又會錯誤,,因為int()函數發現一個字串不是合法數字時就會報錯。

同樣float()將整數和字串轉換為浮點數。

迴圈

Python的迴圈有兩種,一種是for...in迴圈,依次把list或tuple中的每個元素迭代出來:

names = ['Michael', 'Bob', 'Tracy']for name in names:    print(name)
range(n)函數可以產生一個整數序列,再通過list函數就可以產生list。整數範圍為0~n-1。

>>> list(range(5))[0, 1, 2, 3, 4]
利用range,可以計算1~100的和:

sum = 0for x in range(101):    sum = sum + xprint(sum)
range還可以指定起始數值:
>>>for num in range(2,6):           print(num)2345
另外,range可以指定步長,在第三個數值標明步長:
>>>for num in range(2,10,2)           print(num)2468
即在2~9範圍內每次加2。
第二種迴圈是while迴圈,只要條件滿足就一直迴圈,條件不滿足時退出。

sum = 0n = 99while n > 0:    sum = sum + n    n = n - 2print(sum)

dict和setdict

dict是python裡的dictionary,即是字典的意思,可以存放key和對應的value,便於搜尋。

初始化dict:

>>>d={'a':95,'b':85,'c':5}>>>d['a']95

還可以直接添加:

>>>d['d']=75>>>d['d']75
可以直接修改key對應的value:

>>>d['a']=55>>>d['a']55
如果key不存在,程式就會報錯,要確定key存在不存在,有兩種方法:

第一種是通過in:

>>>'e' in dFalse
第二種是get()函數,如果key不存在返回None,或者自己指定的數值:


>>>d.get('e')>>>d.get('e',0)0
要刪除一個key,可以用pop(key),對應的value也會被刪除:

>>>d.pop('a')95>>>d{'b':85,'c':5,'d'75}
注意:dict的key必須是不可變的,在Python中,字串、數字都是不可變的,而list可變,所以list不可以作為dict的key:

>>> key = [1, 2, 3]>>> d[key] = 'a list'Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: unhashable type: 'list'

set

set和dict一樣也是儲存一組key,但不同的是不儲存value,所以set裡的key值也必須是唯一的。

要建立一個set,需要提供一個list作為輸入集合:

>>> s = set([1, 2, 3])>>> s{1, 2, 3}
注意,傳入的[1,2,3]是一個list,而顯示的{1,2,3}則表明set裡有1,2,3這三個元素。
重複元素在set中被自動過濾:

>>> s = set([1, 1, 2, 2, 3, 3])>>> s{1, 2, 3}
可以使用add(key)向set中添加元素:

>>> s.add(4)>>> s{1, 2, 3, 4}>>> s.add(4)>>> s{1, 2, 3, 4}
使用remove(key)移除元素:

>>> s.remove(4)>>> s{1, 2, 3}

set可以看成是數學上無序和無重複元素的集合,因此可以使用交集、並集等操作(&、|)
>>> s1 = set([1, 2, 3])>>> s2 = set([2, 3, 4])>>> s1 & s2{2, 3}>>> s1 | s2{1, 2, 3, 4}









































著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.