bytes類型


input--out---correction(輸入輸出正確)
***第一模塊回顧
    byte類型:數據存到硬盤,硬盤只能存儲2進制。
            gbk/utf-8--->>decode(解碼)--->>unicode
            Unicode--->>encode(編碼)--->>gbk/utf-8(2進制)
            文字--》utf-8/gbk-->>2進制
            圖片--》jpg/png-->>2進制
            音樂--》mp3/wav-->>2進制
            視頻--》mp4/mov-->>2進制
        bytes類型,以16進制形式表示,2個16進制數(如0x e 5)構成一個byte(字節),
        以‘b’來標識
    1byte = 8bit
    python3文件的默認編碼是utf-8(pycharm默認加載文件都是用utf-8編碼)
    eg:f = open('bytes.txt','w',encoding='gbk')  # 自己指定編碼
    eg:f = open('bytes.txt','wb')  # 以2進制模式就不用指定編碼
            
        ‘wb’-----二進制寫(必須是二進制)
        ‘w’------文件寫(必須是字符串)
            
            python按你指定的編碼來編成2進制
            
    總結 : 1,字符存硬盤 要變成bytes
            2,網絡傳輸  字符要變成bytes類型
            
**深淺copy
    dict,list,set,(和變量賦值指向不一樣)
    s = {'name' : 'alex', .....}
    s2 = s ,此時s2和s是共享 同一份數據的(指向同一個內存地址(杯子)),
    s,s2改dict,list,set里面的任一元素會同時改。
    
    深淺copy(借助copy模塊)
    s.copy,淺copy(只復制第一層)復制一份數據,
    只能改第一層的(第一層獨立),里面的嵌套斷線的數據改了會同時變
    
    s.deepcopy,深copy,所有層都完全獨立。
    
**編碼轉換
    >>> s
    '你好未來'
    >>> s.encode('utf-8')  #編碼,以utf-8編碼成2進制
    b'\xe4(2個16進制數)\xbd\xa0\xe5\xa5\xbd\xe6\x9c\xaa\xe6\x9d\xa5'#12個字節
    >>> s_utf8 = s.encode('utf-8')
    >>> s_utf8
    b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x9c\xaa\xe6\x9d\xa5'

    >>> s_utf8.decode('utf-8')  #以utf-8格式解碼,也可以不寫,就會以python3默認的utf-8
    '你好未來'
    
**編碼與解碼(以utf-8格式編碼的就必須用utf-8解碼,不然會報錯)
    
    gbk/utf-8--->>decode(解碼)--->>unicode
    Unicode--->>encode(編碼)--->>gbk/utf-8(2進制)
    s.encode('utf-8')-->>以utf-8格式編碼成2進制
    s.dncode('utf-8')-->>從2進制解碼成unicode str
    
**編碼的轉換:把文字從一種編碼轉成另外一種,比如,從gbk轉成utf-8
        Unicode:萬國碼,跟所有的編碼之間有映射關系
            >>> s
            '你好未來'
            >>> s.encode('utf-8')
            b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x9c\xaa\xe6\x9d\xa5'
            >>> s
            '你好未來'
            >>> s.encode('gbk')
            b'\xc4\xe3\xba\xc3\xce\xb4\xc0\xb4'
            >>> s_gbk = s.encode('gbk')
            >>> s_gbk.decode('gbk')
            '你好未來'
            >>> s_gbk.decode('gbk').encode('utf-8')  #gbk轉換為utf-8
            b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x9c\xaa\xe6\x9d\xa5'
2進制模式:rb  wb  ab
r 文本模式,把2進制解碼成str,Unicode



**函數
    特性:1,減少重復  2,使程序易擴展  3, 使程序易維護

    返回值(return),意味着函數的中止
    
    def register(name, age, major, country = 'CN',*args,**kwargs):  # 這里country是默認參數
        info = """
        --------你的注冊信息---------
        name:  %s
        age:  %s
        major:  %s
        country:  %s
        """ % (name,age,major, country)
        print(info)
    
    register('alex', 22, 'cs')
    register('al', 22, 'math')
    register('ax', 22, 'us', 'US')
    
    函數的參數: 形參和實參
    
    函數參數的優先級:位置參數  >  默認參數/關鍵參數
    
    
                函數外部的代碼要想獲取函數的執行結果,就可以在函數里用return
                語句把結果返回。
                def stu_register(name, age, course = 'PY', country = 'CN'):
                    print('-----注冊學生信息-----‘)
                    print('Name:', name)
                    print('Age:', age)
                    print('Country:', country)
                    print('Course:', course)
                    if age > 22:
                        return False
                    else:
                        return True
                registriation_status = stu_register('alex', 22, course='PY', 'CN')
                if registriation_status:
                    print('注冊成功’)
                else:
                    print('too old to be a student.')
                
*注意:1.函數在執行過程中,只要遇到return語句,就會停止執行並返回結果,所以
    也可以理解為return語句代表函數的結束。
    2.如果未在函數中指定return,那這個函數的返回值為None
    
    函數返回多個值
        def test():
            return 1,2,3,4,5   #  返回多個值會以tuple包起來
        print(test())


**全局變量和局部變量    (locals()方法,打印所有的局部變量
                      globals()方法,打印所有的全局變量)(從局部變量》嵌套變量》全局變量)
        name = 'alex'  #  全局變量
        def change():
            name = '金角大王'  #局部變量
            global name #  在函數內部聲明(創建)一個全局變量
            print(name)
            print(locals())
            print(globals())
        
        change()
        print(name)
        
**函數傳遞列表,字典,集合時發生的現象        
            d = {'name':'alex', 'age':28, 'hobby':'dabaojian'}
            l = ['rebeeca', 'katrina', 'rachel']
                    
            def change_data(info, girls):
                info['hobby'] = 'study'
                girls.append('xiaoyun')
            change_data(d,l)
            print(d,l)##  dic,li 這個內存地址沒有變,只是里面的元素變了

            結果為d 為{'name': 'alex', 'age': 22, 'hobbie': 'study'}
            l為['Rebeeca', 'Katrina', 'Rachel', 'xiaoyun']

**嵌套函數,匿名函數和高階函數    
    嵌套函數        name = '小猿圈'
                    def change():
                        # name = '小猿圈,自學編程'
                        def change2():
                            #global name 如果聲明了這句,下面的name改的是最外層的全局變量
                            # name = '小猿圈,自學編程,不要錢'
                            print('第3層打印', name)
                        change2()  # 調用內層函數
                        print('第2層打印', name)
                    change()
                    print('最外層打印',name)
                    
    匿名函數
        c = lambda x,y:x**y
        print(c(2,8))
    與下面的代碼等價:
        def calc(x, y):
            return x**y
        print(calc(2, 8))
    
    
            例子:    def calc(x):
                    return x**2
                #res = map(calc, [1,2,3,4,5,6])
                res = map(lambda x:x**2,[1,2,3,4,5,6])#lambda函數中最多加一個三元運算
                print(res)
                for i in res:
                    print(i)
    
    高階函數:1,接收一個或者多個函數作為輸入 2,return返回另外一個函數
        def get_abs(n):
            if n < 0:
                n = int(str(n).strip('-'))
            return n
        def add(x,y,f):
            return f(x) + f(y)
        res = add(3, -6, get_abs)
        print(res)
        
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                


























免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM