Python基礎知識查漏補缺,python查漏補缺

來源:互聯網
上載者:User

Python基礎知識查漏補缺,python查漏補缺

根據空行來分隔字串 str.split('\n\n')

通過切片實現列表翻轉:a = [1,2,3,4,5]   a[ -1: : -1 ]  即可實現列表翻轉,從-1開始直到結束,步長為-1

1.三目運算子:a=1 if b>0 else 2


2.資料類型之set:無序且不允許重複的集合。

    LIST=[1,2,3,1,2,3]

    s = set(LIST)

    s的值為{1,2,3}


3.Python函數如果不寫return,預設返回None


4.   a**b為a的b次方         a//b  地板除法,返回商的整數部分


5. 匿名函數: lambda x:x+2   意思是定義了一個匿名函數,參數是x,傳回值是x+2

   匿名函數配合三目運算子:   lambda  x:x+100 if x%2==1 else x   如果x為奇數,則返回x+100,如果x為偶數,則返回x


6.一些內建函數:

abs()  返回絕對值

all()  傳入多個對象,如果所有對象都為真,則返回True,只要有一個為假就返回False。除了0、None、空值(空字典,空元組,Null 字元串,空列表),其他都為真。

any()  與all相似,不過any只要有一個為真,就返回True,全部為假才返回False

ascii()  找到對象中的__repr__方法,擷取其傳回值

bin() 二進位  0b

oct()  八進位  0o

int()  十進位    int('0b11',base=2)  二進位轉十進位

hex() 十六進位  0x

bool()  把一個對象轉化成bool值,除了0、None、空值(空字典,空元組,Null 字元串,空列表),其他都為真。

bytes()將一個對象變成位元組數組

Bytes 對象是由單個位元組作為基本元素(8位,取值範圍 0-255)組成的序列,為不可變對象。

Bytes 對象只負責以二進位位元組序列的形式記錄所需記錄的對象,至於該對象到底表示什麼(比如到底是什麼字元)則由相應的編碼格式解碼所決定。我們可以通過調用 bytes() 類(沒錯,它是類,不是函數)產生 bytes 執行個體,其值形式為 b'xxxxx',其中 'xxxxx' 為一至多個轉義的十六進位字串(單個 x 的形式為:\xHH,其中 \x 為小寫十六進位逸出字元,HH 為二位十六進位數)組成的序列,每個十六進位數代表一個位元組(八位位元,取值範圍 0-255),對於同一個字串如果採用不同的編碼方式產生 bytes 對象,就會形成不同的值:

b = bytes('我',encoding='utf-8')

c = bytes('我',encoding='gb2312')



chr()  返回數字對應ASCII表中的字母,例如chr(66) = B

ord()  返回字元對應ASCII表中的數字,例如ord('a') = 97

callable(obj)  判斷obj是否為可執行對象,如果是返回True,否則返回False( 目前所知函數和類返回True )

compile()  編譯py代碼

divmod(10,3)  返回( 3,1 )    返回一個元組,第一個值為商,第二個值為餘數。在進行分頁的時候會用到

enumerate(obj)  傳入一個可迭代對象,返回一個enumerate對象,可以迭代這個對象來獲得原可迭代對象的索引和值

EXP:

a=[1,3,4,6,1]for index,value in enumerate(a):    print(index,value)

如果是

for i in enumerate(a):    print(i)

則返回一個個元組,( index , value )


eval()  通過eval可以執行一個字串形式的運算式,例如:

a=['1+3','1-3','1*3','1/3','1+3*2']b=[]for i in range(5):    b.append(eval(a[i]))    print(i)

eval() 第二個參數可以接收一個字典,例如:

b = eval('a+1',{'a':99})print(b)
b的值為100

exec( string )用來執行string的代碼

filter(function or none,可迭代對象),傳回值為一個filter對象,需要利用list()將其轉換成一個列表。

當第一參數為none時,filter會返回可迭代對象中所有為True的項。

當第一參數為一個函數時,將可迭代對象中每個值放入函數中運算,再進行過濾,返回所有為True的值。

a = list(filter(lambda x:x%2,[1,2,3,4,5,6,7,8]))print(a)

