Python是什麼?用Python能夠作什麼?

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

2.安裝Python

Python有兩個版本,2.x和3.x互不兼容,按需求安裝便可。

ruby

python解釋器:咱們寫的代碼會在解釋器上運行,相似JVM的機制,咱們安裝的標準解釋器是用C編寫的,稱爲CPython解釋器,另外有IPython 是基於CPython交互解釋器。還有Java寫的Jpython解釋器等等。咱們通常使用Cpython。bash

3.python環境基本操做

基本上有兩種操做Python的方式,命令行模式交互模式
命令行模式就是正常的shell終端操做,網絡

 

4.python基礎

語法

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)
 
help.png

str(數字)能夠將數字轉換爲字符串,int(string)能夠將字符串轉換爲數字等等

列表 list

列表是序列的一種,支持全部字符串的操做,惟一的區別返回的結果仍然是列表。
列表用方括號[]定義

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] 

事實上。列表、集合、字典均可以使用解析。

元組 tuple

元組也是序列,但它具備不可變性,一旦初始化就不能修改,語法上它被編寫在圓括號中,支持任意類型、任意嵌套和常見的序列操做。

s=(1,2,3,4) len(t) =4 

元組有特別方法

s.index(4)
=3

即4 出如今偏移量3,4 appears at offset 3

s.count(4) =1 

4只出現一次
元組存在的意義是完整性檢查,好比傳輸數據時保證程序其餘部分不會改變數據。

字典 dict

用{}花括號括起來,一個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]

集合 set

與字典相似,只有鍵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") 

 

 
yangtangle.png

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這兩個參數,可是,若是調用者願意提供更多的參數,咱們也能收到。試想你正在作一個用戶註冊的功能,除了用戶名和年齡是必填項外,其餘都是可選項,利用關鍵字參數來定義這個函數就能知足註冊的需求。

5.python進階

模塊,咱們以前導入過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

便可

相關文章
相關標籤/搜索