Python基礎篇之過程型程序設計

一、Python過程型程序設計

面向過程
以指令為中心,由指令處理數據
如何組織代碼解碼問題
面向對象
以數據為中心,所有的處理代碼都圍繞數據展開
如何設計數據結構組織數據,并提供對此類數據所允許處理操作
簡單方法:
1)、編譯安裝新版本至某特定路徑
# yum install readline-devel
# tar xf Python-2.7.6.tar.xz
# ln -sv Python-2.7.6 python27
# cd python27
# ./configure --prefix=/usr/local/python27
# make && make install
# tar xf ipython-1.2.1.tar.gz
# cd ipython-1.2.1
# /usr/local/python27/bin/python27 setup.py build
# /usr/local/python27/bin/python27 setup.py install
2)、pyenv
1、python的關鍵要素
基本數據類型
對象引用
組合數據類型
邏輯操作符
控制流語句
算術操作符
輸入/輸出

函數創建和引用

2、字串是一個組合,可以只引用一個變量,是不可變類型
使用type()獲取函數的類型
使用id()獲取內存的位置
使用dir()獲取模塊的子命令
使用len()獲取元素內部的個數
使用help()獲取函數詳細信息
dir(__builtin__)可以查看內建的函數
callable()可用于測試函數是否可以調用
每個模塊都有一個名為__name__的內建變量,此變量值會根據調用時
如果模塊被導入,__name__的值是模塊的名字
如果模塊被直接執行,__name__的值是“__main__”

二、python對象類型及其運算

程序中存儲的所有數據都是對象

每個對象都有一個身份,一個類型和一個值

實例被創建之后,其身份和類型就不可改變

如果某個對象包含對其他對象的引用,則將其稱之為容器

class:通常在自定義類型是使用

type:內置變量
instance:實例化
類:數據和方法
數據:變量
方法:函數
類:實例化成對象
兩個對象的比較:
1).值比較:對象中的數據是否相同
2).身份比較:兩個變量名引用的是否為同一對象
3).類型比較:兩個對象的類型是否相同
1、核心數據類型
數字:int,long,flocat,complex,bool
字符:str,unicode
列表:list
字典:dict
元組:tuple
文件:file
其他類型:集合(set),frozenset,類類型,空(None)
其他文件類工具:管道(pipes),先進先出管道(fifos),sockets
2、類型轉換:
str(),repr()和format():將非字符型數據轉換為字符
str:做對象序列化的結果,強制轉換
repr:做精確轉換,不轉換元對象
int():轉換成整數
float():轉換成浮點型
list(s):將字串s轉換成列表
tuple(s):將字串s轉換成元組
set(s):將字串s轉換為集合
frozenset(s):將字串s轉換為不可變集合
dict(d):根據指定的鍵值對創建字典,其中d必須是(key,value)的元組序列
chr(x):將整數轉換為字符
ord(x):將字符轉換為整數值
hex(x):將整數轉換成16進制字符
bin(x):將整數轉換成2進制字符
oct(x):將整數轉換成8進制字符
3、數字類型: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不可變類型
python的數字字面量:布爾型,整數,浮點型,負數
True:1
False:0
支持算術操作,比較操作 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? math模塊可以實現算術的高級運算
4、序列類型:
1)字符類型
字符串字面量:把文本放入單引號、雙引號或三引號中:前后要一致
如果要使用unicode編碼,則在字符之前使用字符u進行標識,如u“mageedu”
文檔字符串:模塊、類或函數的第一條語句是一個字符的話,該字符串就成為文檔字符串,可以使用__doc__來引用
運算符:
索引運算符:[i]可以使用負數,即倒著取值
切片運算符:[i:j]
擴展切片:[i:j:stride]
支持運算
索引,切片,min(),max(),len()等
支持操作

對象自有的操作