def f(x):    return Truea=list(filter(f,[0,4,5,7,8,'eqwe']))print(a)
  本來0不應該被返回,但是函數f的傳回值恒為True,所以0也被返回了

map(function,可迭代對象)   將可迭代對象作為function中的參數進行運算,並返回運算結果,傳回值為一個map對象,需要用list()轉換成列表。

a = list(map(lambda x:x%2,[1,2,3,4,5,6,7,8]))print(a)

可以用for迴圈來迭代filter和map對象

globals()  擷取所有全域變數

locals()  擷取所有局部變數

id(obj)  查看對象的記憶體位址

isinstance(obj,class)  判斷某個對象是否為某個類建立的

hash(obj) 本函數返回對象的雜湊值。返回的雜湊值是使用一個整數表示,通常使用在字典裡,以便實現快速查詢索引值。參數object輸入是數字類型時,是根據數值來計算的,比如1和1.0計算出來是一樣的雜湊值,因此說這個函數是不區分不同的數實值型別。
hash(1)=1      hash(1.0)=1   hash('abc')=700737775

pow(2,10)  用來運算指數的,2的十次方

round(float or int)  四捨五入

zip(obj,obj)

list.sort()  對列表進行排序,但不會產生新的對象,直接把排序結果返回給list

new_list = sorted(list)  同樣是排序,但是會產生一個新的對象    

python內建的sorted方法只支援同類型排序,例如 [ '2', '1' , '3' ],[ 'b', 'c', 'a' ]

對於這種字串:[ '123' , '23' , 'q' ,'qw' , 'r' ,'張' ],sorted方法是按每個字元來排序,數字在前,字母在後,中文最後。

對於'123'和 '23' 因為第一個字元1比2小,所以'123'在前。'qw'第一個字元'q'在'r'前,所以'qw'在'r'前。

對於字母類字元,比較的是其ASCII碼值的大小,所以A在a前


Python之檔案操作

一、開啟檔案

file = open('檔案路徑', '模式')

開啟檔案時,需要指定檔案路徑和以何等方式開啟檔案,開啟後,即可擷取該檔案控制代碼,日後通過此檔案控制代碼對該檔案操作。

開啟檔案的模式有:

  • r ,唯讀模式【預設】
  • w,唯寫模式【不可讀;不存在則建立;存在則清空內容;】
  • x, 唯寫模式【不可讀;不存在則建立,存在則報錯】
  • a, 追加模式【可讀;   不存在則建立;存在則只追加內容;】

"+" 表示可以同時讀寫某個檔案

  • r+, 讀寫【可讀,可寫】
  • w+,寫讀【可讀,可寫】
  • x+ ,寫讀【可讀,可寫】
  • a+, 寫讀【可讀,可寫】

 "b"表示以位元組的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 註:以b方式開啟時,讀取到的內容是位元組類型,寫入時也需要提供位元組類型

二、操作

