欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 數(shù)據(jù)類型--str&bytes

系統(tǒng) 1615 0

一、字符串(str)

1.1 字符串的定義

  • 字符串 就是 一串字符,是編程語言中表示文本的數(shù)據(jù)類型
  • 在 Python 中可以使用 一對雙引號 " 或者 一對單引號 ' 定義一個字符串
  • 可以使用?索引?獲取一個字符串中?指定位置的字符,索引計數(shù)從?0?開始
  • 也可以使用 for 循環(huán)遍歷 字符串中每一個字符
            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
               9
            
             str1 = 
            
              "
            
            
              hello python
            
            
              "
            
            
              10
            
            
              11
            
            
              for
            
             c 
            
              in
            
            
               str1:

            
            
              12
            
            
              print
            
            (c, end=
            
              '
            
            
              \t
            
            
              '
            
            
              )

            
            
              13
            
            
              14
            
            
              #
            
            
               運行結(jié)果:h    e    l    l    o         p    y    t    h    o    n
            
          

1.2 字符串的常用操作

            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
               9
            
            
              #
            
            
               1   * 重復(fù)輸出字符串
            
            
              10
            
            
              print
            
            (
            
              '
            
            
              hello
            
            
              '
            
             * 2
            
              )

            
            
              11
            
            
              12
            
            
              #
            
            
               2 [] ,[:] 通過索引獲取字符串中字符
            
            
              13
            
            
              print
            
            (
            
              '
            
            
              helloworld
            
            
              '
            
            [2
            
              :])

            
            
              14
            
            
              15
            
            
              #
            
            
               3 in  成員運算符 - 如果字符串中包含給定的字符返回 True
            
            
              16
            
            
              print
            
            (
            
              '
            
            
              el
            
            
              '
            
            
              in
            
            
              '
            
            
              hello
            
            
              '
            
            
              )

            
            
              17
            
            
              18
            
            
              #
            
            
               4 %   格式字符串
            
            
              19
            
            
              print
            
            (
            
              '
            
            
              alex is a good teacher
            
            
              '
            
            
              )

            
            
              20
            
            
              print
            
            (
            
              '
            
            
              %s is a good teacher
            
            
              '
            
             % 
            
              '
            
            
              alex
            
            
              '
            
            
              )

            
            
              21
            
            
              22
            
            
              #
            
            
               5 +   字符串拼接
            
            
              23
            
             a = 
            
              '
            
            
              123
            
            
              '
            
            
              24
            
             b = 
            
              '
            
            
              abc
            
            
              '
            
            
              25
            
             c = 
            
              '
            
            
              789
            
            
              '
            
            
              26
            
             d1 = a + b +
            
               c

            
            
              27
            
            
              print
            
            (d1)  
            
              #
            
            
               +效率低,該用join
            
            
              28
            
            
              29
            
            
              #
            
            
               join效率高
            
            
              30
            
             d2 = 
            
              ''
            
            
              .join([a, b, c])

            
            
              31
            
            
              print
            
            (d2)
          

1.3 字符串相關(guān)的函數(shù)

              
                #
              
              
                 string.upper() 轉(zhuǎn)換 string 中的小寫字母為大寫
              
              
                
#
              
              
                 string.lower() 轉(zhuǎn)換 string 中所有大寫字符為小寫
              
              
                
#
              
              
                 string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以obj開頭,是則返回True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內(nèi)檢查.
              
              
                
#
              
              
                 string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結(jié)束,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,如果是,返回 True,否則返回 False.
              
              
                
#
              
              
                 string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
              
              
                
#
              
              
                 string.strip([obj]) 在 string 上執(zhí)行 lstrip()和 rstrip() 去除空格
              
              
                
#
              
              
                 string.split(str="", num=string.count(str)) 以 str 為分隔符切片 string,如果 num有指定值,則僅分隔 num 個子字符串
              
              
                
#
              
              
                 string.find(str, beg=0, end=len(string)) 檢測 str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi),如果是返回開始的索引值,否則返回-1
              
              
                
#
              
              
                 string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是ignore或者replace
              
              
                
#
              
              
                 string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式解碼 string,如果出錯默認報一個ValueError的異常,除非errors指定的是'ignore'或 者'replace'
              
              
                
#
              
              
                 string.join(seq) 以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個新的字符串
              
              
                
#
              
              
                 string.format()  格式化輸出
              
            
常用的函數(shù)
              
                #
              
              
                 string.capitalize() 把字符串的第一個字符大寫
              
              
                
#
              
              
                 string.center(width) 返回一個原字符串居中,并使用空格填充至長度 width 的新字符串
              
              
                
#
              
              
                 string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
              
              
                
#
              
              
                 string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符號轉(zhuǎn)為空格,tab 符號默認的空格數(shù)是8。
              
              
                
#
              
              
                 string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在 string中會報一個異常.
              
              
                
#
              
              
                 string.isalnum() 如果 string 至少有一個字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False
              
              
                
