python介紹函數(shù)
什么是函數(shù)

函數(shù)可以看做是一個容器,它吧可執(zhí)行的命令通過一定格式包裹起來,再起個名字。如果有程序調(diào)用這個函數(shù)的時候,就會觸發(fā)執(zhí)行函數(shù)中的代碼塊。
兩個概念:
面向過程式編程:根據(jù)業(yè)務邏輯從上到下實現(xiàn)功能,其往往用一長段代碼來實現(xiàn)指定功能,開發(fā)過程中最常見的操作就是粘貼復制,也就是將之前實現(xiàn)的代碼塊復制到現(xiàn)需功能處
面向函數(shù)式編程:執(zhí)行多次重復操作的時候,可以用到函數(shù)式編程,可以減少代碼重復率
定義函數(shù)格式:
def 函數(shù)名(參數(shù)):
函數(shù)體
return()
函數(shù)定義要點:
def:表示函數(shù)的關鍵字
函數(shù)名:函數(shù)的名稱,日后根據(jù)函數(shù)名調(diào)用函數(shù)
函數(shù)體:函數(shù)中進行一系列的邏輯計算,如:發(fā)送郵件,計算出[11,22,38,888,2]中的最大數(shù)等….
參數(shù):為函數(shù)體提供數(shù)據(jù)
返回值:為函數(shù)執(zhí)行完畢后,可以調(diào)用者返回數(shù)據(jù)。
執(zhí)行函數(shù):
函數(shù)名() #括號內(nèi)不加內(nèi)容的話只執(zhí)行沒有參數(shù)的函數(shù)。
函數(shù)名(a, b) #如果括號內(nèi)有參數(shù),則執(zhí)行有參數(shù)的函數(shù)
例:
def sam(形參):
for i in range(1, 100, 2):
print(i)
return("dsa")
a = sam(實參)
函數(shù)的返回值:return
在函數(shù)中如果執(zhí)行return了,函數(shù)下的代碼就不再執(zhí)行了
函數(shù)是個功能塊,該功能塊到底執(zhí)行成功與否,需要通過返回值來告知調(diào)用者。,這個返回值可以定義為任意代碼,默認的返回值為None。
def sam():
for i in range(1, 100, 2):
print(i)
return("bac")
a = sam()
print(a)
函數(shù)的參數(shù):
def door(name2): #上面這個參數(shù)叫形式參數(shù)
if name2 == "eric":
print("開門")
return 1
else:
print("不開")
return 0
num = 0
while True:
name = input("請輸入用戶名:")
fh = door(name) #這個參數(shù)叫實際參數(shù)
num += 1
if fh == True:
print("eric開門"+str(num)+"次" )
函數(shù)可以上傳參數(shù),可以把參數(shù)作為判斷條件,參數(shù)可以是多個。
參數(shù)分類
普通參數(shù)
def fc(a, b, c,):
函數(shù)體
return
fc(1, 2, 3,)
默認,實參與形參的位置是相互對應,數(shù)量一致。
def fc(a, b, c,):
函數(shù)體
return
fc(b=2, a=1, c=3,)
也可以指定參數(shù)位置,這樣就不用按順序排列位置了。
默認參數(shù)
def fc(a, b, c=3): #添加默認函數(shù)時直接在形參后面添加函數(shù)
函數(shù)體
return
fc(b=2, a=1, c=5) #如果默認函數(shù)位被指定函數(shù)后,就會使用指定了的函數(shù)
注意:
默認參數(shù)必須在形參的最后一個
形參里面有幾個參數(shù),實參中也要有上傳幾個參數(shù),即使沒用。
動態(tài)參數(shù)一
把參數(shù)變成元組,根據(jù)順序一個一個寫入?yún)?shù),動態(tài)參數(shù)可以用一個形式參數(shù)表示多個不同類型的實際參數(shù)。
def fc(*a): #配置動態(tài)參數(shù)只需在參數(shù)前面加一個星號“*”
print(a, type(a))
return
fc("adfa", 123)
動態(tài)參數(shù)二
把參數(shù)變成字典,需要輸入鍵值對。
def fc(**a):
print(a, type(a))
return
fc(kaf="daf", dak="alfd")
各種參數(shù)也可以組合起來使用,我們把這種參數(shù)稱之為萬能參數(shù)。
def fc(a, *b, **c): #一個星的在前面,兩個星的在后面
print(a, type(a))
print(b, type(b))
print(c, type(c))
fc(12,14,15,k1=123,k2="bdc")
12
(14, 15)
{'k1': 123, 'k2': 'bdc'}
向函數(shù)中傳入,列表,元組。
def fc(*a): #這里用帶一個星號的形參就可以了
print(a, type(a))
li = [22, 33, 44,]
tup = (1, 3, 5,)
fc(*li, *tup) #傳入變量名前面必須加星號
(22, 33, 44, 1, 3, 5)
這樣傳入的列表不會把整個列表作為元素
傳入字典
def fc(**a): #這里要用兩個星號的形參
print(a, type(a))
dic = {"k1":"adf","k2":123}
fc(**dic) #實參也要用兩個星號
{'k1': 'adf', 'k2': 123}
局部變量和全局變量
局部:一段語句,一段功能模塊,或者某個用戶的環(huán)境下
局部變量:在局部環(huán)境創(chuàng)建的變量,只能在局部調(diào)用,修改。
全局變量:將變量定義在代碼語句外,所有語句調(diào)用都可用。
在局部環(huán)境改變?nèi)肿兞啃枰胓loble,globle 變量名
規(guī)范:全局變量名用大寫,局部變量名用小寫。
lambda表達式
簡單if語句可以用三元運算表示,簡單函數(shù)也可以用lambda表達式表示。
格式:
變量名 = lambda 參數(shù),參數(shù) : 函數(shù)體(含返回值)
例子:
f4 = lambda a1,a2 : a1+a2
d = f4(1,5)
print(d)
內(nèi)置函數(shù)
abs #取絕對值
all #每個元素都為真則為真
0,None,空列表,空字符串,空字典和空元組都是假的,其他的都是真的。
any #真要有一個人則為真
ascii() #在對象類型中找 __repr__,獲取其返回值
bool #對象轉換成布爾值
bytes #字節(jié)
bytearray #字節(jié)列表
bytes("alilang", encoding="utf-8") 把字符轉換成字節(jié)
chr() #接受數(shù)字把這個數(shù)字代表的字符表示出來,默認使用ascii 顯示:chr(112)
ord() #得出字符用什么十進制的數(shù)字表示,一次只能接受一個參數(shù),默認使用ascii編碼顯示:ord("A")
compile #把字符串編譯成可執(zhí)行代碼
dir #尋找類里面提供的方法
dict #字典
divmod(10,3) #取整數(shù)和余數(shù)
enumrate() #為可迭代的對象添加序號
eval("1+2") #自動把str格式轉換成int運算返回格式為int,有返回值
exec() #執(zhí)行py代碼,沒有返回值
filter #過濾,循環(huán)可迭代的對象,獲取每一個參數(shù),函數(shù)(參數(shù))
用法:
def f1(x):
if x > 22:
return True
else:
return False
ret = filter(f1, [11,22,33,44])
for i in ret:
print(i)
通過lambda表達式也可以達到同樣的作用
def f1(x):
return x > 22
ret = filter(lambda x: x > 22, [11,22,33,44])
for i in ret:
print(i)
map() #map與filter函數(shù)用法差不多,作用是對每一個可迭代的對象加上指定的書。
globals() #獲取當前代碼中的所有全局變量
locals() #獲取當前代碼中所有的局部變量
help() #查看幫助文檔
id() #查看代碼在內(nèi)存的id號
input #將輸入的內(nèi)容賦值給一個變量
isinstance() #判斷某個對象是否是某個類創(chuàng)建的
issubclass() #判斷對象是否為子類
iter() #創(chuàng)建可迭代對象的next
next() #取下一個對象,取的時候要增加next
len() #取對象長度
list() #列表
max() #取對象中的最大值
min() #取對象中的最小值
pow() #求多少冪:i = pow(2, 10)
reversed() #反轉
round() #四舍五入
slice() #取對象的索引
sorted() #排序
sum() #求和
zip() #不同列里相同索引的對象組成同一個元組
_import_ #帶入模塊
十進制轉不同進制的數(shù),在參數(shù)內(nèi)輸入十進制數(shù)
bin() 二進制
hex() 十六進制
oct() 八進制
int() 十進制
不同進制的數(shù)轉十進制,這是一種方式
num = int("0b11", base=2) 二進制轉十進制
num = int("0o11", base=8) 八進制轉十進制
num = int("0xea", base=16) 十六進制轉十進制
排序:sorted()
排序只能排列統(tǒng)一的數(shù)據(jù)類型
p = [1,11,88,2,10,66]
print(sorted(p))
[1, 2, 10, 11, 66, 88] #數(shù)字排序從小到大安數(shù)字的大小排序
a = ["3","1","?","張","fd","何"]
print(sorted(a))
['1', '3', '?', 'fd', '何', '張'] #字符排序,按照字符用十進制數(shù)表現(xiàn)的大小排序
文件操作:open
打開文件
操作文件
關閉文件
基本模式
open(文件名, 模式, 編碼)
打開文件時,需要指定文件路徑和以何等方式打開文件,打開后,即可獲取該文件句柄,日后通過此文件句柄對該文件操作。用什么模式打開文件,就只能對文件做哪些操作
模式
r 只讀模式(默認)
w 只寫模式(不可讀,不存在則創(chuàng)建,存在則清空內(nèi)容重新創(chuàng)建)
x 只寫模式(也不可讀,存不存在則創(chuàng)建,存在則報錯)
a 追加模式(不可讀,不存在則創(chuàng)建,存在則只追加內(nèi)容)
只讀模式
file = open('sha.txt','r') #文件名可以為是個路徑,默認為只讀模式
r = file.read() #打開文件
print(r)
file.close() #關閉
只寫模式
file1 = open('ben.txt', 'w')
a = file1.write('adixw123') #文件存在則覆蓋原有內(nèi)容,文件不存在則創(chuàng)建
file1.close()
x 只寫模式
file2 = open('sha1.txt', 'x') #文件存在則報錯,不存在則創(chuàng)建
file2.write("999999")
file2.close()
a 追加模式
file3 = open('ben.txt', 'ra') #追加模式不可讀
file3.write("aa445")
file3.close()
“b”表示以字節(jié)的方式操作
直接用二進制方式打開,打開不用轉碼
rb 或 r+b
wb 或 w + b
xb 或 w + b
ab 或 a + b
rb,以二進制方式打開
rb:讀的時候是以字節(jié)的形式讀取的,寫入的時候也要通過二進制的方式寫入。
file = open('ben.txt', 'rb',)
a = file.read()
file.close()
print(str(a, encoding="utf-8")) #用utf-8格式,把輸出的二進制轉成字符顯示
wb;xb;ab 三種寫入方式格式類似
file = open('ben.txt', 'rb',)
a = file.write(bytes("中國", encoding="utf-8"))
file.close()
”+“表示可以同時讀寫某個文件
r+ 讀寫(在末尾追加)
w+ 寫讀
x+ 寫讀
a+ 寫讀
tell() #獲取指針位置
seek() #改變指針位置
r+ :讀寫,先寫再讀
file = open('ben.txt', 'r+', encoding=('utf-8')) #win默認用gdk格式,linux默認用utf-8格式
d = file.read(1) #指定讀取一個字符
print(file.tell())
print(d)
#file.write("中華")
a = file.read(2) #指定讀取兩個字符
file.write("花花") #寫入時指針就到了最后一位
print(file.tell())
file.close()
print(a)
w+ :讀寫,先清空,寫完以后才能讀
file = open('ben.txt', 'w+', encoding='utf-8')
file.write("中華")
file.seek(0) #寫入以后指針會到最后一位,seek可以改變指針位置
a = file.read()
file.close()
print(a)
x+:與讀寫格式基本相同,有一點不同如果文件存在則報錯
a+:與上面的讀寫差不多,可以追加數(shù)據(jù)
file = open("ben.txt", "a+", encoding="utf-8")
file.write("人民")
file.seek(0)
d = file.read()
file.close()
print(d)
總結:r+:從后向后讀;w+:先清空寫完之后指針在最后;x+:如果沒有文件存在則報錯;a+:追加,寫完之后指針在最后。
對文件進行操作
def close(self, *args, **kwargs): #real signature unknown 關閉文件
pass
def fileno(self, *args, **kwargs): #real signature unknown 文件描述符
pass
def flush(self, *args, **kwargs): 將內(nèi)存的文件信息寫入硬盤
#def isatty(self, *args, **kwargs): 判斷文件是否同意tty設備
def read(self, *args, **kwargs): 讀取指定字符數(shù)據(jù)
#def readable(self, *args, **kwargs): 是否可讀
def readline(self, *args, **kwargs): 僅讀取一行數(shù)據(jù)
def seek(self, *args, **kwargs): 指定文件中指針位置
#def seekable(self, **args, **kwargs): 指針是否可操作
def truncate(self, *args, **kwargs): 截取數(shù)據(jù),僅保留指針之前的數(shù)據(jù),依賴于指針
#def writable(self, *args, **kwargs): 是否可寫
def write(self, *args, **kwargs): 寫內(nèi)容
讀取所有的數(shù)據(jù)(無論幾行幾列)
f1 = open("ben.txt", "r+", encoding="utf-8")
for line in f1:
print(line)
自動寫入:with
每次打開一個文件都需要close才能進行下一步操作,如果用上with之后就可以不用每次都關閉了。
格式:
with open("ben.txt", "r", "#") as file:
file.read()
......
Python2.7之后,with同時打開兩個文件
with open("ben.txt", "r") as file1, open("sha.txt", "r") as file2
......
實例:
同時打開兩個文件file1的數(shù)據(jù)復制到file2文件里面,可以進行一下操作。
with open("ben.txt", "r+", encoding="utf-8") as file1, open("sha.txt", "w+", encoding="utf-8") as file2:
for line in file1:
file2.write(line)
file2.seek(0)
a = file2.read()
print(a)
Python 面向對象編程
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。