Python是一種至關高級的解釋性程序設計語言,完成同一個任務C語言可能須要幾千行代碼
Java要寫100行,Python可能只須要20行。php
用Python能夠作什麼?能夠作平常任務,好比自動備份你的MP3;能夠作網站,不少著名的網站包括YouTube就是Python寫的;能夠作網絡遊戲的後臺,不少在線遊戲的後臺都是Python開發的。總之就是能幹不少不少事啦。css
Python固然也有不能幹的事情,好比寫操做系統,這個只能用C語言寫;寫手機應用,只能用Swift/Objective-C(針對iPhone)和Java(針對Android);寫3D遊戲,最好用C或C++。java
可是,對於初學者和完成普通任務,Python語言是很是簡單易用的。python
python提供了完善的內置庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,用python開發,不少功能沒必要從零編寫,直接使用現成的便可。shell
除了內置庫外,Python還有大量第三方庫,也就是別人開發的,能夠直接使用的。固然若是你的代碼封裝的很好,也能夠做爲第三方庫給別人使用。數據庫
python適合開發網絡應用、平常小工具、科學計算等活動。swift
Python有兩個版本,2.x和3.x互不兼容,按需求安裝便可。
ruby
python解釋器:咱們寫的代碼會在解釋器上運行,相似JVM的機制,咱們安裝的標準解釋器是用C編寫的,稱爲CPython解釋器,另外有IPython 是基於CPython交互解釋器。還有Java寫的Jpython解釋器等等。咱們通常使用Cpython。bash
基本上有兩種操做Python的方式,命令行模式
和交互模式
。
命令行模式
就是正常的shell終端操做,網絡
python的語法採起縮進語句塊,不須要C、java的大括號區分
同一縮進的代碼被認爲是一個語句塊,通常咱們約定俗成使用4個空格爲一個縮進符,因此我建議你們將TAB設置爲4個空格,而不是縮進符
也不須要分號結尾
python中全部數據類型都是對象,python建立一個數據類型不須要定義和提早聲明,當一個變量賦值後就建立了它。
經常使用的數據類型
python能夠處理任意大小的整數,和matlab有殊途同歸之妙,數據類型並無固定的類型長度。
整數在程序中的寫法和數學寫法同樣
也就是小數,1.23
,3.14
等等,浮點數
的精度能夠規定
字符串
是用單引號' '
和雙引號" "
括起來的任意文本,事實上是字符的序列``list
,稍後咱們會講到
既然字符串是序列
,那麼它固然支持各元素位置的操做。
s='abcd' len(s)=4 s[0]='a' s[3]='d'
可使用序列的偏移量表示序列中的元素的索引。
序列中第一個元素索引爲0,以此類推。
序列也可以反向索引從,最後一個開始s[-1],至關於s[len(s)-1],即倒數第幾個。
s='abcd' s[-1]='d' s[-2]='c'
序列
中,咱們能夠在方括號中使用任何表達式
除了索引
,序列
還支持分片(slice)
s='abcd' s[1:3]='bc'
分片中,默認左邊界是0,默認右邊界是序列長度。
s[:3]='abc' s[1:]='bcd' s[:]='abcd' 做爲一個序列,字符串也支持拼接 s+'zxyz='abcdxyz'
字符串的某個字符不可以被改變,可是能夠新建字符串
s='abcd' s[1]='x'是錯誤的 能夠新建 n=s[1]+'x' python中,數字、字符串、元組都是不可變的。列表、和字典可變。
find()
find方法是字符串特有的字串查找方法
s='china' s.find('in')=3 將會返回找到的偏移地址。
replace()
是替換字符串內字符的方法。
s.replace('in','out')='chouta' s='china'//s並無改變。
split()
是分離方法
s='aaa,bbb,ccc' s.split(',')=['aaa','bbb','ccc']
將字符串序列分爲了有三個字符串的列表。
還有一些方法,使用dir(數據類型)查看對象的全部屬性和方法,使用help(方法)查看某方法功能。幫助內容與官方文檔一致,最好查詢方法就是使用的時候查看.
name='china' dir(name) help(name.split)
str(數字)
能夠將數字轉換爲字符串,int(string)能夠將字符串轉換爲數字等等
列表
是序列的一種,支持全部字符串的操做,惟一的區別返回的結果仍然是列表。
列表用方括號[]定義
s=['abc',123,3.14] len(s)=3 咱們仍然能夠對列表進行索引、切片等: s[1]=123 s[:-1]=['abc',123] s+[4,5,6]=['abc',123,3.14,4,5,6] s=['abc',123,3.14]s仍然沒有被改變
列表沒有固定大小,能夠根據須要增長和減少
append()
在列表末尾增長對象
pop()
丟棄列表內容。
sort()
列表排序,默認升序。
reverse()
列表反轉
s=[123,456,789] s.append(666) s=[123,456,789,666] s.pop(2) s=[123,456,666] s.reverse() s=[666,456,123] s.sort() s=[123,456,666]
列表支持嵌套,元素也能夠是另外一個列表
m=[[1,2,3],[4,5,6],[7,8,9]]
是一個3x3矩陣
m[1]=[4,5,6]
除了列表的方法,列表還提供了一個高級操做列表解析
使用列表解析能夠簡單的操做矩陣
col=[row[1] for row in m] =[2,5,8] 實際運用可能更復雜 col=[row[1]+1 for row in m if row[1]%2==0] =[3,9]
列表解析編寫在方括號中
可使用迭代器
G=(sum(row) for row in m) next(G)=6 next(G)=15
內置函數map()
,也會對各項對應位置進行運算
map(sum,m) =[6,15,24] map(min,m) =[1,4,7]
事實上。列表、集合、字典均可以使用解析。
元組
也是序列,但它具備不可變性,一旦初始化就不能修改,語法上它被編寫在圓括號中,支持任意類型、任意嵌套和常見的序列操做。
s=(1,2,3,4) len(t) =4
元組有特別方法
s.index(4) =3
即4 出如今偏移量3,4 appears at offset 3
s.count(4) =1
4只出現一次
元組存在的意義是完整性檢查,好比傳輸數據時保證程序其餘部分不會改變數據。
用{}花括號括起來,一個key對應一個value
索引和序列類似,不過不是數字而是key值 D['name']='zhangsan'
事實上咱們是在用key哈希映射鍵搜索值
重訪嵌套
D={'name': 'zhangsan','age': '20','job': ['dev','manager']} D[job] = ['dev','manager'] D[job][-1] ='manger'
鍵排序
D={b:'name',c:'job',a:'age',d:'gender;} 咱們通常取key並新建列表 ks=list(D.keys()) ks.sort() for key in keys: print(key,'=>',D[key])
也可使用內置函數sorted()
for key in sorted(D) print(key,'=>'D[key]
與字典相似,只有鍵key,但沒有值 value而且不重複
for循環
自帶迭代器,能夠步進循環列表、字符串、對象等
for i in range(2,100,2): x=sum(i) print(sum) 若是是字符串s='abcd' for i in s: print(i) 列表l=['name',2,3,4] for i in l: print(i) 畫一個楊輝三角 for i in range(1,10): print('*'*i+"\n")
while循環
x=4 while (x>4): x-- print(x)
if-else
語句
a=100,b=10 if a<b: print(a) elif a==b: print(a,b) else : print(b)
break
提早退出當前循環
continue
跳過本次循環
python中的函數
很是簡單
def Fun_Name (para1,para2) if xxx return xxx else xxx return xxx
返回能夠時任何對象,由於python中全部東西都是對象,能夠直接賦值給某對象。
x=Fun_name(para1,para2) 而後使用x
空函數
不作任何事情
def name()
pass
語句什麼都不作,那有什麼用?實際上pass
能夠用來做爲佔位符,好比如今還沒想好怎麼寫函數的代碼,就能夠先放一個pass
,讓代碼能運行起來。
返回多個值
固然是能夠的,好比遊戲裏要返回一個三維座標
import math
def move(x,y,z,step,angle) nx=x+step*math.cos(angle) ny=y+step*math.sin(angle) nz=z+step*math.tan(angle) return nx,ny,nz
其中import math
表示導入math包,使用封裝好的函數
獲得座標咱們就能夠賦值了
x,y,z=move(100,100,0,60,math.pi/3) print(x,y,z)
其實徹底可使用一個對象接收
role=move(100,100,0,60,math.pi/3) print(role)
效果和上面同樣
關於參數,正確傳參很是重要,pyrhon函數參數有默認參數
、可變參數
和關鍵字參數
。
默認參數
定義時
def funame (x,y=2) 使用時能夠,僅使用一個參數x,參數y將默認爲2 funame(x) 若是使用funame(x,y)參數值將爲傳入值
默認參數下降了使用函數的難度,默認參數必須指向不變對象
可變參數
傳入參數的個數時可變的,咱們首先想到將參數做爲一個list傳入 如:
def cal(numbers) x=0 for n in numbers x+=sum(n) return (x)
可是要在使用前組裝一個list或tulple
咱們可使用可變參數
def cal(*numbers) x=0 for n in numbers x+=sum(n) return (x)
若是已經有一個list或者tuple,要調用一個可變參數怎麼辦?能夠這樣作:
nums = [1, 2, 3] calc(nums[0], nums[1], nums[2]) =6
這種寫法固然是可行的,問題是太繁瑣,因此Python容許你在list或tuple前面加一個*號,把list或tuple的元素變成可變參數傳進去:
nums = [1, 2, 3] calc(*nums) =6
關鍵字參數
可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。請看示例:
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) 函數person除了必選參數name和age外,還接受關鍵字參數kw。在調用該函數時,能夠只傳入必選參數 person('Michael', 30) =name: Michael age: 30 other: {} 也能夠傳入任意個數的關鍵字參數: person('Bob', 35, city='Beijing') =name: Bob age: 35 other: {'city': 'Beijing'} person('Adam', 45, gender='M', job='Engineer') =name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
關鍵字參數有什麼用?它能夠擴展函數的功能。好比,在person函數裏,咱們保證能接收到name和age這兩個參數,可是,若是調用者願意提供更多的參數,咱們也能收到。試想你正在作一個用戶註冊的功能,除了用戶名和年齡是必填項外,其餘都是可選項,利用關鍵字參數來定義這個函數就能知足註冊的需求。
模塊,咱們以前導入過math模塊(庫)(包)
import math
import xxx
後python將會找到包所在地址,而且編譯,開銷很大,但以後就能夠直接使用它的函數,xxx.function()
例如引入
import random
ramdom.choice([1,2,3]) 或者起別名 import random as ran ran.choice([1,2,3])
另外一種導入包的方式是 from
從某個模塊中導入某個具體對象的複製
from xxx import function() from random import choice() choice([1,2,3])
就能夠
math時python提供的模塊(庫)(包,咱們可使用本身寫的模塊,也可使用第三方模塊
在Python中,安裝第三方模塊,是經過包管理工具pip完成的。
通常安裝某個模塊
直接使用pip install packagename
且慢,咱們還有更好的辦法
咱們推薦使用的Anaconda,這是一個基於Python的數據處理和科學計算平臺,它已經內置了許多很是有用的第三方庫,咱們裝上Anaconda,就至關於把數十個第三方模塊自動安裝好了,很是簡單易用。
直接在要裝某模塊的環境下
conda install packagename
便可