class TextIOWrapper(_TextIOBase):    """    Character and line based layer over a BufferedIOBase object, buffer.        encoding gives the name of the encoding that the stream will be    decoded or encoded with. It defaults to locale.getpreferredencoding(False).        errors determines the strictness of encoding and decoding (see    help(codecs.Codec) or the documentation for codecs.register) and    defaults to "strict".        newline controls how line endings are handled. It can be None, '',    '\n', '\r', and '\r\n'.  It works as follows:        * On input, if newline is None, universal newlines mode is      enabled. Lines in the input can end in '\n', '\r', or '\r\n', and      these are translated into '\n' before being returned to the      caller. If it is '', universal newline mode is enabled, but line      endings are returned to the caller untranslated. If it has any of      the other legal values, input lines are only terminated by the given      string, and the line ending is returned to the caller untranslated.        * On output, if newline is None, any '\n' characters written are      translated to the system default line separator, os.linesep. If      newline is '' or '\n', no translation takes place. If newline is any      of the other legal values, any '\n' characters written are translated      to the given string.        If line_buffering is True, a call to flush is implied when a call to    write contains a newline character.    """    def close(self, *args, **kwargs): # real signature unknown        關閉檔案        pass    def fileno(self, *args, **kwargs): # real signature unknown        檔案描述符          pass    def flush(self, *args, **kwargs): # real signature unknown        重新整理檔案內部緩衝區        pass    # 一個寫入檔案的進程結束後,才會將資料寫到檔案中,否則資料是存在記憶體中的。flush()    # 可以將記憶體中的資料存到硬碟中       def isatty(self, *args, **kwargs): # real signature unknown        判斷檔案是否是同意tty裝置        pass    def read(self, *args, **kwargs): # real signature unknown        可以指定讀取的字元數,例如f.read(3) 唯讀取三個字元        pass    def readable(self, *args, **kwargs): # real signature unknown        是否可讀        pass    def readline(self, *args, **kwargs): # real signature unknown        僅讀取一行資料        pass    def seek(self, *args, **kwargs): # real signature unknown        指定檔案中指標位置        pass    def seekable(self, *args, **kwargs): # real signature unknown        指標是否可操作        pass    def tell(self, *args, **kwargs): # real signature unknown        擷取指標位置        pass    def truncate(self, *args, **kwargs): # real signature unknown        截斷資料,僅保留指標之前資料        pass    def writable(self, *args, **kwargs): # real signature unknown        是否可寫        pass    def write(self, *args, **kwargs): # real signature unknown        寫內容        pass    def __getstate__(self, *args, **kwargs): # real signature unknown        pass    def __init__(self, *args, **kwargs): # real signature unknown        pass    @staticmethod # known case of __new__    def __new__(*args, **kwargs): # real signature unknown        """ Create and return a new object.  See help(type) for accurate signature. """        pass    def __next__(self, *args, **kwargs): # real signature unknown        """ Implement next(self). """        pass    def __repr__(self, *args, **kwargs): # real signature unknown        """ Return repr(self). """        pass    buffer = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    closed = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    encoding = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    errors = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    line_buffering = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    name = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    newlines = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    _CHUNK_SIZE = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    _finalizing = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

三、管理上下文

為了避免開啟檔案後忘記關閉,可以通過管理上下文,即:

with open('log','r') as f:            ...
如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放檔案資源。

在Python 2.7 及以後,with又支援同時對多個檔案的上下文進行管理,即:

with open('log1') as obj1, open('log2') as obj2:    pass

四、檔案指標

對於 ‘r+’ 模式:檔案指標預設指向0,在進行讀取操作時,將檔案內容讀取完畢後,檔案指標指向檔案末尾。如果對檔案寫入,寫入後檔案指標會指向寫完後的位置,所以剛寫入的資訊不能直接讀出,除非手動修改檔案指標的位置。如果直接對檔案進行寫入,則是從0位置開始寫入。


對於‘a’和‘a+’ 模式:由於是追加模式,所以檔案指標預設在檔案的末尾。


五、

複製一個超大檔案,如果把整個檔案讀取到記憶體然後再複製顯然是非常不可取的,我們應該一行行的讀取然後複製到另一個檔案中

with open('f1.txt', 'r') as f1, open('f2.txt', 'w') as f2:    for line in f1:        f2.write(line)

在close掉檔案後,檔案指標歸零。如果想要儲存檔案指標的位置,可以到儲存到硬碟上,下次再開啟該檔案時,使用f.seek()命令,將檔案指標指向上次的位置,進行後續操作。

7、函數傳值問題


首先還是應該科普下函數參數傳遞機制傳值和傳引用是什麼意思?

   函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通訊的方法問題。基本的參數傳遞機制有兩種:值傳遞和引用傳遞。

  值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變數處理,即在堆棧中開闢了記憶體空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變數進行,不會影響主調函數的實參變數的值。

  引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變數在堆棧中開闢了記憶體空間,但是這時存放的是由主調函數放進來的實參變數的地址。被調函數對形參的任何操作都被處理成間接定址,即通過堆棧中存放的地址訪問主調函數中的實參變數。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變數。

      在python中實際又是怎麼樣的呢?下面看一個例子

