文章目錄
Python筆記
解釋型的語言,則必須把源碼發佈出去
代碼少的代價是運行速度慢
C語言適合開發那些追求運行速度、充分發揮硬件性能的程序
解釋器或者編譯器就是負責把符合語法的程序代碼轉化爲CPU能夠與執行的機器碼,然後執行。
變量本身類型不確定的語言變量是`動態語言`,靜態語言在定義變量時必須制定變量類型
一、介紹
Python之父Guido van Rossum(荷蘭)龜叔
代碼少的代價是運行速度慢
C語言適合開發那些追求運行速度、充分發揮硬件性能的程序,而Python是用來編寫應用程序的高級編程語言。
Python就爲我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池";除了內置的庫外,Python還有大量的第三方庫
- 應用:
首選是網絡應用,包括網站、後臺服務等等;
其次是許多日常需要的小工具,包括系統管理員需要的腳本任務等等;
另外就是把其他語言開發的程序再包裝起來,方便使用。
- 缺點:
第一個缺點就是運行速度慢。Python是解釋型語言,代碼在執行時會一行一行地翻譯成CPU能理解的機器碼。
第二個缺點就是代碼不能加密。解釋型的語言,則必須把源碼發佈出去。
退出python交互模式:exit()
或者ctrl+z
Python交互模式的代碼是輸入一行,執行一行,而命令行模式下直接運行.py
文件是一次性執行該文件內的所有代碼
二、簡單的數據類型和變量
1. 基本語法
1.在Python中嚴格區分大小寫
2.Python中的每一行就是一條語句,每條語句以換行結束
3.Python中每一行語句不要過長(規範中建議每行不要超過80個字符)
4.一條語句可以分多行編寫,多行編寫時語句後邊以\結尾
5.Python是縮進嚴格的語言,所以在Python中不要隨便寫縮進
6.在Python中使用#來表示註釋,#後的內容都屬於註釋,註釋的內容將會被解釋器所忽略
我們可以通過註釋來對程序進行解釋說明,一定要養成良好的編寫註釋的習慣
註釋要求簡單明瞭,一般習慣上#後邊會跟着一個空格
2. 編碼問題
Unicode將所有語言都統一到一套編碼裏
ASCII碼是一個字節,Unicode編碼通常是兩個字節
把Unicode編碼轉化爲“可變長編碼”的UTF-8編碼,常用英文字母是一個字節,漢字通常是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。
ASCII編碼可以看成UTF-8編碼的一部分
計算機內存中,統一使用Unicode編碼,在需要保存到硬盤或者傳輸的時候,就轉化爲UTF-8編碼
ASCII碼的範圍是:0-255或-128-+127
純英文的str
可以用ASCII
編碼爲bytes
,,中文的str
可以用UTF-8
編碼爲bytes
中文的編碼超過了ASCII的編碼範圍,好像是句廢話
3.變量命名
- 標識符中可以含有字母、數字、_,但是不能使用數字開頭
- 標識符不能是Python中的關鍵字和保留字,不使用Python中的函數名作爲標識符
- 命名規範:
-
在Python中注意遵循兩種命名規範:
-
下劃線命名法
所有字母小寫,單詞之間使用_分割
-
帕斯卡命名法(大駝峯命名法)
首字母大寫,每個單詞開頭字母大寫,其餘字母小寫
-
4. 註釋
- 以
#
號開頭,註釋掉一行代碼 - 以
"""
或者'''
三對引號,註釋掉多行代碼 - 中文註釋
#coding = utf-8
python區分大小寫,使用縮進來組織代碼塊(4個縮進)
Python的基本數據類型:數字、字符串、列表、字典、元組
5. 簡單數據類型和變量
1、數值:
-
整數
Python的整數沒有大小限制
如果數字的長度過大,可以使用下劃線作爲分隔符
-
浮點數(用e表示10,如:1.23e9)
Python中所有的小數都是float類型,沒有大小限制,但超出一定範圍就直接表示爲
inf
(無限大) -
複數
2、字符串(在Python 3中,是以Unicode編碼的)
-
以單引號或者雙引號括起來的內容
-
ord()
函數:獲取字符的整數表示 -
chr()
函數:把編碼轉換成對應的字符 -
轉義字符\,python內部允許使用
r''
表示''
內的字符串默認不轉義 -
允許用
'''...'''
的格式表示多行內容 -
輸出格式化字符串
-
與c語言相同,用%引導
例:
print('Hi,%s have %d' %('you',1000))
%s會把任意數據類型轉化爲字符串
%%
表示一個% -
format()
函數它會用傳入的參數依次替換字符串內的佔位符
{0}
、{1}
……需要從0開始例:
print('{0} and {1}'.format(12,21))
-
3、布爾值(ture
和false
)
布爾值可以用and
(與運算)or
(或運算) not
(非運算) 運算
4、空值
空值用None表示
5、變量
變量名必須是數字、英文和下劃_
線的組合,不能用數字開頭
6、常量
通常用大寫的變量名錶示常量(實際仍是變量)
7、bytes
如果需要在網絡上傳輸,或者保存到磁盤上,就需要把str
轉換爲以字節爲單位的bytes
。
在網上或磁盤上讀取數字流,讀到的數據是bytes
。
bytes的每個字符都只佔一個字節。
表示:b''
例:x = b'abc'
(1) 將str
轉化爲bytes
以Unicode表示的str
通過encode()
可以編碼爲指定的bytes
例:'abc'.encode('ascii')
(2) 將bytes
轉化爲str
通過decode()
方法
例:b'abc'.decode('ascii')
若bytes
中包含無法解碼的字節,decode()
會報錯,若bytes
中只有一小部分無效,可以傳入 errors='ignore'
忽略錯誤的字節
計算字符數的長度
len()
函數,str
計算的是字節數,bytes
計算的是字節數
例:len('abc')
len(b'abc')
在保存源代碼時,保存爲UTF-8編碼
取源代碼時,爲了讓它按UTF-8編碼讀取,通常在文件開頭加上
#!/usr/bin/env python3 //告訴Linux/OS X系統,這是一個Python可執行程序
#-*- coding: utf-8 -*- //告訴python解釋器,按照UTF-8編碼讀取源代碼
保存時也需保存爲UTF-8編碼
三、序列
list和tuple(內置的有序集合)
1. 列表:list:[]
有序列表(像數組與結構體的結合)
內置的一種數據類型,list是一種有序的集合,可以隨時添加和刪除其中的元素
列表裏面的數據類型可以不同,也可以含有列表(看成多維數組)
操作:
-
增:
a.append(elem)
加到末尾a.insert(site,elem)
添加到指定位置 -
刪:
a.pop(site)
不加位置,默認末尾 -
改:
賦值給對應的索位置
-
查:
索引與數組相同是從0開始
a[site]
,查看site處元素,site可以爲-1,即查詢最後一個元素
2. 元組: tuple:()
(有序列表)
tuple一旦初始化就不能更改,查詢與list
相同
-
只有一個元素的tuple
==定義時必須加一個逗號
,
==以消除歧義a = (1,)
若
a = (1)
定義的是1
這個數 -
“可變的”tuple(實際是list在變):
tuple中包含list:a = tuple(‘a’,‘b’,[‘A’,‘B’])
tuple包含三個元素,
a,b和list
四、字典 dic:{}
1. 特點
- 字典是一種可變的容器,可以存儲任意類型的數據
- 字典中每個數據都是用‘鍵’(key)進行索引,而不像序列可以用下標進行索引
- 字典的數據沒有先後順序關係,字典的存儲是無序的
- 字典中的數據以鍵(key)-值(value)隊進行映射存儲,查找速度快
- 字典的鍵不能重複,且只能用不可變類型作爲字典的鍵。
表示方法:用{}括起來,以冒號(:)分割鍵-值對,各鍵值對用分號分隔開
例:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
2. 創建
**(1)創建空字典: **
d = {}
(2)創建非空字典:
d = {'name':'tarena','age':'15'}
(3)字典的構造函數 dict:
- dict() 創建一個空字典,等同於{}
- dict(iterable) 用可迭代對象初始化一個字典
- dict(**kwargs) 關鍵字傳參形式生成一個字典
3. 增
即把數據放入dict的方法:
-
(1)除了初始化時指定外
-
(2)通過key放入
d['Adam'] = 67
一個key只能對應一個value
4. 刪
刪除一個key:
- 用
pop(key)
方法,對應的value也會從dict中刪除
5. 要避免key不存在的錯誤:
-
(1)通過
in/not in
判斷key是否存在:'Thomas' in d
#如果存在返回True,否則返回False;not in 與in返回值相反 -
(2)通過dict提供的
get()
方法,如果key不存在,可以返回None
,或者自己指定的value:d.get('Thomas', -1)
dict的key必須是不可變對象
通過key計算位置的算法稱爲哈希算法(Hash)
五、集合set
1. 特點
- 集合是可變的容器
- 集合內的數據對象是唯一的,即沒有重複的key,重複元素在set中自動被過濾
- 集合是無序的存儲結構,集合中的數據沒有先後關係
- set的原理和dict一樣,集合內的元素必須是不可變對象
- 集合是可迭代的
- 集合是相當於只有鍵沒有值的字典(是一組key的集合,但不存儲value)
對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容這些方法會創建新的對象並返回
2. 創建
要創建一個set,需要提供一個list作爲輸入集合
(1)創建空的集合:
set() #set()創建一個空的集合
(2)創建非空集合:
s = {1,2,3} #集合中的三個整數1,2,3
(3)集合的構造函數 set:
- set()創建空集合
- set(iterable) 用可迭代對象創建一個新的集合對象
3. 增
- 通過
add(key)
方法 s.add(4)
4. 刪
- 通過
remove(key)
方法 s.remove(4)
5. 數學意義上的交集、並集等操作
- 交集:
s1 & s2
- 並集:
s1 | s2
五、判斷
if語句
-
python的if沒有括號,依靠縮進
-
if
與else
後有冒號:
if age >= 18: else:
-
elif
:(else if)
六、循環
1. for…in循環
for x in ...: #把每個元素帶入變量x,然後執行縮進語句
print(x)
[x * x for x in range(1, 11)]
for循環後面加上if判斷:[x * x for x in range(1, 11) if x % 2 == 0]
兩層循環:[m + n for m in 'ABC' for n in 'XYZ']
for
循環其實可以同時使用兩個甚至多個變量,比如dict
的items()
可以同時迭代key和value
for k, v in d.items(): print(k, '=', v)
2. while循環
與C語言同
3. 退出循環
- break:退出循環
- continue:退出當前循環
七、運算
1. 除法
10/3 #除法結果是浮點數
10//3 #除法結果是整數
10%3 #取餘運算,結果是整數