#
              
              
                 string.isalpha() 如果 string 至少有一個字符并且所有字符都是字母則返回 True,否則返回 False
              
              
                
#
              
              
                 string.isdecimal() 如果 string 只包含十進制數(shù)字則返回 True 否則返回 False.
              
              
                
#
              
              
                 string.isdigit() 如果 string 只包含數(shù)字則返回 True 否則返回 False.
              
              
                
#
              
              
                 string.islower() 如果 string 中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫,則返回 True,否則返回 False
              
              
                
#
              
              
                 string.isnumeric() 如果 string 中只包含數(shù)字字符,則返回 True,否則返回 False
              
              
                
#
              
              
                 string.isspace() 如果 string 中只包含空格,則返回 True,否則返回 False.
              
              
                
#
              
              
                 string.istitle() 如果 string 是標題化的(見 title())則返回 True,否則返回 False
              
              
                
#
              
              
                 string.isupper() 如果 string 中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 True,否則返回 False
              
              
                
#
              
              
                 string.ljust(width) 返回一個原字符串左對齊,并使用空格填充至長度 width 的新字符串
              
              
                
#
              
              
                 string.lstrip() 截掉 string 左邊的空格
              
              
                
#
              
              
                 string.maketrans(intab, outtab]) maketrans() 方法用于創(chuàng)建字符映射的轉(zhuǎn)換表,對于接受兩個參數(shù)的最簡單的調(diào)用方式,第一個參數(shù)是字符串,表示需要轉(zhuǎn)換的字符,第二個參數(shù)也是字符串表示轉(zhuǎn)換的目標。
              
              
                
#
              
              
                 max(str) 返回字符串 str 中最大的字母。
              
              
                
#
              
              
                 min(str) 返回字符串 str 中最小的字母。
              
              
                
#
              
              
                 string.partition(str) 有點像 find()和 split()的結(jié)合體,從 str 出現(xiàn)的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
              
              
                
#
              
              
                 string.rfind(str, beg=0,end=len(string) ) 類似于 find()函數(shù),不過是從右邊開始查找.
              
              
                
#
              
              
                 string.rindex( str, beg=0,end=len(string)) 類似于 index(),不過是從右邊開始.
              
              
                
#
              
              
                 string.rjust(width) 返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串
              
              
                
#
              
              
                 string.rpartition(str) 類似于 partition()函數(shù),不過是從右邊開始查找.
              
              
                
#
              
              
                 string.rstrip() 刪除 string 字符串末尾的空格.
              
              
                
#
              
              
                 string.splitlines(num=string.count('\n')) 按照行分隔,返回一個包含各行作為元素的列表,如果 num 指定則僅切片 num 個行.
              
              
                
#
              
              
                 string.swapcase() 翻轉(zhuǎn) string 中的大小寫
              
              
                
#
              
              
                 string.title() 返回"標題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
              
              
                
#
              
              
                 string.translate(str, del="") 根據(jù) str 給出的表(包含 256 個字符)轉(zhuǎn)換 string 的字符,要過濾掉的字符放到 del 參數(shù)中
              
            
其它的函數(shù)
            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
               9
            
             name = 
            
              "
            
            
              hello world
            
            
              "
            
            
              10
            
            
              #
            
            
               小寫字母變?yōu)榇髮?
            
            
              11
            
            
              print
            
            (name.upper())    
            
              #
            
            
               HELLO WORLD
            
            
              12
            
            
              print
            
            (name)            
            
              #
            
            
               hello world
            
            
              13
            
            
              14
            
            
              #
            
            
               把大寫字母變小寫
            
            
              15
            
             name2 = 
            
              "
            
            
              HELLO WORLD
            
            
              "
            
            
              16
            
            
              print
            
            (name2.lower())    
            
              #
            
            
               hello world
            
            
              17
            
            
              print
            
            (name2)            
            
              #
            
            
               HELLO WORLD
            
            
              18
            
            
              19
            
            
              #
            
            
               判斷是否以。。。開頭
            
            
              20
            
             name3 = 
            
              "
            
            
              hello
            
            
              "
            
            
              21
            
            
              print
            
            (name3.startswith(
            
              "
            
            
              he
            
            
              "
            
            ))   
            
              #
            
            
               True
            
            
              22
            
            
              #
            
            
               檢查字符串是否以。。結(jié)尾
            
            
              23
            
            
              print
            
            (name3.endswith(
            
              "
            
            
              lo
            
            
              "
            
            ))     
            
              #
            
            
               True
            
            
              24
            
            
              25
            
            
              #
            
            
               replace   替換
            
            
              26
            
             name4 = 
            
              "
            
            
              python
            
            
              "
            
            
              27
            
            
              print
            
            (name4.replace(
            
              '
            
            
              th
            
            
              '
            
            , 
            
              '
            
            
              aa
            
            
              '
            
            ))    
            
              #
            
            
               pyaaon
            
            
              28
            
            
              29
            
            
              #
            
            
               去除空格
            
            
              30
            
             name5 = 
            
              "
            
            
                bbcc  
            
            
              "
            
            
              31
            
            
              print
            
            (name5.strip())    
            
              #
            
            
               bbcc
            
            
              32
            
            
              33
            
            
              #
            
            
               分割
            
            
              34
            
             str1 = 
            
              "
            
            
              aa|bb|cc|dd
            
            
              "
            
            
              35
            
            
              print
            
            (str1.split(
            
              '
            
            
              |
            
            
              '
            
            ))  
            
              #
            
            
               ['aa', 'bb', 'cc', 'dd']
            
            
              36
            
            
              37
            
            
              #
            
            
               查找  返回開始的索引值
            
            
              38
            
             str2 = 
            
              "
            
            
              we are family
            
            
              "
            
            
              39
            
            
              print
            
            (str2.find(
            
              "
            
            
              are
            
            
              "
            
            ))     
            
              #
            
            
               3
            
            
              40
            
            
              41
            
            
              #
            
            
               join  拼接
            
            
              42
            
             lst1 = [
            
              '
            
            
              aa
            
            
              '
            
            , 
            
              '
            
            
              bb
            
            
              '
            
            , 
            
              '
            
            
              cc
            
            
              '
            
            , 
            
              '
            
            
              dd
            
            
              '
            
            
              ]

            
            
              43
            
            
              print
            
            (
            
              "
            
            
              -
            
            
              "
            
            .join(lst1))       
            
              #
            
            
               aa-bb-cc-dd
            
          

