天天看點

python - 字元串總結–實數–

Python 3.8.4rc1 中,unicode的範圍是0~10FFFF,USC-4标準

轉義字元

行尾 “” 回車 換行操作,再python和print中均有效,但是當print使用r"“時,會沖突,是以建議r搭配”"" “”“使用

\

’ ’

" "

\a 響鈴

\b 倒退:該功能再各個運作環境下現實的效果可能不一樣,例如在cmd下,倒退是方向鍵左;在jupyter下,倒退是删除最後一個字元,無論有多少個\b隻有一個\b的效果。

\n 換行

\v 縱向制表符

\t 橫向制表符

\r 回車

\f 換頁

\000 ~ \777 八進制,對應相應的unicode字元

\x00 ~ \xFF 十六進制,對應相應的unicode字元

\other print(”\other"):\other

字元串運算符

"abc"+"123" # "abc123" +的兩個元素必須是相同類型
"abc"*2 # "abcabc" 重複
"abc"[1] # "b" 索引
"abc"[:] # 切片 左閉右開 [:1][1:] [-3:-1:2] "abc"[2:0:-1]:'cb' !!!
in 成員運算符 包含
not in 不包含
r"" R"" 原始字元串
% 格式字元串
           

格式化字元串

–字元串–

#"%s"%萬物
#對應輸出,可能有變化

In [153]: "%s"%1
Out[153]:'1'

In [161]: "%s"%1.
Out[161]:'1.0' #如果小數點後都是0,隻顯示1個0,f預設顯示6位

In [162]: "%s"%1e+1
Out[162]:'10.0'

In [177]: "%s"%1e+100000
Out[177]:'inf'

"%s"%1.7976931348623158e+308
'1.7976931348623157e+308'

"%s"%1.7976931348623158e+15
'1797693134862315.8'

"%s"%1e+15
'1000000000000000.0'

"%s"%1e+16
'1000000000000000.0'

"%s"%1e-4
'0.0001'

"%s"%1e-5
'1e-5'

# %s e浮點的範圍中 e-4 ~ e+15 是使用小數點

"%s"%1.7976931348623157
'1.7976931348623157'

"%s"%1.111111111111111111111111
'1.1111111111111112'
# 小數點浮點數小數點後16位

In [168]: "%s"%(1+1j)
Out[168]:'(1+1j)'

In [169]: "%s"%True
Out[169]:'True'

In [170]: "%s"%"abc%s"%"123"
Out[170]:'abc123'

n [179]: "%s"%[1,2,3,"a","b","c"]
Out[179]:"[1, 2, 3, 'a', 'b', 'c']"
           

–整數–

在這裡插入代碼片
           
#"%c"%unicode數字序号、單個字元 或之其變量
#字元

In [123]:"%c"%9999
Out[123]:'✏'

In [127]:"%c"%0x9999
Out[127]:'香'

In [128]:"%c"%"\u9999"
Out[128]:'香'

In [129]:"%c"%"\n"
Out[129]:'\n'
           
# "%o"%整數,bool
# 八進制數

"%o"%8
'10'

"%#o"%-8
'-0o10'
           

!!!%u該功能已失效,自動調用%d的格式

‘u’ Obsolete type – it is identical to ‘d’. (6)

因為python中不存在無符号整數了,python的整數是無限制的

#"%x"%整數(二進制、八進制、十進制、十六進制)
#對應數字的十六進制
#"%#x"%整數
#0x十六進制
#"%#X"%整數
#0X十六進制

In [227]: "%x"%15
Out[227]:'f'

In [229]: "%#x"%0o17
Out[229]:'0xf'

In [231]: "%#06X"%0b1111
Out[231]:'0X000F'

In [234]: "%x"%0x1234
Out[234]:'1234'
           

–實數–

如果指派的數是小數點浮點數,當數值範圍超過浮點數類型範圍的時候,去掉正負号的數值部分超過了浮點數的表示範圍,就會報錯。

OverflowError: int too large to convert to float

反之,如果數值過小,則指派為0

但如果數值是e格式的,過大的正數會指派為inf,對應的負數會指派為-inf

而浮點數中的nan,目前隻知道隻有直接指派的方法。

可以當做清單、字元串等的空。

但是nan == nan是False的,因為nan的意思就是Not a Number,是一個沒有意思,就如宇宙中,不存在的一個東西,是以既然不存在,又何來比較。隻能用isnan做判斷!

python的nan,NaN,NAN

na=float("nan")
nb=float("nan")
na==nb

False
           
#"%e"%實數
#對應e格式的浮點數,預設小數點後6位

In [238]: "%e"%float("inf")
Out[238]:'inf'

In [239]: "%e"%1
Out[239]:'1.000000e+00'

In [240]: "%e"%0
Out[240]:'0.000000e+00'

"%e"%True
'1.000000e+00'

In [256]: "%e"%100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Out[256]:'1.000000e+308' 最大值,多一個數就超過浮點數的極限了

OverflowError: int too large to convert to float

"%.20e"%179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
'1.79769313486231570815e+308'
# 17976931348623157.... 這個7隻要變成8,超限報錯,但是7後面的數怎麼變,結果都不會變

"%.20e"%179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
'1.79769313486231570815e+308'

"%e"%1.7976931348623157e+308
'1.797693e+308'
#最大正數,稍微再大,四舍五入到這個數,再再大,inf,無限大,無限小是-号的inf

"%e"%4.94065645841246544177e-324
'4.940656e-324'
#最小正數,再再小,直接是0;struct.unpack("!d",b'\x00\x00\x00\x00\x00\x00\x00\x01')
"%.20e"%2e+308
'inf'
#但如果數值本身就是個e,隻要超出範圍,他就會指派為inf,無限大

"%.320E"%1.7976931348623157e+308

'1.79769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368000000000000E+308'
# 理論上,它可以達到小數點後無限位,但是精度早早的就變了
           
#"%f"%實數(整數、浮點數、布爾值)
#小數點浮點數,預設小數點後6位

"%f"%True
'1.000000'

"%f"%1.7976931348623157e+308
'179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000'

"%f"%1.7976931348623155e-308
'0.000000'

"%e"%4.94065645841246544177e-324
'4.940656e-324'
           
#"%d"%整數、浮點數(不包括inf\-inf\nan等;結果取整數部分)、布爾值
# 整數
In [210]: "%d"%21
Out[210]:'21'

In [211]: "%d"%20.9
Out[211]:'20'

In [212]: "%d"%True
Out[212]:'1'

In [213]: "%d"%-1
Out[213]:'-1'
           
#"%g"%實數
# 對應的數,預設6位有效數字,超過的使用e寫
15]: "%g"%0.111111111111Out[15]:'0.111111'
"%g"%1.00001
'1.00001'

