字符串格式化及函數

(1)字符串格式化

python的字符串格式化有兩種方式: 百分號方式, format方式python

1.百分號格式

%[(name)][flags][width].[precision]typecode

(name)     可選,用於選擇指定的key編程

flags         可選,可供選擇的值有:數組

  +        右對齊;正數前加正號,負數前加負號;數據結構

  -         左對齊;正數前無符號,負數前加負號;函數式編程

  空格   右對齊; 正數前加空格,負數前加負號;函數

  0         右對齊;正數前無符號,負數前加負號;用0填充空白處spa

width      可選,佔有寬度code

precision    可選,小數點後保留的位數orm

typecode    必選對象

  s, 獲取傳入對象的__str__方式的返回值,並將其格式化到指定位置

  r,獲取傳入對象的__repr__方法的返回值,並將其格式化到指定位置

  c,整數:將數字轉換成其unicode對應的值,10進制範圍爲 0 <= i <= 1114111(py27則支持                0-255);字符:將字符添加到指定位置

  o,將整數轉換成八進制表示,並將其格式化到指定位置

  x,將整數轉換成十六進制表示,並將其格式化到指定位置

  d,將整數,浮點數轉換成十進制表示,並將其格式化到指定位置

  e,將整數,浮點數轉換成科學計數法,並將其格式到指定位置(小寫e)

  • E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E)
  • f, 將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點後6位)
  • F,同上
  • g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(若是是科學計數則是e;)
  • G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(若是是科學計數則是E;)
  • %,當字符串中存在格式化標誌時,須要用 %%表示一個百分號
注:python中百分號格式化是不存在自動將整數轉換成二進制表示的方式
經常使用: %s>>>>>>>>輸入爲字符串
        %d>>>>>>>>輸入格式爲數字
        %f>>>>>>>>輸入格式爲浮點型,即小數,在%後加.數字表示保留小數點後幾位,在f後加%%輸入百分數

2.Format方式

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

注意,在字符串中引用format,默認替換變量下標由0開始

(2)函數>>>>>def

特色:一次建立可屢次調用,加強代碼的重用性和可讀性,  調用函數過程當中,  函數的代碼塊中變量會被賦值,但在調用結束後,  變量對應的值會被清空,  不會佔用內存空間

1 def   函數名(參數):
2 
3 
4         ' ' '
5         函數體
6         ' ' ' 
7         返回值

函數的定義主要有以下要點:

  def : 標識符,  表示函數的關鍵字

  函數名 : 函數的名稱,  往後根據函數名調用函數,  函數名實質也是一個變量

  函數體 : 函數中進行一系列的邏輯計算, 如: 發送郵件,  計算出 [11,22,38,888,2]中的最大數等

  參數:   爲函數體提供數據

  返回值 : 當函數執行完畢後,  能夠給調用者返回數據.結束函數,  能夠一個return返回多個值以                元組形式呈現,  若沒設置返回值,  則會隱式返回一個none.

1.參數

函數參數分爲形式參數跟實際參數

形式參數 : 在函數名後面括號裏做爲函數體邏輯判斷的變量名

實際參數 : 在調用函數時,賦值給函數變量的值

位置參數和關鍵字(標準調用: 實參與形參位置-------對應; 關鍵字調用: 位置無需固定)

默認參數, 在定義形式參數的時候給參數賦值

參數組  (*args >>> 傳列表元素,**kwargs傳字典元素)

  *arg若不傳參數不會報錯,  會輸出一個空元組,  列表前不加*號默認將整個列表做爲一個元素            傳 給*arg

  **kwargs若不傳參不會報錯,會輸出一個空字典,傳值方式有鍵值對(相似於關鍵字傳值) 傳值跟          *+字典傳值

2.局部變量與全局變量

全局變量: 頂頭無縮進定義的變量, 對全局有效的變量

局部變量: 在函數中定義的變量, 只有在調用該函數的時候對函數體起做用

global:聲明修改全局變量

nonlocal:在函數內聲明修改上一層變量, 只能修改函數內變量, 能夠隔層往上尋找該變量,若最外層函數不存在該變量, 會報錯

name = "tom"#定義全局變量無縮進
def con():
    name1 = "aric"#在函數中定義的變量爲局部變量
    print(name1)
name = "tom"#定義全局變量無縮進
def con():
    name1 = "aric"#在函數中定義的變量爲局部變量
    print(name1)#》》》》aric
con()#調用函數時候,局部變量只在函數內有效
print(name)#》》》》tom
n1 = "tom"
def n2():
    n1 = 123
    print(n1)#》》》》123
    def n3():
        nonlocal n1#》》》》聲明修改上一層變量
        n1 = "aric"
    n3()
    print(n1)#》》》》aric
print(n1)#》》》》tom
n2()
print(n1)#》》》》》tom
n1 = "aric"

def  coin():

       global  n1#global聲明修改全局變量

       n1 = "aric"

       print(n1)#>>>aric

coin()

print(n1)#>>>aric

(3)函數的引用

因爲python執行代碼的順序是由前到後, 因此若要引用某函數, 需先在引用以前定義好該函數, 若在定義以前引用函數則會報錯

def u():
    
    pass
    
    q()

u()#報錯,q() 未定義
def u():

    pass
    
    q()

def q():

    pass
u()
q()#能夠執行

(4)嵌套函數

在函數內層繼續定義函數,調用函數的時候只能調用最外層函數,不能直接調用內層函數

做用域在定義函數時就已經固定住了,不會隨着調用位置的改變而改變

n1 = "tom"
def n2():
    n1 = 123
    print(n1)#》》》》123
    def n3():#嵌套函數
        nonlocal n1
        n1 = "aric"
    n3()
    print(n1)#》》》》aric
print(n1)#》》》》tom
n2()
print(n1)#》》》》》tom

(5)遞歸函數

在函數內部, 能夠調用其餘函數. 若是一個函數在內部調用自身自己, 這個函數就是遞歸函數

遞歸特性:

1. 必須有一個明確的結束條件

2. 每次進入更深一層遞歸時, 問題規模相比上次遞歸都應有所減小

3. 遞歸效率不高,遞歸層次過多會致使棧溢出(在計算機中,函數調用是經過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返     回,棧就會減一層棧幀。因爲棧的大小不是無限的,因此,遞歸調用的次數過多,會致使棧溢出。)

def cl(n):
    print(n)
    if (int(n/2)) == 0:
        return n
    return cl(int(n/2))#調用函數自己
cl(10)

(6)匿名函數>>>>lambda

  匿名函數就是不須要顯示的指定函數,直接能夠調用,不須要先定義,形式爲lambda  x:x的邏輯體,其中x爲變量,處理結果爲輸出通過x的邏輯體處理過的x的值,即函數中的return,使用匿名函數能夠簡化不少簡單函數

v = lambda  x,y,z:(x+1,y+1,z+1)#表示x,y,z分別+1並以列表輸出
print(v(1,2,3))#>>>>(2,3,4)

(7)函數式編程

當下主流的編程方法有三種:函數式,面向過程,面向對象

高階函數

1.map函數用法:

map(a,b),a爲處理邏輯, b爲要處理的可迭代對象, 處理過程(處理邏輯依次處理b中的元素),在Python2中直接生成列表,在python3中須要list轉換

1 l1 = [1,2,3,4,5,6,7]
2 def redu(x):
3     return x-1
4 print(list(map(redu,l1)))#map(a,b),a爲處理邏輯,b爲要處理的可迭代對象,處理過程(處理邏輯依次處理b中的元素),在python2中直接生成列表,在python3中需用list轉換
5 print(list(map(lambda x:x-1,l1)))#運用匿名函數能夠簡化不少過程
a = "tomp"
print(list(map(lambda x:x.upper(),a)))#>>>>>>['T', 'O', 'M', 'P']map能夠處理不少可迭代對象

2.reduce函數用法:遍歷對象,運用邏輯將可迭代對象合併

1 s = [1,2,3,4,5]
 2 def reduce_test(func,array,init=None):
 3     l=list(array)
 4     if init is None:
 5         res=l.pop(0)
 6     else:
 7         res=init
 8     for i in l:
 9         res=func(res,i)
10     return res
11 print(reduce_test(lambda x,y:x+y,s,50))#>>>>65

3.filter函數用法:至關於一個過濾器,filter(a,b)a至關於處理邏輯以布爾值方式做判斷處理可迭代對象b,符合邏輯的保留,不符合的刪除,生成迭代器,用list轉換爲列表

li = [11,222,333,44,55,66]
print(list(filter(lambda x:x>22,li)))#[33, 44, 55, 66, 77, 88, 99, 200]
相關文章
相關標籤/搜索