1.4 字符串切片

  • 切片 使用 索引值 來限定范圍,根據(jù) 步長 從原序列中 取出一部分 元素組成新序列
  • 切片 方法適用于 字符串、列表、元組
  • 切片的語法表達式為:[start_index : end_index : step],其中:
    • start_index:起始索引
    • end_index:結(jié)束索引
    • step:步長
切片操作是指按照步長,截取從起始索引到結(jié)束索引,但不包含結(jié)束索引(也就是結(jié)束索引減1)的所有元素。
切片不會改變原對象,而是重新生成了一個新的對象
            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
               9
            
             str1 = 
            
              "
            
            
              hello world
            
            
              "
            
            
              10
            
            
              11
            
            
              12
            
            
              print
            
            (str1[1:6
            
              ])

            
            
              13
            
            
              #
            
            
               結(jié)果是ello
            
            
              14
            
            
              15
            
            
              print
            
            (str1[1:6:2
            
              ])

            
            
              16
            
            
              #
            
            
               結(jié)果是el
            
            
              17
            
            
              18
            
            
              print
            
            (str1[2
            
              :])

            
            
              19
            
            
              #
            
            
               結(jié)果是llo world
            
            
              20
            
            
              #
            
            
               保留start_index,但省略end_index,這樣會從起始索引開始,切到最后一個元素為止
            
            
              21
            
            
              22
            
            
              print
            
            (str1[:5
            
              ])

            
            
              23
            
            
              #
            
            
               結(jié)果是hello
            
            
              24
            
            
              #
            
            
               省略start_index,保留end_index,這樣會從第一個元素開始,切到end_index - 1的元素為止
            
            
              25
            
            
              26
            
            
              print
            
            (str1[-1:-6:-1
            
              ])

            
            
              27
            
            
              #
            
            
               結(jié)果是dlrow
            
            
              28
            
            
              29
            
            
              print
            
            (str1[1:6:-1
            
              ])

            
            
              30
            
            
              #
            
            
               結(jié)果為空
            
            
              31
            
            
              #
            
            
               切片時,一定要保證start_index到end_index的方向與步長step的方向同向,否則會切出空的序列
            
          

1.5 字符串拼接

Python的字符串格式化有三種方式:?百分號方式、format方式、f-strings方式

1.5.1 百分號方式