"%g"%1.000001 #小數點後5位都是0
'1'

"%.7g"%1.000001 #顯示小數點後的位數比flag的數小1
'1.000001'

"%g"%1.000001e+10
'1e+10'

"%g"%0x10
'16'

"%g"%float("inf")
'inf'

"%G"%-1e+1000
'-INF'
           

str方法

!!“1\ra”,列印效果是"a",但"1\ra".isalpha() False

import sys
import os
def clear_output():
    """
    clear output for both jupyter notebook and the console
    """
    os.system('cls' if os.name == 'nt' else 'clear')
    if 'ipykernel' in sys.modules:
        from IPython.display import clear_output as clear
        clear()

list_return_str=[]
list_return_bool=[]
list_other=[]
for methods in dir(str):
    exec("help(str.%s)"%methods)
    print("help(str.%s)"%methods)
    c=input()
    if c=="'": list_return_str.append("str.%s"%methods)
    elif c=="\\":list_return_bool.append("str.%s"%methods)
    else:list_other.append("str.%s"%methods)
    clear_output()
list_return_bool #确定傳回類型是bool值
#兩個字元串的比較
['str.__contains__',  # "abc".__contains__("ab") # True 包含
 'str.__eq__',  # "abc".__eq__("abc") 等于 == 對比字元再unicode中的次序大小
 'str.__ge__',  # "bc".__ge__("ab") 大于等于 >=
 'str.__gt__',  # "bc".__gt__("ab") 大于 >
 'str.__le__',  # "ab".__lt__("bc") 小于等于 <=
 'str.__lt__',  # "ab".__le__("bc") 小于<
 'str.__ne__',  # "ab".__ne__("bc") 不等于 !=
 
 #判斷
 'str.endswith', # "abc".endswith("bc") 判斷字元串1是否以字元串2為結尾
 'str.startswith' # "abc".startswith("ab") abc以ab開頭

   
 #歸類
 'str.isalnum', # "123Ⅱabc啊".isalnum() 判斷字元串字元串是否都是字元和數字
 'str.isalpha', # "abc啊" 是否是都是字元
 'str.isascii', # "123 abc" ascii字元,包括""和" "
 'str.isdecimal', # "123123" 數字(各文化編碼中的123)
 'str.isdigit', # "123①②③" 數字和序号(0~9)
 'str.isidentifier', # "_a1" 合法的辨別符
 'str.islower', # "0a" 字母都是小寫,至少有一個字母
 'str.isnumeric', # "123①②③⑩⑪⑫⅙ⅠⅡⅢ一二三𒐀𒐁𒐂".isnumeric() 具有數字意義的字元,數字、序号、分數符号、羅馬數字、中國數字、楔型數字等
 'str.isprintable', # "123abc".isprintable() # True 判斷字元是否都是可以列印出的字元,包括""和" ",不包括"\t""\n"
 'str.isspace', # " \n\r\t".isspace 更多内容見下面代碼
 'str.istitle', # 是标題,詞組首字母大寫
 'str.isupper', # 字母都是大寫,至少有一個字母
]
list_return_str #确定傳回類型是與之相關的字元串
#運算
['str.__add__',  # "abc".__add__("123") # 'abc123'
 #提煉
 'str.__getitem__', # "abc".__getitem__(1) # 'b' 傳回索引位置的字元
 #标示
 'str.__repr__',  # "abc".__repr__() # "'abc'" 傳回一個系統存儲用的狀态,雙引号内部分 representation:表述
 'str.__str__', # "香".__str__() # '香' 傳回一個print識别用的狀态
 #轉換
 'str.capitalize', # 字元串首字元大寫 " a":" a" "a":"A"
 'str.casefold', # 所有字母小寫(unicode),狀态折疊 'ß'.casefold() # 'ss'
 'str.center', # 字元串居中,預設空格填充兩邊,左側>=右側
 'str.expandtabs', # 擴充"\t",預設8個空格
 'str.join', # 将iterable用str做分隔符連接配接成字元串
 'str.ljust', # 左對齊一個整數,預設用空格填充
 'str.lower', # 所有字母小寫(ascii)
 'str.lstrip', # 預設空格,左邊砍掉空格,可設定字元集
 'str.replace', # "sagfvdjkslgfs".replace("sa","as") # 'asgfvdjkslgfs'
 'str.rjust', # 右對齊,預設空格填充
 'str.rstrip', # 右砍空格,可設定字元集
 'str.strip', # 左右砍空格,可設定字元集
 'str.swapcase', # 字元大小寫狀态互相切換,一些特殊字元,例如拉丁文,小寫後會轉換成ascii字元
 'str.title', # 詞組首字元大寫
 'str.translate', # 使用字典對字元串中的字元進行轉換{97:115,107:None},這個字典可以用str.maketrans("abc","ABC","123")生成,字元串1裡面的字元轉換成字元串2裡面一一對應的字元,字元串三裡面是要删除的字元
 'str.upper', # 所有字母大寫
 'str.zfill'] # 右對齊,左邊用"0"填充

#格式
 'str.format', # 使用format對元組進行格式化
 'str.format_map', # 使用format_map對字典進行格式化

list_other #傳回是清單、元組,以及我還尚未了解的東西
#自定義
['str.__class__',
 'str.__delattr__', 
 'str.__format__',
 'str.__getattribute__',
 'str.__mod__', 
 'str.__new__',
 'str.__reduce__',
 'str.__reduce_ex__',
 'str.__rmod__',
 'str.__setattr__',
 'str.__subclasshook__',
  'str.__init__', #??? 格式化/初始化
 'str.__init_subclass__', #??? 格式化/初始化子集

#相關資訊
 'str.__dir__', # 傳回方法清單
 'str.__doc__', # 傳回文檔
 'str.__hash__', # 傳回hash值
 'str.__len__', # 傳回字元串長度
 'str.__sizeof__', # 傳回字元串再記憶體中占用存儲空間的大小
  'str.encode', # 傳回字元串對應的編碼内容
 'str.maketrans', # 生成一個可供str.translate調用的字典

#處理
#元組
 'str.__getnewargs__', # 傳回一個隻包含新的字元串的元組("abc",)
 'str.partition', # "abcs".partition("abc") # ('', 'abc', 's') 若沒有包含 ('abcs', '', '')
 'str.rpartition', # 同上
#清單
 'str.rsplit', # 從右邊開始用字元串分割
 'str.split', # "1 2 3 4".split() # ['1', '2', '3', '4']  "1、2、3、4".split("、")
 'str.splitlines' # 将字元串逐行分割"\n\n1\r2\n\n".splitlines() # ['', '', '1', '2', ''] # "\n\n1\r2\n\n".splitlines(keepends=True) # ['\n', '\n', '1\r', '2\n', '\n'] 見下面
#字元串
 'str.__iter__', # 标示生成一個可疊代内容,這裡隻标示作用,并沒有真的生成一個可疊代的副本,但一旦這個标示被調用指派給一個可疊代對象,就真的開始處理了
 'str.__mul__', # 乘法 重複字元串整數次,當整數<=0,傳回""
 'str.__rmul__', # 右邊參數*左邊參數 但是在str中,貌似無效,等同于str.__mul__

#查找
 'str.count', # 字元串中出現某字元串的次數
 'str.find', # 查找字元串中,字元串的位置,可設定片段内查找,若沒有,傳回-1
 'str.index', # 同上,若沒有,報錯
 'str.rfind', # 從右邊開始尋找字元串
 'str.rindex', # 同上
]
           