2)列表
容器類型 ? ? ? ? ? ? ? ? ? [ ]
? ? ? ? ? ? 任意對象的有序集合,通過索引訪問其中的元素,可變對象
? ? ? ? ? ? 異構,任意嵌套
支持在原處修改:
? ? ? ? ? ? ? 修改指定的索引元素,修改指定的分片,刪除語句,內置方法
? ? ? ? ? ? ? l1 + l2:合并兩個列表,返回一個新的列表,不會修改原列表
? ? ? ? ? ? ? l1 * n:把l1重復N次,返回一個新列表
? ? ? ? ? ? ? in:成員關系判斷字符,用法 obj in container
? ? ? ? ? ? ? not in: obj not in container
列表解析:[]
列表復制方法:
? ? ? ? ? ? ?l1=[1,2,3,4]
淺復制
? ? ? ? ? ? ? l2=l1
深度復制
? ? ? ? ? ? ? import copy
? ? ? ? ? ? ? ?l2=copy.deepcopy(l1)
? ? ? ? ? ? ? ?l2=l1[:]
3)元組
表達式符號:()
容器類型
任意對象的有序集合,通過索引訪問其中的元素,不可變對象,長度固定
支持異構,嵌套
常見操作:
()
(1,)
(1,2)
t1 + t2
t1 * n
in:
not in:
雖然元組本身不可變,但如果元組內嵌套了可變類型的元素,那么此類元素的修改不會返回元組
4)字典:dict
字典在其他編程語言中又稱為關聯數組或散列表
通過鍵實現元素存取,無序集合,可變類型容器,長度可變,異構,嵌套
{key1:value1,key2:value2,….}
{}:空字典
字典復制:d2=d1.copy()

d1.iteritems:返回一個迭代器對象

5)集合:無序排列的可以hash的值
支持集合關系測試:
成員關系測試:
in:
not in:
迭代
不支持:索引、元素獲取、切片
集合的類型:set(),frozenset()
沒有特定的語法格式,只能通過工廠函數創建
可以使用l1=set([1,2,3,4])
6)容器、類型、對象
(1).列表,元素,字典可以跨行定義,最后一個允許使用逗號
(2).所有對象都有引用計數,可以使用sys.getrefcount查看引用次數,使用del刪除一個計數引用
(3).列表、字典都支持淺復制和深復制:深復制的方法可以使用copy模塊中的deepcopy()實現
(4).python中的所有對象都是“第一類的”,這意味著使用標識符命名的所有對象具有相同狀態,于是,能夠命名所有對象都可以直接當數據進行處理
(5).所有序列(所有非負整數的有序集合)都支持迭代
(6).所有序列都支持的操作和方法:
s[i]:
s[i:j]:切片
s[i:j:stride]
len(s):長度
max(S)
sum(s)
all(S):所有為true
any(s):任意項為true
s1 + s2:連接
s1 * n:重復
obj in s1:成員關系判斷
obj not in s1
(7).可變序列的操作
s1[index] = value:元素賦值
s1[i:j] =t :切片賦值
del s1[index]:刪除元素
del s1[i:j]:刪除求片
del s1[i:j:stride]

三、Python的表達式和語句