格式:%[(name)][flags][width].[precision]typecode

  • (name) ? ? ?可選,用于選擇指定的key
  • flags ? ? ? ? ?可選,可供選擇的值有:
    • + ? ? ? 右對齊;正數(shù)前加正好,負數(shù)前加負號;
    • - ? ? ? ?左對齊;正數(shù)前無符號,負數(shù)前加負號;
    • 空格 ? ?右對齊;正數(shù)前加空格,負數(shù)前加負號;
    • 0 ? ? ? ?右對齊;正數(shù)前無符號,負數(shù)前加負號;用0填充空白處
  • width ? ? ? ? 可選,占有寬度
  • precision ? 可選,小數(shù)點后保留的位數(shù)
  • typecode ? ?必選
    • s,獲取傳入對象的__str__方法的返回值,并將其格式化到指定位置
    • r,獲取傳入對象的__repr__方法的返回值,并將其格式化到指定位置
    • c,整數(shù):將數(shù)字轉(zhuǎn)換成其unicode對應(yīng)的值,10進制范圍為?0 <= i <= 1114111(py27則只支持0-255);字符:將字符添加到指定位置
    • o,將整數(shù)轉(zhuǎn)換成 八進制表示,并將其格式化到指定位置
    • x,將整數(shù)轉(zhuǎn)換成十六進制表示,并將其格式化到指定位置
    • d,將整數(shù)、浮點數(shù)轉(zhuǎn)換成 十 進制表示,并將其格式化到指定位置
    • e,將整數(shù)、浮點數(shù)轉(zhuǎn)換成科學(xué)計數(shù)法,并將其格式化到指定位置(小寫e)
    • E,將整數(shù)、浮點數(shù)轉(zhuǎn)換成科學(xué)計數(shù)法,并將其格式化到指定位置(大寫E)
    • f, 將整數(shù)、浮點數(shù)轉(zhuǎn)換成浮點數(shù)表示,并將其格式化到指定位置(默認保留小數(shù)點后6位)
    • F,同上
    • g,自動調(diào)整將整數(shù)、浮點數(shù)轉(zhuǎn)換成 浮點型或科學(xué)計數(shù)法表示(超過6位數(shù)用科學(xué)計數(shù)法),并將其格式化到指定位置(如果是科學(xué)計數(shù)則是e;)
    • G,自動調(diào)整將整數(shù)、浮點數(shù)轉(zhuǎn)換成浮點型或科學(xué)計數(shù)法表示(超過6位數(shù)用科學(xué)計數(shù)法),并將其格式化到指定位置(如果是科學(xué)計數(shù)則是E;)
    • %,當(dāng)字符串中存在格式化標志時,需要用 %%表示一個百分號

注:Python中百分號格式化是不存在自動將整數(shù)轉(zhuǎn)換成二進制表示的方式

常用的格式化:

            
               1
            
             tpl = 
            
              "
            
            
              i am %s
            
            
              "
            
             % 
            
              "
            
            
              alex
            
            
              "
            
            
               2
            
            
               3
            
             tpl = 
            
              "
            
            
              i am %s age %d
            
            
              "
            
             % (
            
              "
            
            
              alex
            
            
              "
            
            , 18
            
              )

            
            
               4
            
            
               5
            
             tpl = 
            
              "
            
            
              i am %(name)s age %(age)d
            
            
              "
            
             % {
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              alex
            
            
              "
            
            , 
            
              "
            
            
              age
            
            
              "
            
            : 18
            
              }

            
            
               6
            
            
               7
            
             tpl = 
            
              "
            
            
              percent %.2f
            
            
              "
            
             % 99.97623

            
               8
            
            
               9
            
             tpl = 
            
              "
            
            
              i am %(pp).2f
            
            
              "
            
             % {
            
              "
            
            
              pp
            
            
              "
            
            : 123.425556
            
              , }

            
            
              10
            
            
              11
            
             tpl = 
            
              "
            
            
              i am %.2f %%
            
            
              "
            
             % 123.425556
          

1.5.2 format方式