行界符 splitlines

行界符 描述

\n Line Feed 換行

\r Carriage Return 回車

\r\n Carriage Return + Line Feed 回車+換行

\v or \x0b Line Tabulation

\f or \x0c Form Feed 換頁

\x1c File Separator 檔案分隔符

\x1d Group Separator 組分隔符

\x1e Record Separator 記錄分隔符号

\x85 Next Line (C1 Control Code)

\u2028 Line Separator 行分隔符

\u2029 Paragraph Separator 段落分隔符号

————————————————

版權聲明:本文為CSDN部落客「一個小白的自述」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/selfimpro_001/article/details/89743558

空白符 isspace

[print(hex(list1[i][0]),list1[i][1].__repr__(),"\""+list1[i][1]+"\"") for i in range(len(list1))]

0x9 '\t' "	"
0xa '\n' "
"
0xb '\x0b' ""
0xc '\x0c' ""
"xd '\r' "
0x1c '\x1c' ""
0x1d '\x1d' ""
0x1e '\x1e' ""
0x1f '\x1f' ""
0x20 ' ' " "
0x85 '\x85' "
"
0xa0 '\xa0' " "
0x1680 '\u1680' " "
0x2000 '\u2000' " "
0x2001 '\u2001' " "
0x2002 '\u2002' " "
0x2003 '\u2003' " "
0x2004 '\u2004' " "
0x2005 '\u2005' " "
0x2006 '\u2006' " "
0x2007 '\u2007' " "
0x2008 '\u2008' " "
0x2009 '\u2009' " "
0x200a '\u200a' " "
0x2028 '\u2028' "
"
0x2029 '\u2029' "
"
0x202f '\u202f' " "
0x205f '\u205f' " "
0x3000 '\u3000' " "
           

__repr__與__str__

a="""a
b"""
a.__repr__() # "'a\\nb'"
a.__str__() # 'a\nb'
           

b=""“你是最棒的

哈哈哈”""

hex(id(b))

hex(b.sizeof())

01 00 00 00 00 00 00 00 90 BE 46 C7 FC 7F 00 00

09 00 00 00 00 00 00 00 05 3E E9 5A 47 55 66 31

A8 00 00 00 00 00 00 00 78 3C 89 75 0B 02 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

09 00 00 00 00 00 00 00 60 4F 2F 66 00 67 D2 68 # 你是最棒

84 76 0A 00 C8 54 C8 54 C8 54 00 00 #的 0A00 哈哈哈 0000

實際的記憶體存儲,\n就是一個符号

https://unicode-table.com/cn

python - 字元串總結–實數–