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 12:50
下一篇 2018-01-11 21:46

相關推薦

  • N25期第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 1.復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加# sed -r 's/^[^[:space:]]+/#&/g' /tmp/rc.sysinit :%s/^[^[:space:]]\+/#&a…

    Linux干貨 2016-12-26
  • BIND的編譯安裝\DNS的搭建及測試

    編譯安裝bind          1、下載bind: isc.org: bind-9.10 bind-9.11 bind-10          2、 #tar xvf bind-9.10.5.tar.gz       &nbs…

    2017-07-31
  • FTP服務

        FTP是一個非常古老的協議,其主要的作用是用于文件的傳輸。FTP采用明文的方式傳輸,極其不安全,但在局域網等環境中使用還是比較方便的。 一、工作原理     FTP的工作方式分為主動模式與被動模式。     1、主動模式 &nbsp…

    Linux干貨 2015-07-08
  • CentOS 7 yum安裝LAMP,LNMP并搭建WordPress個人博客網站

    本次實驗要進行的是在CentOS7.2,內核版本3.10.0-327.el7.x86_64的環境下搭建LAMP和LNMP,并在此之上做一個WordPress博客網站。 [root@Shining ~]# uname -a Linux Shining.ACG 3.10.0-327.el7.x86_64&nbsp…

    Linux干貨 2016-11-24
  • 馬哥教育網絡班20期+第二周博客作業

    1.Linux上的文件管理類命令 2.bash命令學習總結 3.bash命令實例 4.元數據與時間戳 5.命令別名 6.練習題6~12 1.Linux上的文件管理類命令        Linux上的文件管理類命令可分為查看類、目錄管理類、權…

    Linux干貨 2016-06-19
欧美性久久久久