程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python筆記(一)

編輯:Python

Python 基礎

數據結構

  1. 整數

對於很大的數,例如10000000000,很難數清楚0的個數。Python允許在數字中間以_分隔,因此,寫成10_000_000_00010000000000是完全一樣的。十六進制數也可以寫成0xa1b2_c3d4

注意:Python的整數沒有大小限制,而某些語言的整數根據其存儲長度是有大小限制的

  1. 浮點數

對於很大或很小的浮點數,必須用科學計數法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e80.000012可以寫成1.2e-5,等等。

  1. 字符串
    • 字符串是以單引號'或雙引號"括起來的任意文本,比如'abc'"xyz"等等。
    • 轉義字符`可以轉義很多字符,比如n表示換行,t表示制表符,字符`本身也要轉義,所以\表示的字符就是``。
    • 為了簡化,Python還允許用r''表示''內部的字符串默認不轉義。
    • 如果字符串內部有很多換行,用n寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''的格式表示多行內容:
 print('''line1
line2
line3''')
  • 對於單個字符的編碼,Python提供了ord()函數獲取字符的整數表示,chr()函數把編碼轉換為對應的字符:
 >>> ord('A')
65
>>> chr(25991)
'文'
  • 要計算str包含多少個字符,可以用len()函數,如果換成byteslen()函數就計算字節數:
 >>> len('ABC')
3
>>> len('中文')
2
>>> len(b'ABC')
3
>>> len(b'xe4xb8xadxe6x96x87')
6
>>> len('中文'.encode('utf-8'))
6
  • 在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8編碼。由於Python的字符串類型是str,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str變為以字節為單位的bytes。Python對bytes類型的數據用帶b前綴的單引號或雙引號表示,要注意區分'ABC'b'ABC',前者是str,後者雖然內容顯示得和前者一樣,但bytes的每個字符都只占用一個字節。
 # 以Unicode表示的str通過encode()方法可以編碼為指定的bytes
>>> 'ABC'.encode('ascii')  # 純英文的str可以用ASCII編碼為bytes,內容是一樣的。
b'ABC'
>>> '中文'.encode('utf-8') # 含有中文的str可以用UTF-8編碼為bytes。在bytes中,無法顯示為ASCII字符的字節,用x##顯示。
b'xe4xb8xadxe6x96x87'
>>> '中文'.encode('ascii') # 含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
#如果我們從網絡或磁盤上讀取了字節流,那麼讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'xe4xb8xadxe6x96x87'.decode('utf-8')
'中文'
  • 由於Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
 #!/usr/bin/env python3
# -*- coding: utf-8 -*-

 第一行注釋是為了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個注釋;
 第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
4. 空值

空值是Python裡一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。

  1. 變量

在Python中,等號=是賦值語句,可以把任意數據類型賦值給變量,同一個變量可以反復賦值,而且可以是不同類型的變量。這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。

 a = 123 # a是整數
print(a)
a = 'ABC' # a變為字符串
print(a)
# 這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。

list和tuple

  1. list
    • list是一種有序的集合,可以隨時添加和刪除其中的元素。
    • 用len()函數可以獲得list元素的個數。
    • 用索引來訪問list中每一個位置的元素,記得索引是從0開始的。
    • 如果要取最後一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最後一個元素,以此類推,可以用-2-3做索引獲取倒數第2個、倒數第3個。
    • list是一個可變的有序表,可以往list中追加(append())元素到末尾,也可以把元素插入(insert())到指定的位置,比如索引號為1的位置:
 classmates.append('Adam')
classmates.insert(1, 'Jack')
classmates.pop()  # 刪除list末尾的元素
classmates.pop(1) # 刪除指定位置的元素
  • 要把某個元素替換成別的元素,可以直接賦值給對應的索引位置。
  • list裡面元素的數據類型可以不同,元素也可以為另一個list。
    1. tuple
  • tuple和list非常類似,但是tuple一旦初始化就不能修改,沒有append()insert()這樣的方法。
  • 不可變的tuple有什麼意義?
 因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。
* tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來。但是,要定義一個只有1個元素的tuple,必須加一個逗號`,`,來消除歧義:
 t = (1) # 定義的不是tuple,是1這個數
t = (1,) # 定義只包含一個元素的tuple的正確寫法
  • tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。如果tuple中有個元素的數據類型為list,則該元素指向這個list,不能改成指向其他對象,但指向的這個list本身是可變的!

可變對象和不可變對象

str是不可變對象,而list是可變對象。

對於可變對象,比如list,對list進行操作,list內部的內容是會變化的,比如:

>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']

而對於不可變對象,比如str,對str進行操作呢:

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

雖然字符串有個replace()方法,也確實變出了'Abc',但變量a最後仍是'abc',應該怎麼理解呢?

對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。

條件判斷

  1. if語句的完整形式
 if <條件判斷1>:
<執行1>
elif <條件判斷2>:
<執行2>
elif <條件判斷3>:
<執行3>
else:
<執行4>
# 注意不要少寫了冒號:
  1. input()引發的判斷問題

input()返回的數據類型是str,如果想用input()輸入的數據做判斷條件,需要先進行轉換,Python提供了int()函數將str轉換為整數,當int()函數發現一個字符串並不是合法的數字時就會報錯。

循環

  1. for x in ...循環,依次把list或tuple中的每個元素代入變量x,然後執行縮進塊的語句。
  2. while循環,只要條件滿足,就不斷循環,條件不滿足時退出循環。

dict和set

  1. dict
    • 使用鍵-值(key-value)存儲,具有極快的查找速度。
    • 一個key只能對應一個value,如果key不存在,在dict中查找會報錯。
 避免key不存在的錯誤,有兩種辦法:
 > * 通過in判斷key是否存在:
>
> ```python
> >>> 'Thomas' in d
> False
> ```
> * 通過dict提供的`get()`方法,如果key不存在,可以返回`None`,或者自己指定的value:
>
> ```python
> >>> d.get('Thomas')
> >>> d.get('Thomas', -1)
> -1
> ```
* 刪除一個key,用`pop(key)`方法,對應的value也會從dict中刪除。
* dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key。
2. set
* set和dict類似,也是一組key的集合,唯一區別是set沒有存儲對應的value。
* set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作。
* 要創建一個set,需要提供一個list作為輸入集合:
 >>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
  • 通過add(key)方法可以添加元素到set中,通過remove(key)方法可以刪除元素。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved