變數
在Python中,變數是用來儲存資料的。它不需要像C語言中需要對變數的型別進行定義,Python會根據賦值自動確認變數的型別。
變數的命名規則 :
- 必須以字母或下劃線開頭。
- 只能包含數字、字母、下劃線。
變數只是一個名稱,用於與資料進行聯絡。
定義變數時,現在記憶體空間中申請一塊地址用於存放資料。如果把這個地址比作房間,資料是房間中的東西,而變數名是房間號。
呼叫變數時,先透過變數找到房間(地址),再取出其中的東西(資料)。
可以透過id()
獲取資料的地址,透過type()
獲取資料的型別。
要注意的是:當相同的值賦給不同變數時,地址不同。例如 :a = 520 b = 520
這兩個值的地址是不同的。但如果是a = b =520
a和b擁有相同的地址,相當於是將520
這個資料同時指向了a和b。
垃圾回收機制
這個機制的存在是為了自動管理記憶體,釋放不在使用的物件所佔用的空間。相較於C語言中使用free()
進行釋放空間更加簡便。
- 引用計數 :每個物件都有一個引用計數,當引用計數為 0 時,物件被回收。
- 標記 - 清除 :定期對物件進行標記,並清除那些不可達的物件。使用
del
,例如 :del a
。
一般在以下情況中會觸發立即回收機制 :
- 當程式中分配的記憶體達到一定閾值時,會觸發垃圾回收。
- 當執行某些特定操作時,如刪除物件、退出程式等,也會觸發垃圾回收。
小整數池
這是Python中的一個特性,是基於垃圾回收機制產生的,有助於減少記憶體消耗和提高效能,要注意的是在Python3中是隻對範圍在 [-5, 256] 之間的整數生效。但是在Pycharm中,對這個特性進行了擴充,只要是相同的資料都會使用相同的地址。
在 Python 中,為了避免頻繁地建立和銷燬小整數物件,提高記憶體利用效率,Python 內部維護了一個小整數池。
對於範圍在 [-5, 256] 之間的整數,當你在程式中多次使用這些整數時,實際上是在複用同一個物件。這是因為 Python 在啟動時就預先建立了這些小整數的物件,並將它們儲存在小整數池中。
當你使用超出這個範圍的整數時,每次都會建立新的物件。
函式
定義函式
Python中透過def
進行函式的定義。
def 函式名(引數列表):
# 函式體
語句
例如 :定義一個函式用於求1~n數字的和。
def sum(n):
total = 0
for i in range(1, n + 1):
total += i
return total
呼叫函式
Python中包含許多函式,執行dir(__builtins__)
可以檢視Python中所有的內建函式。
輸入輸出函式
-
print()
輸出括號中內容 -
input()
將鍵入的內容存入變數
型別轉換函式 -
int()
將值轉換成整數 -
str()
將值轉換成浮點數 -
str()
將值轉換成字串 -
list()
、tuple()
、dict()
、set()
用來把其他型別的資料轉換成列表、元組、字典和集合;或者建立空列表、空元組、空字典和空集合。 -
eval()
用來計算字串或位元組串的值;也可以用來實現型別轉換的功能,如把字串形式轉換成列表、元組、字典、集合等。例如 :
>>> eval('3+5')
8
>>> eval('[1,2,3,4,5]')
[1, 2, 3, 4, 5]
>>> list('[1,2,3,4,5]')
['[', '1', ',', '2', ',', '3', ',', '4', ',', '5', ']']
- 內建函式
type()
和isinstance()
可以判斷資料型別。 sorted()
對列表、元組、字典、集合或其他可迭代物件進行排序並返回新列表。例如 :
>>> x = ['aaaa', 'bc', 'd', 'b', 'ba']
>>> sorted(x, key=lambda item: (len(item), item))
#先按長度排序,長度一樣的正常排序
['b', 'd', 'ba', 'bc', 'aaaa']
range()
語法格式為range([start,] end [, step] )
,返回具有惰性求值特點的range物件,其中包含左閉右開區間[start,end)內以step為步長的整數。引數start預設為0,step預設為1。
>>> range(5) #start預設為0,step預設為1
range(0, 5)
>>> list(_)
[0, 1, 2, 3, 4]
>>> list(range(1, 10, 2)) #指定起始值和步長
[1, 3, 5, 7, 9]
>>> list(range(9, 0, -2)) #步長為負數時,start應比end大
[9, 7, 5, 3, 1]
Python的內建函式還有許多。
關於函式的引數,Python與C語言幾乎相同。
遞迴
也與C語言幾乎相同。即在返回值中繼續呼叫函式。
def sum(n) :
if n == 1:
return 1
else :
return n + sum(n - 1)