格式:[[fill]align][sign][#][0][width][,][.precision][type]

    • fill? ? ? ? ? 【可選】空白處填充的字符
    • align? ? ? 【可選】對齊方式(需配合width使用)
      • <,內(nèi)容左對齊
      • >,內(nèi)容右對齊(默認)
      • =,內(nèi)容右對齊,將符號放置在填充字符的左側(cè),且只對數(shù)字類型有效。 即使:符號+填充物+數(shù)字
      • ^,內(nèi)容居中
    • sign ? ? ? ? 【可選】有無符號數(shù)字
      • +,正號加正,負號加負;
      • ?-,正號不變,負號加負;
      • 空格 ,正號空格,負號加負;
    • # ? ? ? ? ? ?【可選】對于二進制、八進制、十六進制,如果加上#,會顯示 0b/0o/0x,否則不顯示
    • , ? ? ? ? ? ?【可選】為數(shù)字添加分隔符,如:1,000,000
    • width ? ? ? 【可選】格式化位所占寬度
    • .precision 【可選】小數(shù)位保留精度
    • type ? ? ? ? 【可選】格式化類型
      • 傳入” 字符串類型 “的參數(shù)
        • s,格式化字符串類型數(shù)據(jù)
        • 空白,未指定類型,則默認是None,同s
      • 傳入“ 整數(shù)類型 ”的參數(shù)
        • b,將10進制整數(shù)自動轉(zhuǎn)換成2進制表示然后格式化
        • c,將10進制整數(shù)自動轉(zhuǎn)換為其對應(yīng)的unicode字符
        • d,十進制整數(shù)
        • o,將10進制整數(shù)自動轉(zhuǎn)換成8進制表示然后格式化;
        • x,將10進制整數(shù)自動轉(zhuǎn)換成16進制表示然后格式化(小寫x)
        • X,將10進制整數(shù)自動轉(zhuǎn)換成16進制表示然后格式化(大寫X)
      • 傳入“ 浮點型或小數(shù)類型?”的參數(shù)
        • e, 轉(zhuǎn)換為科學(xué)計數(shù)法(小寫e)表示,然后格式化;
        • E, 轉(zhuǎn)換為科學(xué)計數(shù)法(大寫E)表示,然后格式化;
        • f , 轉(zhuǎn)換為浮點型(默認小數(shù)點后保留6位)表示,然后格式化;
        • F, 轉(zhuǎn)換為浮點型(默認小數(shù)點后保留6位)表示,然后格式化;
        • g, 自動在e和f中切換
        • G, 自動在E和F中切換
        • %,顯示百分比(默認顯示小數(shù)點后6位)

常用的格式化:

            
               1
            
             tpl = 
            
              "
            
            
              i am {}, age {}, {}
            
            
              "
            
            .format(
            
              "
            
            
              seven
            
            
              "
            
            , 18, 
            
              '
            
            
              alex
            
            
              '
            
            
              )

            
            
               2
            
            
               3
            
             tpl = 
            
              "
            
            
              i am {}, age {}, {}
            
            
              "
            
            .format(*[
            
              "
            
            
              seven
            
            
              "
            
            , 18, 
            
              '
            
            
              alex
            
            
              '
            
            
              ])

            
            
               4
            
            
               5
            
             tpl = 
            
              "
            
            
              i am {0}, age {1}, really {0}
            
            
              "
            
            .format(
            
              "
            
            
              seven
            
            
              "
            
            , 18
            
              )

            
            
               6
            
            
               7
            
             tpl = 
            
              "
            
            
              i am {0}, age {1}, really {0}
            
            
              "
            
            .format(*[
            
              "
            
            
              seven
            
            
              "
            
            , 18
            
              ])

            
            
               8
            
            
               9
            
             tpl = 
            
              "
            
            
              i am {name}, age {age}, really {name}
            
            
              "
            
            .format(name=
            
              "
            
            
              seven
            
            
              "
            
            , age=18
            
              )

            
            
              10
            
            
              11
            
             tpl = 
            
              "
            
            
              i am {name}, age {age}, really {name}
            
            
              "
            
            .format(**{
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              seven
            
            
              "
            
            , 
            
              "
            
            
              age
            
            
              "
            
            : 18
            
              })

            
            
              12
            
            
              13
            
             tpl = 
            
              "
            
            
              i am {0[0]}, age {0[1]}, really {0[2]}
            
            
              "
            
            .format([1, 2, 3], [11, 22, 33
            
              ])

            
            
              14
            
            
              15
            
             tpl = 
            
              "
            
            
              i am {:s}, age {:d}, money {:f}
            
            
              "
            
            .format(
            
              "
            
            
              seven
            
            
              "
            
            , 18, 88888.1
            
              )

            
            
              16
            
            
              17
            
             tpl = 
            
              "
            
            
              i am {:s}, age {:d}
            
            
              "
            
            .format(*[
            
              "
            
            
              seven
            
            
              "
            
            , 18
            
              ])

            
            
              18
            
            
              19
            
             tpl = 
            
              "
            
            
              i am {name:s}, age {age:d}
            
            
              "
            
            .format(name=
            
              "
            
            
              seven
            
            
              "
            
            , age=18
            
              )

            
            
              20
            
            
              21
            
             tpl = 
            
              "
            
            
              i am {name:s}, age {age:d}
            
            
              "
            
            .format(**{
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              seven
            
            
              "
            
            , 
            
              "
            
            
              age
            
            
              "
            
            : 18
            
              })

            
            
              22
            
            
              23
            
             tpl = 
            
              "
            
            
              numbers: {:b},{:o},{:d},{:x},{:X}, {:%}
            
            
              "
            
            .format(15, 15, 15, 15, 15, 15.87623, 2
            
              )

            
            
              24
            
            
              25
            
             tpl = 
            
              "
            
            
              numbers: {:b},{:o},{:d},{:x},{:X}, {:%}
            
            
              "
            
            .format(15, 15, 15, 15, 15, 15.87623, 2
            
              )

            
            
              26
            
            
              27
            
             tpl = 
            
              "
            
            
              numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}
            
            
              "
            
            .format(15
            
              )

            
            
              28
            
            
              29
            
             tpl = 
            
              "
            
            
              numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}
            
            
              "
            
            .format(num=15)
          

1.5.3 f-strings