?表達式:由一個或多個操作數以及操作符所組成的序列
語句:用來實現的操作,常見的操作有聲明變量
1、python中的常用的表達式操作符:
x * y , ?x /y , ? x+y , ? ?x-y , ?x//y, ? ? ? ?x%y
邏輯運算:
x or y, x and y, not x
成員關系運算:
x in y , x noy in y
對象實例測試
x is y x not is y
比較運算:
x < y,x > y x <= y,x >= y,x == y,x != y
位運算:
x|y x& y x^y x<<y,x>>y
一元運算:
-x,+x,~x
冪運算:
x ** y
索引和分片
x[i],x[i:j],x[i:j:stride]
調用
x(….)
取屬性:
x.attribute
元組:(….)
序列: […]
字典:{…}
三元選擇表達式:x if y else z
匿名函數: lambda args:expression
生成器函數發動協議: yield x
運算優先級:
(….),[….],{…..}
s[i],s[i:j]
s.attribute
s(….)
+x,-x,~x
x**y
* / // %
+ —
<< >>
&
^
|
< <= > >= == !=
is not is
in not in
not
and
or
lambda
2、語句:
賦值語句
調用
print:打印對象
if/elif/else:條件判斷
for/else:序列迭代
while/else:普通循環
pass:占位符
break:
continue
def
return
yield
global:命名空間
raise:觸發異常
import:
form:模塊屬性訪問
class:類
try/except/finally:捕獲異常
del:刪除引用
assert:調試檢查
with/as:環境管理器
賦值語句:
? ? ? ? ? 隱式賦值:import,from,def,class,for,函數參數
? ? ? ? ? 元組和列表分解賦值,當賦值符號(=)的左側為元組或列表時,python會按照位置把右邊的對象和左邊的目標 ?自左向右逐一進行配對,個數不同時會出異常,此時可以進行切片處理
? ? ? ? ? 多重目標賦值
? ? ? ? ?增強賦值:+=,-=,*=,/=,//=,%=,
3、條件測試:
3.1 if 條件測試表達式
python中的真假:
1.任何非0數字和非空對象都為真
2.數字0、空對象和特殊對象None都為假
3.比較合相等測試會遞歸地應用于數據結構中
4.返回值為True或False
組合條件測試
X and Y:與運算
X or Y :或運算
not x: 非運算
A=X if Y else Z
if Y:
A=X
else:
A=Z
3.2while語句:
? while bool_expression:
? while_suite
? else:
? else_suite
? break:跳出最內層的循環
? continue:跳到所處的最近層循環的開始處
? pass:點位語句
? else代碼庫:循環正常終止才會執行,如果循環終止是由break跳出導致的,則else不會執行
? while true:死循環
3.3 ?for語句
? for ?exprssion in object:
? while_suite
? if boolean_esprssion2:contine
? if boolean_esprssion3:break
? else
? else_suite

四、文件對象:

文件都是字節序列
var_name = open (file_name[mode,[bufsize]])
mode: r ? w ? ?a ? ? ?r+ ? ? w+ ? ? ? a+
b表示已二進制模式打開文件
rb
wb
ab
rb+
wb+
ab+
[bufsize]緩存:
0表示不使用緩存
負數表示使用系統默認的緩存
1表示使用緩存
整數表示使用大小的緩沖區
file.seek(offset[whence])
whence:起點
0:從文件頭
1:從當前位置
2:從文件尾
offset:偏移量
文件系統模塊:os
目錄:
chdir():切換工作目錄
chroot():設定當前進程的根目錄
listdir():列出指定目錄下的所有文件名
mkdir():創建指定目錄
makedirs():創建多級目錄
getcwd():獲取工作目錄
rmdir():刪除目錄
removedirs():刪除多級目錄
文件:
mkfifo():創建管道
mknod():創建設備文件
remove():刪除文件
unlink():刪除鏈接文件
rename():重命名
stat():放回文件的狀態信息
symlink():創建符號鏈接文件
utime():更新時間戳
tmpfile():創建并打開(w+b)一個新的臨時文件
walk():創建目錄樹

訪問權限相關的
access():檢驗某個用戶或用戶組的權限模式
chmod():修改權限
chown():修改屬主和屬組
umask():設置默認權限模式

文件描述符:
open():底層操作系統的open()
read():
write():

設備文件:
makedev():
major():獲取主設備號
minor():獲取次設備號
路徑管理:
import os.path

basename():路徑基名
dirname():路徑目錄名
join():整合文件名
split():返回dirname(),basename()元組
splitext():返回(filename,extension)元組

信息:
getatime():最近訪問時間
getctime()
getmtime()
getsize():返回文件的大小

查詢
exists():判斷指定文件是否存在
isabs():判斷指定的路徑是否為絕對路徑
isdir():是否為目錄
isfile():是否為文件
islink():是否為符號鏈接
ismount():是否為掛載點
samefile():兩個路徑是否指向了同一個文件

練習:判斷文件是否存在,存在則打開,讓用戶通過鍵盤反復輸入多行數據追加保存至此文件中
#!/usr/bin/python

import os
import os.path
filename=raw_input('plz a file name:')
if os.path.isfile(filename):
? ? openname= open(filename,'a+')
while True:
? ? newline=raw_input('plz a line:')
? ? if newline == 'q' or newline =='quit':
 ? ? ? ? break
? ? else:
? ? ? ? openname.write(newline+'\n')
openname.close()
對象持久存儲
pickle

marshal

五、python的正則表達式:

元字符
.
[.....]
[^.....]
?:匹配字符0次或1次
+:匹配自符1次以上
{m}
{m,n}
{0,n}
{m,}
^:行首錨定
$
pat1|pat2
(.....):分組
\b
[0-9]:\b:任意數
[0-9a-zA-Z]:\w,\W對\w取反
\s:任意空白字符,[\n\t\f\v\r],\S
\nn:后向引用
(*|+|?|{})?:使用非貪婪模式
match對象:
可以指定起始位置,結束位置,匹配到的字符等
search只返回第一次匹配到的結果
re.search:返回一個macth對象
flags:
I或IGNORECASE:忽略字符大小寫
M或MULTILINE:多行匹配
A或ASCII:僅執行8位ASCII碼匹配
U或UNICODE:

六、Python函數

return返回值類型:
效果:只能返回一次值,終止函數的執行
無return 默認 None; ? ? return返回值:如果只有一個則返回本身,多個值則為元組形式
參數傳遞形式
位置參數:從左向右
關鍵字參數:按關鍵名稱匹配
? ? ? ? 混用上面兩種方式時,所有位置參數,所有的關鍵字參數
定義函數時使用默認參數:有默認值的參數
? ? ? ? 混用有默認和無默認值的參數時,無默認值的應該放在前面
調用函數時使用可變參數要求:
? ? ? ? 使用*:收集位置參數

? ? ? ? 使用**:收集關鍵字參數

python閉包:閉包叫lexical closure
函數中使用yield,會返回一個生成器對象
裝飾器:
1.裝飾器本身是一個函數 ,用于裝飾其他函數
2.功能:增強被裝飾函數的功能
裝飾器一般接受一個函數對象作為參數,
使用@調用函數
def deco(func):
? ? def wrapper():
? ? ? ? print "please say something: "
? ? ? ? func()
? ? ? ? print "no zuo no die"
? ? return wraaper
@deco
def show():
? ? return "somethings."
遞歸:
遞歸需要邊界條件,遞歸前進段和遞歸返回段
函數的設計規范
耦合性
? ? ? ?1.通過參數接受輸入,已經通過return產生輸出以保證函數的獨立性
? ? ? ?2.盡量減少使用全局變量進行函數間通信
? ? ? ?3.不要再函數中修改可變類型的參數
? ? ? ?4.避免直接改變定義在另外一個模塊中的變量
集合性
? ? ? ?1.每個函數都應該有一個單一的、統一的目標
? ? ? ?2.每個函數的功能都應該相對簡單
更多內容可見:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/91022

(0)
nenenene
上一篇 2018-01-11
下一篇 2018-01-11

相關推薦

  • Nginx工作原理和優化、漏洞。

    1.  Nginx的模塊與工作原理 Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用于URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的工作。 Nginx的模塊…

    Linux干貨 2015-04-04
  • N26-第七周博客作業

    一、創建一個10G分區,并格式為ext4文件系統; 1、 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;          A、創建一個10G的磁盤空間 [root@VM_221_40_centos ~]#fdisk /de…

    2017-07-09
  • N25-第八周

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主使用紅色顯示; #!/bin/bash ipnet=172.16.250. trap ‘trap_action’ INT trap_action() { break return 1 } for ((i=1…

    Linux干貨 2017-05-27
  • 26期全程班-第七周博客作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; # fdisk /dev/sda # mkf…

    Linux干貨 2017-03-17
  • 磁盤運作方式及分區,掛載等操作

    磁盤運作方式及分區,掛載等操作 磁盤是我們存儲數據的空間,而為了方便我們對數據的管理,我們需要對磁盤進行分區。而在我們創建過分區之后 ,我們為了能 夠訪問磁盤 ,需要對磁盤進行掛載 。文件系統通過為每個文件在分區上分配文件塊的方式把數據存儲在硬盤上。所以,就是使用文件系統在 硬盤分區上對數據塊的各種信息的操作。這樣就需要我們了解磁盤的運作方式,學會磁盤的分區…

    Linux干貨 2016-08-29
  • 任務計劃

                          Linux任務計劃 一、任務計劃     (1)未來的某一個時間點執行一次某任務:at、batch     (2)周期性運行某…

    2017-05-14
欧美性久久久久