Python解釋器內(nèi)置了許多函數(shù),這意味著我們無需定義,始終可以它們。接下來和大家一起討論一個(gè)常用的內(nèi)建函數(shù)-input()和isinstance()。
站在用戶的角度思考問題,與客戶深入溝通,找到阿勒泰網(wǎng)站設(shè)計(jì)與阿勒泰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋阿勒泰地區(qū)。
input()
input()函數(shù)讀取用戶輸入,并轉(zhuǎn)換成字符串:
a?=?input()??#?將input()返回的值賦值給a
Python
a????????????#?查看a的值(為字符串'Python')
'Python'
input()函數(shù)可以提供一個(gè)參數(shù),用來提示用戶:
b?=?input('請輸入你最喜歡的水果:??')???#?給用戶必要的提示
請輸入你最喜歡的水果:??香蕉
b
'香蕉'
需要注意的是,input()函數(shù)返回的值總是字符串,當(dāng)用戶輸入的是數(shù)字也是這樣,所以當(dāng)使用它時(shí)一定要注意:
num?=?input('請輸入一個(gè)數(shù)字:?')
請輸入一個(gè)數(shù)字:?10
num?+?9????????????????????????????#?試圖把num和數(shù)字相加
Traceback?(most?recent?call?last):
File?"",?line?1,?in
TypeError:?must?be?str,?not?int
num
'10'
type(num)???????????????????????????#?查看num的數(shù)字類型
class?'str'
isinstance()
isinstance()函數(shù)用于檢查對象是否為指定類(或者說數(shù)據(jù)類型)的實(shí)例。isintance()的第一個(gè)參數(shù)為一個(gè)對象,第二個(gè)參數(shù)為要檢查的數(shù)據(jù)類型。
舉個(gè)例子,比如有有一個(gè)變量,你想檢查它是否為數(shù)字類型,可以使用isinstance()函數(shù):
score?=?90
result?=?isinstance(score,?int)
if?result:
...?????print('score為int數(shù)據(jù)類型')
...?else:
...?????print('score不為int數(shù)據(jù)類型')
...
score為int數(shù)據(jù)類型
除了能檢查是否為int類型外,isintance()還能檢查其他數(shù)據(jù)類型(當(dāng)然了),下面是一個(gè)綜合示例:
pi?=?3.14
name?=?'Wang'
complex_num?=?1?+?2j
isinstance(pi,?float)??????????????#?3.14為浮點(diǎn)數(shù)類型
True
isinstance(name,?str)??????????????#?'Wang'為字符串類型
True
isinstance(complex_num,?complex)???#??1?+?2j為復(fù)數(shù)
True
isinstance()還可以驗(yàn)證某個(gè)對象是否為自定義的類型:
class?Developer:?????????????????????????????#?定義一個(gè)叫做Developer的類
...
...?????def?__init__(self,?name):????????????????#?__init__方法中,需要輸入名字
...?????????self.name?=?name
...?????def?display(self):???????????????????????#?定義了display()方法
...?????????print("Developer:",?self.name,?"-")
...
class?PythonDeveloper(Developer):????????????#?PythonDeveloper類,繼承了Developer類
...
...?????def?__init__(self,?name,?language):
...?????????self.name?=?name
...?????????self.language?=?language
...
...?????def?display(self):????????????????????????#?覆蓋了父類的display方法
...?????????print("Python?Developer:",?self.name,?"language:",?self.language,?"-")
...
dev?=?Developer('Zhang')?????????????????????#?創(chuàng)建一個(gè)Developer對象
dev.display()????????????????????????????????#?調(diào)用display()方法,以查看該對象
Developer:?Zhang?-
isinstance(dev,?Developer)???????????????????#?判斷dev是否為Developer類,答案是肯定的
True
isinstance(dev,?PythonDeveloper)?????????????#?判斷dev是否為PythonDeveloper類,當(dāng)然不是
False
python_dev?=?PythonDeveloper('Liu',?'Python')??#?創(chuàng)建一個(gè)PythonDeveloper對象,注意PythonDeveloper是Developer的子類
python_dev.display()??????????????????????????#?調(diào)用display方法
Python?Developer:?Liu?language:?Python?-
isinstance(python_dev,?Developer)?????????????#?判斷python_dev是否為Developer類,答案是肯定的
True
isinstance(python_dev,?PythonDeveloper)??????#?判斷python是否為PythonDeveloper類,答案也是肯定的
True
關(guān)于Python的基礎(chǔ)問題可以看下這個(gè)網(wǎng)頁的視頻教程,網(wǎng)頁鏈接,希望我的回答能幫到你。
實(shí)際項(xiàng)目中經(jīng)常遇到讀取二進(jìn)制問題,Python下讀取二進(jìn)制文件一般用Python的文件打開讀寫相關(guān)函數(shù)和struct.
1。獲取文件名filename,可用對話框,也可以直接手寫
2。打開文件,這里中是打開,像看書一樣,只是打開書,還沒有看里面的內(nèi)容,可以看,也可以不看
binFile=open(filename,'rb')
3。那就看看吧,binFile現(xiàn)在就是書的名字了。這里我們讀入4個(gè)字,如果read()將讀入整個(gè)文件
context=binFile.read(4)
4。讀入之后問題來了,context包含四個(gè)字(4Bytes),但這四個(gè)字是加密的(二進(jìn)制)。這時(shí)要找翻譯struct.unpack
realContext=struct.unpack(format,context)
5。format的就是加密規(guī)則了,由1,2,4,8個(gè)字節(jié)組成其他類型,或者其他類型的數(shù)組。
a,b,c,d=struct.unpack('4c',context)
讀入四個(gè)字符
對應(yīng)格式參考
6。打開文件后用完一定要關(guān)閉,和看書一個(gè)樣,看完后要合上,不合上后果自己去想
binFile.close()
7。查找內(nèi)容,文件內(nèi)容可以一個(gè)一個(gè)字的按順序讀出,但如果已經(jīng)知道內(nèi)容在什么位置,可以用查找方式讀出。
binFile.seek(100)
context=binFile.read(4)
讀出100位置后面的4個(gè)字,(101,102,103,104)
8。Python還提供也一些高級讀寫功能,如整行讀取等
文件對象(open() 函數(shù)的返回值)提供了read()函數(shù)可以按字節(jié)或字符讀取文件內(nèi)容,到底是讀取字節(jié)還是字符,取決于使用 open() 函數(shù)打開文件時(shí),是否使用了 b 模式,如果使用了 b 模式,則每次讀取一個(gè)字節(jié);反之,則每次讀取一個(gè)字符。
read() 函數(shù)的基本語法格式如下:
file.read([size])
其中,file 表示打開的文件對象;size 作為一個(gè)可選參數(shù),用于指定要讀取的字符個(gè)數(shù),如果省略,則默認(rèn)一次性讀取所有內(nèi)容。
【例 1】采用循環(huán)讀取整個(gè)文件的內(nèi)容。
# a.txt 文件內(nèi)容為:C語言中文網(wǎng)
f = open("a.txt", 'r', True)
while True:
# 每次讀取一個(gè)字符
ch = f.read(1)
# 如果沒有讀到數(shù)據(jù),跳出循環(huán)
if not ch:
break
# 輸出ch
print(ch, end='')
f.close()
運(yùn)行結(jié)果為:
C語言中文網(wǎng)
上面程序采用循環(huán)依次讀取每一個(gè)字符(因?yàn)槌绦驔]有使用 b 模式),每讀取到一個(gè)字符,程序就輸出該字符。
正如從上面程序所看到的,當(dāng)程序讀寫完文件之后,推薦立即調(diào)用 close() 方法來關(guān)閉文件,這樣可以避免資源泄露(后續(xù)章節(jié)會(huì)詳細(xì)介紹 close() 函數(shù))。
注意,在調(diào)用 read() 函數(shù)讀取文件內(nèi)容時(shí),成功讀取的前提是在 open() 函數(shù)中使用 r 或 r+ 的模式打開文件,否則(比如將上面程序中 open()的打開模式改為 w),程序會(huì)拋出io.UnsupportedOperation異常:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 4, in
ch = f.read(1)
io.UnsupportedOperation: not readable
【例 2】調(diào)用 read() 方法時(shí)不傳入?yún)?shù),該方法默認(rèn)會(huì)讀取全部文件內(nèi)容。例如:
f = open("a.txt", 'r', True)
# 直接讀取全部文件
print(f.read())
f.close()
運(yùn)行結(jié)果為:
C語言中文網(wǎng)
read()函數(shù)拋出UnicodeDecodeError異常的解決方法
當(dāng)使用 open() 函數(shù)打開文本文件時(shí),默認(rèn)會(huì)使用當(dāng)前操作系統(tǒng)的字符集,比如 Windows 平臺,open() 函數(shù)默認(rèn)使用 GBK 字符集。因此,上面程序讀取的 a.txt 也必須使用 GBK 字符集保存;否則,程序就會(huì)出現(xiàn)UnicodeDecodeError錯(cuò)誤。
如果要讀取的文件所使用的字符集和當(dāng)前操作系統(tǒng)的字符集不匹配,則有兩種解決方式:
使用二進(jìn)制模式讀取,然后用 bytes 的 decode() 方法恢復(fù)成字符串。
利用 codecs 模塊的 open() 函數(shù)來打開文件,該函數(shù)在打開文件時(shí)允許指定字符集。
例如,下面程序使用二進(jìn)制模式來讀取文本文件:
# 指定使用二進(jìn)制方式讀取文件內(nèi)容,a.txt 以 utf-8 編碼存儲(chǔ)
f = open("a.txt", 'rb', True)
# 直接讀取全部文件,并調(diào)用bytes的decode將字節(jié)內(nèi)容恢復(fù)成字符串
print(f.read().decode('utf-8'))
f.close()
上面程序在調(diào)用 open() 函數(shù)時(shí),傳入了 rb 模式,這表明采用二進(jìn)制模式讀取文件,此時(shí)文件對象的 read() 方法返回的是 bytes 對象,程序可調(diào)用 bytes 對象的 decode() 方法將它恢復(fù)成字符串。由于此時(shí)讀取的 a.txt 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢復(fù)字符串時(shí)顯式指定使用 UTF-8 字符集。
下面程序使用 codes 模塊的 open() 函數(shù)來打開文件,此時(shí)可以顯式指定字符集:
import codecs
# 指定使用utf-8 字符集讀取文件內(nèi)容
f = codecs.open("a.txt", 'r', 'utf-8', buffering=True)
while True:
# 每次讀取一個(gè)字符
ch = f.read(1)
# 如果沒有讀取到數(shù)據(jù),則跳出循環(huán)
if not ch : break
# 輸出ch
print (ch, end='')
f.close()
上面程序在調(diào)用 open() 函數(shù)時(shí)顯式指定使用 UTF-8 字符集,這樣程序在讀取文件內(nèi)容時(shí)就完全沒有問題了。