f-strings 提供一種簡潔易讀的方式, 可以在字符串中包含 Python 表達式. f-strings 以字母 'f' 或 'F' 為前綴, 格式化字符串使用一對單引號、雙引號、三單引號、三雙引號. 格式化字符串中。

            
               1
            
            
              #
            
            
              !/usr/bin/env python
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/6/5

            
            
               7
            
            
              """
            
            
               8
            
             name = 
            
              '
            
            
              豪仔
            
            
              '
            
            
               9
            
             age = 26

            
              10
            
             format_string1 = f
            
              '
            
            
              我的名字是 {name}, 我的年齡是 {age}
            
            
              '
            
            
              11
            
            
              print
            
            (format_string1)  
            
              #
            
            
               我的名字是 豪仔, 我的年齡是 26
            
            
              12
            
            
              13
            
             format_string2 = f
            
              "
            
            
              我的名字是 {name}, 我的年齡是 {age}
            
            
              "
            
            
              14
            
            
              print
            
            (format_string2)   
            
              #
            
            
               我的名字是 豪仔, 我的年齡是 26
            
            
              15
            
            
              16
            
             format_string3 = F
            
              '''
            
            
              我的名字是 {name}, 我的年齡是 {age}
            
            
              '''
            
            
              17
            
            
              print
            
            (format_string3)  
            
              #
            
            
               我的名字是 豪仔, 我的年齡是 26
            
            
              18
            
            
              19
            
             format_string4 = F
            
              """
            
            
              我的名字是 {name}, 我的年齡是 {age}
            
            
              """
            
            
              20
            
            
              print
            
            (format_string4)   
            
              #
            
            
               我的名字是 豪仔, 我的年齡是 26
            
            
              21
            
            
              22
            
            
              #
            
            
               花括號中的數(shù)字會先運算
            
            
              23
            
             format_string5 = f
            
              '
            
            
              3 + 5 = {3 + 5}
            
            
              '
            
            
              24
            
            
              print
            
            (format_string5)   
            
              #
            
            
               3 + 5 = 8
            
            
              25
            
            
              26
            
             a = 10

            
              27
            
             b = 20

            
              28
            
             format_string6 = f
            
              '
            
            
              3 + 5 = {a + b}
            
            
              '
            
            
              29
            
            
              print
            
            (format_string6)   
            
              #
            
            
               3 + 5 = 30
            
            
              30
            
            
              31
            
            
              #
            
            
               兩個花括號會被替換為一個花括號, 注意{{}} 不表示表達式
            
            
              32
            
             format_string7 = F
            
              '
            
            
              我的名字是 {{name}}, 我的年齡是 {{age}}
            
            
              '
            
            
              33
            
            
              print
            
            (format_string7)
          

?

二、bytes

Python3最重要的新特性之一是對字符串和二進制數(shù)據(jù)流做了明確的區(qū)分。文本總是Unicode,由str類型表示,二進制數(shù)據(jù)則由bytes類型表示。Python3不會以任意隱式的方式混用str和bytes,你不能拼接字符串和字節(jié)流,也無法在字節(jié)流里搜索字符串(反之亦然),也不能將字符串傳入?yún)?shù)為字節(jié)流的函數(shù)(反之亦然)。

2.1 回顧編碼的發(fā)展史

在計算機歷史的早期,美國為代表的英語系國家主導(dǎo)了整個計算機行業(yè),26個英文字母組成了多樣的英語單詞、語句、文章。因此,最早的字符編碼規(guī)范是ASCII碼,一種8位即1個字節(jié)的編碼規(guī)范,它可以涵蓋整個英語系的編碼需要。

編碼是什么?編碼就是把一個字符用一個二進制來表示。我們都知道,所有的東西,不管是英文、中文還是符號等等,最終存儲在磁盤上都是01010101這類東西。在計算機內(nèi)部,讀取和存儲數(shù)據(jù)歸根結(jié)底,處理的都是0和1組成的比特流。問題來了,人類看不懂這些比特流,如何讓這些010101對人類變得可讀呢?于是出現(xiàn)了字符編碼,它是個翻譯機,在計算機內(nèi)部某個地方,透明的幫我們將比特流翻譯成人類可以直接理解的文字。對于一般用戶,不需要知道這個過程是什么原理,是怎么執(zhí)行的。但是對于程序員卻是個必須搞清楚的問題。

以ASCII編碼為例,它規(guī)定1個字節(jié)8個比特位代表1個字符的編碼,也就是“00000000”這么寬,一個一個字節(jié)的解讀。例如:01000001表示大寫字母A,有時我們會“偷懶"的用65這個十進制來表示A在ASCII中的編碼。8個比特位,可以沒有重復(fù)的最多表示2的8次方(255)個字符。

后來,計算機得到普及,中文、日文、韓文等等國家的文字需要在計算機內(nèi)表示,ASCII的255位遠遠不夠,于是標準組織制定出了叫做UNICODE的萬國碼,它規(guī)定任何一個字符(不管哪國的)至少以2個字節(jié)表示,可以更多。其中,英文字母就是用2個字節(jié),而漢字是3個字節(jié)。這個編碼雖然很好,滿足了所有人的要求,但是它不兼容ASCII,同時還占用較多的空間和內(nèi)存。因為,在計算機世界更多的字符是英文字母,明明可以1個字節(jié)就能夠表示,非要用2個。

于是UTF-8編碼應(yīng)運而生,它規(guī)定英文字母系列用1個字節(jié)表示,漢字用3個字節(jié)表示等等。因此,它兼容ASCII,可以解碼早期的文檔。UTF-8很快就得到了廣泛的應(yīng)用。

在編碼的發(fā)展歷程中,我國還創(chuàng)造了自己的編碼方式,例如GBK,GB2312,BIG5。他們只局限于在國內(nèi)使用,不被國外認可。在GBK編碼中,中文漢字占2個字節(jié)。

2.2 bytes和str的異同

回到bytes和str的身上。bytes是一種比特流,它的存在形式是01010001110這種。我們無論是在寫代碼,還是閱讀文章的過程中,肯定不會有人直接閱讀這種比特流,它必須有一個編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。因為編碼方式的不同,對這個比特流的解讀也會不同,對實際使用造成了很大的困擾。下面讓我們看看Python是如何處理這一系列編碼問題的:

            >>> s = 
            
              "
            
            
              中文
            
            
              "
            
            
>>>
            
               s

            
            
              '
            
            
              中文
            
            
              '
            
            
>>>
            
               type(s)

            
            <
            
              class
            
            
              '
            
            
              str
            
            
              '
            
            >
>>> b = bytes(s, encoding=
            
              '
            
            
              utf-8
            
            
              '
            
            
              )

            
            >>>
            
               b
b
            
            
              '
            
            
              \xe4\xb8\xad\xe6\x96\x87
            
            
              '
            
            
>>>
            
               type(b)

            
            <
            
              class
            
            
              '
            
            
              bytes
            
            
              '
            
            >
          

從例子可以看出,s是個字符串類型。Python有個內(nèi)置函數(shù)bytes()可以將字符串str類型轉(zhuǎn)換成bytes類型,b實際上是一串01的組合,但為了在ide環(huán)境中讓我們相對直觀的觀察,它被表現(xiàn)成了b'\xe4\xb8\xad\xe6\x96\x87'這種形式,開頭的b表示這是一個bytes類型。\xe4是十六進制的表示方式,它占用1個字節(jié)的長度,因此”中文“被編碼成utf-8后,我們可以數(shù)得出一共用了6個字節(jié),每個漢字占用3個,這印證了上面的論述。在使用內(nèi)置函數(shù)bytes()的時候,必須明確encoding的參數(shù),不可省略。

我們都知道,字符串類str里有一個encode()方法,它是從字符串向比特流的編碼過程。而bytes類型恰好有個decode()方法,它是從比特流向字符串解碼的過程。除此之外,我們查看Python源碼會發(fā)現(xiàn)bytes和str擁有幾乎一模一樣的方法列表,最大的區(qū)別就是encode和decode。

從實質(zhì)上來說,字符串在磁盤上的保存形式也是01的組合,也需要編碼解碼。

如果,上面的闡述還不能讓你搞清楚兩者的區(qū)別,那么記住下面兩幾句話:

  1. 在將字符串存入磁盤和從磁盤讀取字符串的過程中,Python自動地幫你完成了編碼和解碼的工作,你不需要關(guān)心它的過程。
  2. 使用bytes類型,實質(zhì)上是告訴Python,不需要它幫你自動地完成編碼和解碼的工作,而是用戶自己手動進行,并指定編碼格式。
  3. Python已經(jīng)嚴格區(qū)分了bytes和str兩種數(shù)據(jù)類型,你不能在需要bytes類型參數(shù)的時候使用str參數(shù),反之亦然。這點在讀寫磁盤文件時容易碰到。

在bytes和str的互相轉(zhuǎn)換過程中,實際就是編碼解碼的過程,必須顯式地指定編碼格式。

            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
              #
            
            
               gbk編碼的bytes
            
            
               9
            
             b = bytes(
            
              '
            
            
              中國
            
            
              '
            
            , encoding=
            
              '
            
            
              gbk
            
            
              '
            
            
              )

            
            
              10
            
            
              print
            
            (b)        
            
              #
            
            
               b'\xd6\xd0\xb9\xfa'
            
            
              11
            
            
              print
            
            (type(b))  
            
              #
            
            
              
            
            
              12
            
            
              13
            
             str1 =
            
               str(b)

            
            
              14
            
            
              print
            
            (str1)     
            
              #
            
            
               b'\xd6\xd0\xb9\xfa'
            
            
              15
            
            
              print
            
            (type(str1))   
            
              #
            
            
              
            
            
              16
            
            
              17
            
            
              #
            
            
               指定編碼格式
            
            
              18
            
             str2 = str(b, encoding=
            
              '
            
            
              gbk
            
            
              '
            
            
              )

            
            
              19
            
            
              print
            
            (str2)     
            
              #
            
            
               中國
            
            
              20
            
            
              print
            
            (type(str2))   
            
              #
            
            
              
            
            
              21
            
            
              22
            
            
              #
            
            
               再把字符串str2轉(zhuǎn)換為utf8編碼格式的bytes類型:
            
            
              23
            
             b2 = bytes(str2, encoding=
            
              '
            
            
              utf8
            
            
              '
            
            
              )

            
            
              24
            
            
              print
            
            (b2)       
            
              #
            
            
               b'\xe4\xb8\xad\xe5\x9b\xbd'
            
            
              25
            
            
              print
            
            (type(b2))     
            
              #
            
            
              
            
          

2.3 encode和decode?

上面說過了,python3默認的編碼時Unicode,用字符串表示,二進制數(shù)據(jù)由bytes類型表示。

  • encode:將str轉(zhuǎn)換為bytes,是一個編碼的過程
  • decode:將bytes轉(zhuǎn)換為str,是一個解碼的過程
            
               1
            
            
              #
            
            
              !/usr/bin/env python3
            
            
               2
            
            
              #
            
            
               -*-coding:utf-8-*-
            
            
               3
            
            
               4
            
            
              """
            
            
               5
            
            
              @author:fyh

            
            
               6
            
            
              @time:2019/5/31

            
            
               7
            
            
              """
            
            
               8
            
            
               9
            
            
              """
            
            
              10
            
            
              其中decode()與encode()方法可以接受參數(shù), 其聲明分別為:

            
            
              11
            
            
                  bytes.decode(encoding="utf-8", errors="strict")

            
            
              12
            
            
                  str.encode(encoding="utf-8", errors="strict")

            
            
              13
            
            
              14
            
            
                      其中 encoding是指在解碼/編碼(動詞)過程中使用的字符編碼(名詞)

            
            
              15
            
            
              16
            
            
                      errors是指錯誤的處理方案,errrors參數(shù)默認值是strict(嚴格的)意味著如果編解碼出錯將會拋出UnicodeError

            
            
              17
            
            
              18
            
            
                      如果想忽略編解碼錯誤 可以將errors設(shè)置為ignore

            
            
              19
            
            
              """
            
            
              20
            
            
              21
            
            
              22
            
            
              #
            
            
               編碼 encode
            
            
              23
            
             str1 = 
            
              "
            
            
              中國
            
            
              "
            
            
              24
            
            
              25
            
             str1_utf8 = str1.encode(encoding=
            
              '
            
            
              utf8
            
            
              '
            
            
              )

            
            
              26
            
            
              print
            
            (str1_utf8)        
            
              #
            
            
               b'\xe4\xb8\xad\xe5\x9b\xbd'
            
            
              27
            
            
              print
            
            (type(str1_utf8))  
            
              #
            
            
              
            
            
              28
            
            
              29
            
             str1_gbk = str1.encode(encoding=
            
              "
            
            
              gbk
            
            
              "
            
            
              )

            
            
              30
            
            
              print
            
            (str1_gbk)         
            
              #
            
            
               b'\xd6\xd0\xb9\xfa'
            
            
              31
            
            
              print
            
            (type(str1_gbk))   
            
              #
            
            
              
            
            
              32
            
            
              33
            
            
              34
            
            
              #
            
            
               解碼 decode
            
            
              35
            
             str2 = str1_utf8.decode(encoding=
            
              "
            
            
              utf8
            
            
              "
            
            
              )

            
            
              36
            
            
              print
            
            (str2)     
            
              #
            
            
               中國
            
            
              37
            
            
              print
            
            (type(str2))   
            
              #
            
            
              
            
            
              38
            
            
              39
            
             str3 = str1_gbk.decode(encoding=
            
              "
            
            
              gbk
            
            
              "
            
            
              )

            
            
              40
            
            
              print
            
            (str3)         
            
              #
            
            
               中國
            
            
              41
            
            
              print
            
            (type(str3))   
            
              #
            
            
              
            
          

ps:編碼和解碼時,對應(yīng)的編碼方式要一致

ps:對數(shù)據(jù)的編碼解碼工作是通過返回值查看到最終結(jié)果的,前面的數(shù)據(jù)對象并不受影響


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲av毛片成人精品 | 97av在线| 欧美9999 | japanesemature乱子在线 | a级欧美片免费观看 | 综合欧美一区二区三区 | 久久亚洲日本不卡一区二区 | 99精品久久秒播无毒不卡 | 蜜桃网在线观看 | 国产三及片| 国产一极毛片 | 免费一级片观看 | 九九99热久久精品在线9 | 国产精品久久久久久久久久大牛 | 欧美午夜一区二区三区免费大片 | 91xxx在线观看 | 日韩免费视频 | 精品国产九九 | 国产福利在线观看永久免费 | 亚洲 精品 综合 精品 自拍 | 国产二区在线播放 | 91久久国产口精品久久久久 | 欧美在线国产 | 欧美日韩中文视频 | se就是色94欧美setu | 一区二区三区日韩在线观看 | 久久久免费视频观看 | 日本黄色不卡视频 | 欧美日韩精品一区二区三区视频 | 欧美欧美欧美 | av黄色在线 | 亚洲亚洲人成综合网络 | 波多野结衣在线网址 | 青草香蕉精品视频在线观看 | 欧美伦交| 国产成人网 | 99热久久66是国产免费 | 播播成人网 | 日韩中文字幕 | 天天操你| 亚洲电影一区二区 |