python基礎認識
Python基礎
一. 簡介
Python是著名的“龜叔”Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個程式語言。豆瓣,Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。
二. 優缺點
優點:優雅、明確、簡單、跨平臺。
缺點:執行速度慢,因為Python是解釋型語言,你的程式碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時。不能加密,如果要釋出你的Python程式,實際上就是釋出原始碼。
三. 應用領域
首選是網路應用,包括網站、後臺服務等等;其次是許多日常需要的小工具,包括系統管理員需要的指令碼任務等等;另外就是把其他語言開發的程式再包裝起來,方便使用。
四. 安裝
在Windows上安裝Python,從Python的官方網站下載Python 3.7,特別要注意勾上Add Python 3.7 to PATH
,然後點“Install Now”即可完成安裝。安裝成功後,開啟命令提示符視窗,敲入python後,會出現兩種情況:
1:你看到提示符>>>
就表示我們已經在Python互動式環境中了,可以輸入任何Python程式碼,回車後會立刻得到執行結果。現在,輸入exit()
並回車,就可以退出Python互動式環境(直接關掉命令列視窗也可以)。
a) 2. ‘python’ 不是內部或外部命令,也不是可執行的程式或批處理檔案。這是因為Windows會根據一個Path
的環境變數設定的路徑去查詢python.exe
,如果沒找到,就會報錯。如果在安裝時漏掉了勾選Add Python 3.7 to PATH
,那就要手動把python.exe
檔案格式:當我們編寫Python程式碼時,我們得到的是一個包含Python程式碼的以.py
為副檔名的文字檔案
直譯器:當我們從Python官方網站下載並安裝好Python 3.x後,我們就直接獲得了一個官方版本的直譯器:CPython。這個直譯器是用C語言開發的,所以叫CPython。在命令列下執行python
就是啟動CPython直譯器。
五. 基礎語法
1:python 進入互動模式
2:exit() 退出互動模式
3:name=input('plase input') 輸入
4:’hello’*3 得到hellohellohello
5:print(‘hello’) 列印字串輸出
6:字串連線的幾種方法
1:print('hello','world') 輸出hello world
2:print('hello'+'world') 輸出helloworld
3:print('hello''world') 輸出helloworld
4:print('%s%s'%('hello','world')) 輸出helloworld
str=123 print('%s%s'%('hello',str) 輸出helloworld
5:list=['hello','world'] print(''.join(list)) 輸出helloworld
7:註釋
# 單行註釋
‘’’ 內容‘’’或者”””內容””” 多行註釋,三個單引或者雙引號
六. 資料型別
字串str、布林型別bool、整數int、浮點數float、數字、列表list、元組tuple、字典dict、日期datetime
字串:
使用單引號,雙引號,三引號(‘’’)
print('hello\'world') 轉義單引號
print(r'hello\'world') 加r表示不轉義
print('''hello
world''') #換行
布林型別:
True ,False,注意大小寫
and、or和not運算
七. 空值
空值是Python裡一個特殊的值,用None
表示。None
不能理解為0
,因為0
是有意義的,而None
是一個特殊的空值
八. 數字型別轉換
int(x [,base]) 將x轉換為一個整數
float(x ) 將x轉換到一個浮點數
str(x) 將物件x轉換為字串
repr(x) 將物件x轉換為表示式字串
eval(str) 用來計算在字串中的有效Python表示式,並返回一個物件
tuple(s) 將序列s轉換為一個元組
list(s) 將序列s轉換為一個列表
chr(x) 將一個整數轉換為一個字元
unichr(x) 將一個整數轉換為Unicode字元
ord(x) 將一個字元轉換為它的整數值
hex(x) 將一個整數轉換為一個十六進位制字串
oct(x) 將一個整數轉換為一個八進位制字串
九. 數字函式
abs(x) 返回數字的絕對值,如abs(-10) 返回 10
ceil(x) 返回數字的上入整數,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回數字的絕對值,如math.fabs(-10) 返回10.0
floor(x) 返回數字的下舍整數,如math.floor(4.9)返回 4
max(x1, x2,...) 返回給定引數的最大值,引數可以為序列。
min(x1, x2,...) 返回給定引數的最小值,引數可以為序列。
modf(x) 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。
round(x [,n]) 返回浮點數x的四捨五入值
十. 列表
定義:list = ['Michael', 'Bob', 'Tracy']
長度:len(list)
倒轉:list.reverse()
排序list.sort([func])
統計次數:list .count(obj)
找出某個值第一個匹配項的索引位置:list.index(obj)
找出某個值是否存在:obj in list 存在返回True,否則False
迴圈遍歷:for x in list
查詢元素:
list[0] 輸出 'Michael'
list[-1] 輸出 'Tracy'
插入元素:
list.insert(1, 'Jack') 索引號為1的位置插入
list. append ('Jack') 在列表末尾新增新的物件
刪除元素:
list.pop() 刪除末尾一個元素
list.pop(1) 刪除索引為1的元素
del list[1] 刪除索引為1的元素
list.remove(obj) 移除列表中某個值的第一個匹配項
替換元素:list[1] = 'Sarah' 替換索引為1的元素為Sarah
十一. 元組
元組與列表類似,不同之處在於元組的元素不能修改;元組使用小括號(),列表使用方括號[];
元組中只有一個元素時,需要在元素後面新增逗號,例如:tup1 = (50,);
元組與字串類似,下標索引從0開始,可以進行擷取,組合等。
定義:tup1 = ('physics', 'chemistry', 1997, 2000);
查詢:tup1[2] 輸出1997
找出某個值是否存在:obj in tup1 存在返回True,否則False
迴圈遍歷:for x in tup1
個數:len(tup1)
連線:tup1+tup2
刪除元組:del tup1 元組值不允許刪除
返回元組中元素最大值max(tuple)
返回元組中元素最小值min(tuple)
將列表轉換為元組tuple(seq)
十二. 字典
定義:dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'};
修改:dict["age"]=27
增加:dict["school"]="wutong"
刪除:
del dict[‘age’] 刪除字典元素
dict.clear() 清空
del dict 刪除字典
方法:
len(dict) 計算字典元素個數,即鍵的總數。
str(dict) 輸出字典可列印的字串表示。
type(variable) 返回輸入的變數型別,如果變數是字典就返回字典型別。
radiansdict.copy() 返回一個字典的淺複製
radiansdict.fromkeys() 建立一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
radiansdict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值
radiansdict.has_key(key) 如果鍵在字典dict裡返回true,否則返回false
radiansdict.items() 以列表返回可遍歷的(鍵, 值) 元組陣列
radiansdict.keys() 以列表返回一個字典所有的鍵
radiansdict.update(dict2) 把字典dict2的鍵/值對更新到dict裡
radiansdict.values() 以列表返回字典中的所有值
十三. 日期和時間
獲取時間: time.localtime(time.time())
oneday = datetime.timedelta(days=1)
#今天,2014-03-21
today = datetime.date.today()
#昨天,2014-03-20
yesterday = datetime.date.today() - oneday
#明天,2014-03-22
十四. IF條件語句
age=input()
age=int(age)
if age<10:
print('小')
elif age<100:
print('中')
else:
print('大')
For迴圈語句
#range()函式,可以生成一個整數序列,再通過list()函式可以轉換為list
list=list(range(5))
sum=0
for x in list:
sum+=x
print(sum) #10
十五. while迴圈語句
sum=0
n=3
while n>0:
sum+=n
n-=1
print(sum)
小提示:break
語句可以在迴圈過程中直接退出迴圈,而continue
語句可以提前結束本輪迴圈,並直接開始下一輪迴圈。通常都必須配合if
語句使用。
Set去重:set([1, 1, 2, 2, 3, 3]) {1,2,3}
十六. 函式
定義:
一個函式要使用def
語句,依次寫出函式名、括號、括號中的引數和冒號:
,然後,在縮排塊中編寫函式體,函式的返回值用return
語句返回。
空函式:
還沒想好怎麼寫函式的程式碼,就可以先放一個pass
來作為佔位符。
Ex:
# import math
語句表示匯入math
包,並允許後續程式碼引用math
包裡的函式。
import math
def mydef(x):
#pass #空函式
return math.ceil(x)
print(mydef(1.25))
十七. 切片擷取
List[0:3]
表示,從索引0
開始取,直到索引3
為止,但不包括索引3
。即索引0
,1
,2
,正好是3個元素。
十八. 迭代迴圈
預設情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同時迭代key和value,可以用for k, v in d.items()
。
enumerate
函式可以把一個list變成索引-元素對
ex;for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
十九. 判斷資料型別
isinstance(data, (int, str, types.LongType, float)) True/False
type(obj) 返回資料型別
列表生成式
條件迴圈生成
s=[x*x for x in range(5) if x%2==0]
print(s) #[0, 4, 16]
雙重迴圈生成
s=[m+n for m in 'ABC' for n in 'XYZ']
print(s) #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
二十:高階函式:
一個函式接收另一個函式作為引數,還可以把函式作為結果值返回
Ex: def add(x,y,f):
return f(x)+f(y)
print(add(1,-1,abs)) #2
map()
:傳入的函式依次作用到序列的每個元素,結果作為新的Iterator返回。
print(list(map(str,[1,2,3]))) #將陣列數字轉化為字串
reduce()
:把結果繼續和序列的下一個元素做累積計算
from functools import reduce
def fn(x,y):
return x*10+y
print(reduce(fn,[1,2,3])) #將陣列元素合併成123
filter()
:用是從一個序列中篩出符合條件的元素,和map()
不同的是,filter()
把傳入的函式依次作用於每個元素,然後根據返回值是True
還是False
決定保留還是丟棄該元素。
def not_empty(s):
return s and s.strip() #去除空字串
print(list(filter(not_empty,['1','',None]))) #['1']
sorted()
函式就可以對list進行排序,引數分別是list,處理函式,反向排序
sorted(['bob', 'Zoo', 'Credit'], key=str.lower, reverse=True)
函式物件有一個__name__屬性,可以拿到函式的名字
二十一:面向物件類和例項
類:
定義類是通過class
關鍵字,class後面緊接著是類名,類名通常是大寫字母的開頭的單詞,緊接著就是(object)
,表示該類是從哪個類繼承下來的,通常如果沒有合適的類,就是用object類,這是所有類最終都會繼承的類。
Ex:class Student(object):
pass
例項:
定義好了Student
類,就可以根據Student
類創建出Student
的例項,建立例項是通過類名+()實現的
Ex:bart=Student()
注意1:由於類起到模板的作用,因此可以在建立例項的時候,把一些我們認為必須要繫結的屬性強制寫進去,通過定義一個特殊的__init__
方法,在建立例項的時候,就把name
,score
等屬性綁上去
構建:class Student(object):
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print(‘%s: %s’ %(self.name: self.score))
訪問:
Lisa=Student(‘lisa’ , ’88’)
Lisa.name //lisa
Lisa.print_score()
修改:
Lisa.score=’99’
print(Lisa.score) //99
注意2:注意到__init__
方法的第一個引數永遠是self
,表示建立的例項本身,因此,在__init__
方法內部,就可以把各種屬性繫結到self
,因為self
就指向建立的例項本身。
有了__init__
方法,在建立例項的時候,就不能傳入空的引數了,必須傳入與__init__
方法匹配的引數,但self
不需要傳,Python直譯器自己會把例項變數傳進去。
注意3:類是建立例項的模板,而例項則是一個個具體的物件,各個例項擁有的資料都互相獨立,互不影響。方法就是與例項繫結的函式,和普通函式不同,方法可以直接訪問例項的資料。對於兩個例項變數,雖然它們都是同一個類的不同例項,但擁有的變數名稱可能不同。
二十二:面向物件訪問限制
如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__
,在Python中,例項的變數名如果以__
開頭,就變成了一個私有變數(private),只有內部可以訪問,外部不能訪問
Ex:class Student(object):
def __init__(self,name):
self.__name=name