def func(c):    print('將實參a傳入函數後,聲明的局部變數c的地址%s' % id(c))    print('begin test')    c = c+2    print('進行運算c=c+2後c的地址%s' % id(c))    print('test over')    return ca = 1if __name__ == '__main__':    print('初始a的地址為%s' % id(a))    n = func(a)    print('運算後a的地址為 %s' % id(a))    print('運算結果n的地址為%s' % id(n))    print(a)    print(n)

運算結果:

分析:

初始 a-->50659377,將a傳遞進函數func實際傳遞的是a的引用,即a的地址。所以形式參數c-->50659377,在進行了操作c=c+2後,

按照道理來說c-->506593808並且a-->506593808,因為引用傳遞的是地址,對c進行的任何操作應該會影響到a才對,但是在Python

中,int和string是不可變類型,因此a的值並不會改變,而是重新開闢一片記憶體地區,用於存放c+2的值。

總結:

1. 在Python中,對於不可變對象,調用自身的任意方法,並不會改變對象自身的內容,這些方法會建立新的對象並返回,保證了不

可變對象本身是永遠不可變的。

2. 對於可變對象,對於其的操作並不會產生新的對象,而是修改他的值

3. python不允許程式員選擇採用傳值還是傳引用。Python參數傳遞採用的肯定是“傳對象引用”的方式。這種方式相當於傳值和傳引用

的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值相當於通過“傳引用”來傳遞對

象。如果函數收到的是一個不可變對象(比如數字、字元或者元組)的引用,就不能直接修改原始對象相當於通過“傳值'來傳遞對

象。

isinstance(obj, cls)

 檢查是否obj是否是類 cls 的對象

class Foo(object):    pass obj = Foo() isinstance(obj, Foo)

issubclass(sub, super)

檢查sub類是否是 super 類的衍生類別

class Foo(object):    pass class Bar(Foo):    pass issubclass(Bar, Foo)



一、異常處理:

  try:num = input('請輸入一個數字')result = int(num)  except Exceptions as e:print('輸入錯誤')

二、異常種類:

AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性xIOError 輸入/輸出異常;基本上是無法開啟檔案ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]KeyError 試圖訪問字典裡不存在的鍵KeyboardInterrupt Ctrl+C被按下NameError 使用一個還未被賦予對象的變數SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)TypeError 傳入物件類型與要求的不符合UnboundLocalError 試圖訪問一個還未被設定的局部變數,基本上是由於另有一個同名的全域變數,導致你以為正在訪問它ValueError 傳入一個調用者不期望的值,即使值的類型是正確的

對於上述執行個體,異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。

# 未捕獲到異常,程式直接報錯 s1 = 'hello'try:    int(s1)except IndexError,e:    print e

所以,寫程式時需要考慮到try代碼塊中可能出現的任意異常,可以這樣寫:

s1 = 'hello'try:    int(s1)except IndexError,e:    print eexcept KeyError,e:    print eexcept ValueError,e:    print e

萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常,即:

s1 = 'hello'try:    int(s1)except Exception,e:    print e

接下來你可能要問了,既然有這個萬能異常,其他異常是不是就可以忽略了!

答:當然不是,對於特殊處理或提醒的異常需要先定義,最後定義Exception來確保程式正常運行。

s1 = 'hello'try:    int(s1)except KeyError,e:    print '鍵錯誤'except IndexError,e:    print '索引錯誤'except Exception, e:    print '錯誤'

三、 異常其他結構

try:    # 主代碼塊    passexcept KeyError,e:    # 異常時,執行該塊    passelse:    # 主代碼塊執行完,執行該塊    passfinally:    # 無論異常與否,最終執行該塊    pass

四、 主動觸發異常

try:    raise Exception('錯誤了。。。')except Exception,e:    print e

五、 自訂異常

class WupeiqiException(Exception):     def __init__(self, msg):        self.message = msg     def __str__(self):        return self.message try:    raise WupeiqiException('我的異常')except WupeiqiException,e:    print e

六、 斷言

# assert 條件 assert 1 == 1 assert 1 == 2

第一條命令

flask.__version__

返回庫的版本

第二條命令

flask.__file__

返回庫所在的檔案夾




著作權聲明:轉載請註明原文地址 http://blog.csdn.net/qq_29113041/article/details/78205657

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.