1. 程式人生 > >python之內建函式(一)

python之內建函式(一)

一、內建函式一
1、內建函式總覽

 

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()


bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()

 

 

2、作用域相關 ******
globals() :返回一個字典(包含全部的全域性變數)
locals() : 返回一個字典(包含的是當前作用域的所有變數)

 

複製程式碼
b = 2
a = 3
print(globals())
print(locals())
# 結果:這兩個結果一樣,因為都是在全域性執行的。


def fun():
    a = 3
    b = 2
    print(globals())
    print(locals())
fun()
# 結果:
globals():
{'__name__'
: '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000228CB787748>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/OldBoy/Knight/PythonProject/day13/t2.py', '__cached__': None, 'b': 2, 'a': 3, 'fun': <function fun at 0x00000228CB351E18>} locals():{'b': 2, 'a': 3}
複製程式碼

 

 


3、字串型別程式碼的執行:eval,exec,compile (不建議使用 ***)

複製程式碼
eval: 執行字串型別的程式碼,並返回最終結果
s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>


s2 = "{'name':'xiaoming'}"
print(eval(s2),type(eval(s2)))  #{'name': 'xiaoming'} <class 'dict'>


s3 = 'print(666)'
eval(s3)   # 666
print(eval(s3))  # 666 None(執行s3裡面的程式碼沒有返回值,就返回None)

exec:執行字串型別的程式碼,不返回結果(程式碼流)
s3 = 'print(666)'
exec(s3)  #666(沒有返回值的程式碼流可用exec())


s4 = '''for i in range(10):
    print(i)
'''
exec(s4) # 0 1 2 3 4 5 6 7 8 9
eval(s4) # 報錯

s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>
print(exec(s1))  #None(有返回值不能用exec)


compile(瞭解即可):將字串型別的程式碼編譯。程式碼物件能夠通過exec語句來執行或者eval()進行求值。
引數說明:   
1. 引數source:字串或者AST(Abstract Syntax Trees)物件。即需要動態執行的程式碼段。  
2. 引數 filename:程式碼檔名稱,如果不是從檔案讀取程式碼則傳遞一些可辨認的值。當傳入了source引數時,filename引數傳入空字元即可。  
3. 引數model:指定編譯程式碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;
當source中只包含一個簡單的求值表示式,model應指定為‘eval’;當source中包含了互動式命令語句,model應指定為'single'。 例子: #流程語句使用exec s5 = 'for i in range(5):print(i)' compile1 = compile(s5,'','exec') exec(compile1) 結果:0 1 2 3 4 #簡單求值表示式用eval s5 = '1*2*3*4' compile2 = compile(s5,'','eval') print(eval(compile2)) 結果:24 #互動語句用single s5 = 'name = input("please input your name:")' compile3 = compile(s5,'','single') exec(compile3) #執行後會讓使用者進行輸入,please input your name: print(name) #在exec(compile3)執行前沒有值,執行後,值為使用者輸入的值。
複製程式碼

注意:有返回值的字串形式的程式碼用eval,沒有返回值的字串形式的程式碼用exec,一般不用compile。
但是!一般不推薦使用這幾個方法,為什麼呢?
舉個栗子:
  在工作中,別人發給你一個文字檔案,你讀檔案的時候,讀出來的都是字串吧,那麼就可以使用這三個方法,
但是,一旦你使用了這幾個方法,它立馬就執行了,你想過沒有,如果別人在傳送檔案給你的時候,你的檔案被
黑客截取了,植入了病毒,再發回給你,那你使用eval,exec不就把病毒也讀取了嗎?

 


4、輸入輸出相關 input(),print() *****
input:函式接受一個標準輸入資料,返回為string型別。
print:列印輸出。

 

print的引數分析:print(self, *args, sep=' ', end='\n', file=None)
1,*args:可接收多個位置引數
2,sep:列印多個值之間的分隔符,預設為空格
3,end:每一次列印的結尾,預設為換行符
4,file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案

 

1,*args:可接收多個位置引數
print('666')         # 666
print(1,2,3,4)     # 1 2 3 4
print(*[1,2,3])    # 1 2 3
拓展:

 

def func1(*args,**kwargs):          #在函式的定義 *引數 代表聚合。
  print(*args)          #args=(1,2,3,4)這裡的*args不是在函式的定義中,
                 #所以代表的是(*(1,2,3,4)) 打散 結果輸出:1,2,3,4
  print(args)           #args是一個元組,輸出(1, 2, 3, 4)
  print(**kwargs)    #print(name='xiaoming',age=1000) print方法中沒有**kwargs
                #不能接收多個關鍵字引數,所以這裡會報錯。
  print(kwargs)        #這裡的kwargs是一個字典,print輸出一個字典:{'name': 'xiaoming', 'age': 1000}
func1(1,2,3,4,name='xiaoming',age=1000)

 

2,sep:列印多個值之間的分隔符,預設為空格
print(1,2,3,sep='|')   # 1|2|3|4

 

3,end:每一次列印的結尾,預設為換行符
print(11,end=' ')
print(22)
結果:11 22

 

4,file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案
f = open('t1',encoding='utf-8',mode='w')
print(666,'777','888',file=f)

 

 

5、記憶體相關 hash id ***
hash:獲取一個物件(可雜湊物件(不可變型別):int,str,Bool,tuple)的雜湊值。
id:獲取該物件的記憶體地址。

print(hash('name')) # -163295680327498572
print(hash('name1')) # 9065259785983334233
print(hash(123)) # 123
print(hash(100000)) # 100000
print(hash(True)) # 1
print(hash(False)) # 0
print(hash([1,2,3])) #報錯 列表是可變資料型別,是不可雜湊的
注意:數字的雜湊值就是數字本身!

小知識點:
  之前學字典的時候說過字典的優點之一是查詢速度快,
  字典的查詢甚至比二分查詢還要快,為什麼呢?
  字典的鍵是不可變的資料型別,所以是可雜湊的,
  字典在存入記憶體的時候會將你的所有的key先進行雜湊,再將雜湊值存入記憶體中,
  這樣在查詢的時候可以根據雜湊值直接就可以找到,所以查詢速度很快!

 

 

6、檔案操作相關 *****
open:函式用於開啟一個檔案,建立一個file物件,相關的方法才可以呼叫它進行讀寫。

 

7、模組相關 ***
__import__:函式用於動態載入類和函式 。

 

8、幫助 **
help:函式用於檢視函式或模組用途的詳細說明。
print(help(str))

 


9、呼叫相關
callable:函式用於檢查一個物件是否是可呼叫的。如果返回True,object仍然可能呼叫失敗;
但如果返回False,呼叫物件ojbect絕對不會成功。 ***
name = 'abc'

def fun():
  a = 2
  return a
print(callable(name))   #False 不可呼叫
print(callable(fun()))    #False 不可呼叫:fun()不是一個物件,它是函式的執行者
print(callable(fun))      #True 可呼叫:fun是一個物件

 


10、檢視內建屬性 ***
dir:函式不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;
帶引數時,返回引數的屬性、方法列表。
如果引數包含方法__dir__(),該方法將被呼叫。如果引數不包含__dir__(),該方法將最大限度地收集引數資訊。
s = 'a'
print(dir(s))

 

11、
range:函式可建立一個整數物件,一般用在 for 迴圈中。
python2x:   range(3) ---> [0,1,2] 列表
     xrange(3) ---> 迭代器
python3x:  range(3) ---> range(0,3) 可迭代物件

 

next:內部實際使用了__next__方法,返回迭代器的下一個專案
iter:函式用來生成迭代器(將一個可迭代物件,生成迭代器)

 

12、數字相關(14)
資料型別(4):
bool :用於將給定引數轉換為布林型別,如果沒有引數,返回False。 ***
print(bool(1 < 2 and 3 > 4 or 5 < 6 and 9 > 2 or 3 > 1)) # True
print(bool('fdsjkfl')) #True

 


int:函式用於將一個字串或數字轉換為整型。***
print(int('123')) # 123
print(int(3.74)) # 取整並不是四捨五入:3
print(int('0101',base=2)) # 將2進位制的0101轉化成十進位制,結果為5
  

 

float:函式用於將整數和字串轉換成浮點數。 ***
print(float(5))       # 5.0
print(float(3.16))  # 3.16
print(float('2'))     # 2.0
print(float('2.1'))  # 2.1
   
complex:函式用於建立一個值為real + imag * j的複數或者轉化一個字串或數為複數。
如果第一個引數為字串,則不需要指定第二個引數。。

 

13、進位制轉換(3):
bin:將十進位制轉換成二進位制並返回。
print(bin(100)) # 0b1100100

 


oct:將十進位制轉化成八進位制字串並返回。
print(oct(7)) # 0o7
print(oct(8)) # 0o10
print(oct(9)) # 0o11

 


hex:將十進位制轉化成十六進位制字串並返回。
print(hex(10)) # 0xa
print(hex(15)) # 0xf
print(hex(17)) # 0x11

 


14、數學運算(7):
abs:函式返回數字的絕對值。 ****
print(abs(-100))     # 100

 

divmod:計算除數與被除數的結果,返回一個包含商和餘數的元組(a // b, a % b)。 ****
print(divmod(12,7)) # (1, 5) (商,餘數)

 

divmod的應用:分頁。
假設有103條資料,你每頁顯示12條資料,你最終顯示多少頁。
print(divmod(103,12)) # (8,7) 即要9頁,前8頁,每頁12條資料,最後一頁,7條資料
    

 

round:保留浮點數的小數位數,預設保留整數,四捨五入。 ***
print(round(3.141592653))     #預設保留整數(會四捨五入):3
print(round(3.641592653))     #預設保留整數(會四捨五入):4
print(round(3.141592653,4))  #保留四位小數(會四捨五入):3.1416
print(round(3.141592653,2))  #保留兩位小數(會四捨五入):3.14

 

    

 

pow:求x**y次冪。(三個引數為x**y的結果對z取餘) **
print(pow(2,5))       # 2的5次冪:32
print(pow(2,5,12))  # 2的5次冪的結果對12取餘(32對12取餘):8
    

 

sum:對可迭代物件進行求和計算(可設定初始值)。 *****
sum(iterable,start_num)
print(sum([1,2,3,4,100,101]))          # 211
print(sum([1,2,3,4,100,101],100))   # 311(第二個引數為初始值)
print(sum([int(i) for i in [1,'2',3,'4','100',101]]))

 

    

 

min:返回可迭代物件的最小值(可加key,key為函式名,通過函式的規則,返回最小值)。 *****
print(min([1,-2,3,4,100,101]))                  # -2
print(min([1,-2,3,4,100,101],key=abs))   # 1

 

應用:
求出年齡最小的那個元組
ls = [('daming',1000),('xiaoming',18),('zhongming',500)]
這裡的資料還不算複雜,可用之前學過的知識求出

min_age = min([i[1] for i in ls])
for j in ls:
    if j[1] == min_age:
        print(j)

但是有時候資料複雜的情況下,用之前的知識寫,可能會很複雜。
這時可用min()方法,配合自定製的函式進行求值

def func(x):
    return x[1]  # 1000  18  500
print(min(ls,key=func))
# 結果:('xiaoming', 18)

min(可迭代物件,key=函式名):
1,它會將iterable的每一個元素當做函式的引數傳進去。
2,它會按照返回值去比較大小。
3,最後返回的是遍歷的元素 x

 

複製程式碼
dic = {'a':3,'b':2,'c':1}
def func1(x):
    return dic[x]
print(min(dic,key=func1))  
結果:c
# 這裡傳進去的元素是字典的鍵,比較的返回值是字典的值,最後返回的是遍歷的鍵


def func2(x):
    return x[1]
print(min(dic.items(),key=func2))
結果:('c', 1)
# 這裡傳進去的元素是字典的鍵和值組成的元組,比較的返回值是字典的值,最後返回的是遍歷的元組
複製程式碼

 

 

max:返回可迭代物件的最大值(可加key,key為函式名,通過函式的規則,返回最大值)。 *****
print(max([1,2,3,100]))    # 100

 

 

 

 

一、內建函式一
1、內建函式總覽

 

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()

 

 

2、作用域相關 ******
globals() :返回一個字典(包含全部的全域性變數)
locals() : 返回一個字典(包含的是當前作用域的所有變數)

 

複製程式碼
b = 2
a = 3
print(globals())
print(locals())
# 結果:這兩個結果一樣,因為都是在全域性執行的。


def fun():
    a = 3
    b = 2
    print(globals())
    print(locals())
fun()
# 結果:
globals():
{'__name__': '__main__', '__doc__': None, '__package__': None, 
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000228CB787748>, 
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 
'__file__': 'E:/OldBoy/Knight/PythonProject/day13/t2.py', '__cached__': None, 'b': 2, 'a': 3, 
'fun': <function fun at 0x00000228CB351E18>}

locals():{'b': 2, 'a': 3}
複製程式碼

 

 


3、字串型別程式碼的執行:eval,exec,compile (不建議使用 ***)

複製程式碼
eval: 執行字串型別的程式碼,並返回最終結果
s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>


s2 = "{'name':'xiaoming'}"
print(eval(s2),type(eval(s2)))  #{'name': 'xiaoming'} <class 'dict'>


s3 = 'print(666)'
eval(s3)   # 666
print(eval(s3))  # 666 None(執行s3裡面的程式碼沒有返回值,就返回None)

exec:執行字串型別的程式碼,不返回結果(程式碼流)
s3 = 'print(666)'
exec(s3)  #666(沒有返回值的程式碼流可用exec())


s4 = '''for i in range(10):
    print(i)
'''
exec(s4) # 0 1 2 3 4 5 6 7 8 9
eval(s4) # 報錯

s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>
print(exec(s1))  #None(有返回值不能用exec)


compile(瞭解即可):將字串型別的程式碼編譯。程式碼物件能夠通過exec語句來執行或者eval()進行求值。
引數說明:   
1. 引數source:字串或者AST(Abstract Syntax Trees)物件。即需要動態執行的程式碼段。  
2. 引數 filename:程式碼檔名稱,如果不是從檔案讀取程式碼則傳遞一些可辨認的值。當傳入了source引數時,filename引數傳入空字元即可。  
3. 引數model:指定編譯程式碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;
當source中只包含一個簡單的求值表示式,model應指定為‘eval’;當source中包含了互動式命令語句,model應指定為'single'。 例子: #流程語句使用exec s5 = 'for i in range(5):print(i)' compile1 = compile(s5,'','exec') exec(compile1) 結果:0 1 2 3 4 #簡單求值表示式用eval s5 = '1*2*3*4' compile2 = compile(s5,'','eval') print(eval(compile2)) 結果:24 #互動語句用single s5 = 'name = input("please input your name:")' compile3 = compile(s5,'','single') exec(compile3) #執行後會讓使用者進行輸入,please input your name: print(name) #在exec(compile3)執行前沒有值,執行後,值為使用者輸入的值。
複製程式碼

注意:有返回值的字串形式的程式碼用eval,沒有返回值的字串形式的程式碼用exec,一般不用compile。
但是!一般不推薦使用這幾個方法,為什麼呢?
舉個栗子:
  在工作中,別人發給你一個文字檔案,你讀檔案的時候,讀出來的都是字串吧,那麼就可以使用這三個方法,
但是,一旦你使用了這幾個方法,它立馬就執行了,你想過沒有,如果別人在傳送檔案給你的時候,你的檔案被
黑客截取了,植入了病毒,再發回給你,那你使用eval,exec不就把病毒也讀取了嗎?

 


4、輸入輸出相關 input(),print() *****
input:函式接受一個標準輸入資料,返回為string型別。
print:列印輸出。

 

print的引數分析:print(self, *args, sep=' ', end='\n', file=None)
1,*args:可接收多個位置引數
2,sep:列印多個值之間的分隔符,預設為空格
3,end:每一次列印的結尾,預設為換行符
4,file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案

 

1,*args:可接收多個位置引數
print('666')         # 666
print(1,2,3,4)     # 1 2 3 4
print(*[1,2,3])    # 1 2 3
拓展:

 

def func1(*args,**kwargs):          #在函式的定義 *引數 代表聚合。
  print(*args)          #args=(1,2,3,4)這裡的*args不是在函式的定義中,
                 #所以代表的是(*(1,2,3,4)) 打散 結果輸出:1,2,3,4
  print(args)           #args是一個元組,輸出(1, 2, 3, 4)
  print(**kwargs)    #print(name='xiaoming',age=1000) print方法中沒有**kwargs
                #不能接收多個關鍵字引數,所以這裡會報錯。
  print(kwargs)        #這裡的kwargs是一個字典,print輸出一個字典:{'name': 'xiaoming', 'age': 1000}
func1(1,2,3,4,name='xiaoming',age=1000)

 

2,sep:列印多個值之間的分隔符,預設為空格
print(1,2,3,sep='|')   # 1|2|3|4

 

3,end:每一次列印的結尾,預設為換行符
print(11,end=' ')
print(22)
結果:11 22

 

4,file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案
f = open('t1',encoding='utf-8',mode='w')
print(666,'777','888',file=f)

 

 

5、記憶體相關 hash id ***
hash:獲取一個物件(可雜湊物件(不可變型別):int,str,Bool,tuple)的雜湊值。
id:獲取該物件的記憶體地址。

print(hash('name')) # -163295680327498572
print(hash('name1')) # 9065259785983334233
print(hash(123)) # 123
print(hash(100000)) # 100000
print(hash(True)) # 1
print(hash(False)) # 0
print(hash([1,2,3])) #報錯 列表是可變資料型別,是不可雜湊的
注意:數字的雜湊值就是數字本身!

小知識點:
  之前學字典的時候說過字典的優點之一是查詢速度快,
  字典的查詢甚至比二分查詢還要快,為什麼呢?
  字典的鍵是不可變的資料型別,所以是可雜湊的,
  字典在存入記憶體的時候會將你的所有的key先進行雜湊,再將雜湊值存入記憶體中,
  這樣在查詢的時候可以根據雜湊值直接就可以找到,所以查詢速度很快!

 

 

6、檔案操作相關 *****
open:函式用於開啟一個檔案,建立一個file物件,相關的方法才可以呼叫它進行讀寫。

 

7、模組相關 ***
__import__:函式用於動態載入類和函式 。

 

8、幫助 **
help:函式用於檢視函式或模組用途的詳細說明。
print(help(str))

 


9、呼叫相關
callable:函式用於檢查一個物件是否是可呼叫的。如果返回True,object仍然可能呼叫失敗;
但如果返回False,呼叫物件ojbect絕對不會成功。 ***
name = 'abc'

def fun():
  a = 2
  return a
print(callable(name))   #False 不可呼叫
print(callable(fun()))    #False 不可呼叫:fun()不是一個物件,它是函式的執行者
print(callable(fun))      #True 可呼叫:fun是一個物件

 


10、檢視內建屬性 ***
dir:函式不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;
帶引數時,返回引數的屬性、方法列表。
如果引數包含方法__dir__(),該方法將被呼叫。如果引數不包含__dir__(),該方法將最大限度地收集引數資訊。
s = 'a'
print(dir(s))

 

11、
range:函式可建立一個整數物件,一般用在 for 迴圈中。
python2x:   range(3) ---> [0,1,2] 列表
     xrange(3) ---> 迭代器
python3x:  range(3) ---> range(0,3) 可迭代物件

 

next:內部實際使用了__next__方法,返回迭代器的下一個專案
iter:函式用來生成迭代器(將一個可迭代物件,生成迭代器)

 

12、數字相關(14)
資料型別(4):
bool :用於將給定引數轉換為布林型別,如果沒有引數,返回False。 ***
print(bool(1 < 2 and 3 > 4 or 5 < 6 and 9 > 2 or 3 > 1)) # True
print(bool('fdsjkfl')) #True

 


int:函式用於將一個字串或數字轉換為整型。***
print(int('123')) # 123
print(int(3.74)) # 取整並不是四捨五入:3
print(int('0101',base=2)) # 將2進位制的0101轉化成十進位制,結果為5
  

 

float:函式用於將整數和字串轉換成浮點數。 ***
print(float(5))       # 5.0
print(float(3.16))  # 3.16
print(float('2'))     # 2.0
print(float('2.1'))  # 2.1
   
complex:函式用於建立一個值為real + imag * j的複數或者轉化一個字串或數為複數。
如果第一個引數為字串,則不需要指定第二個引數。。

 

13、進位制轉換(3):
bin:將十進位制轉換成二進位制並返回。
print(bin(100)) # 0b1100100

 


oct:將十進位制轉化成八進位制字串並返回。
print(oct(7)) # 0o7
print(oct(8)) # 0o10
print(oct(9)) # 0o11

 


hex:將十進位制轉化成十六進位制字串並返回。
print(hex(10)) # 0xa
print(hex(15)) # 0xf
print(hex(17)) # 0x11

 


14、數學運算(7):
abs:函式返回數字的絕對值。 ****
print(abs(-100))     # 100

 

divmod:計算除數與被除數的結果,返回一個包含商和餘數的元組(a // b, a % b)。 ****
print(divmod(12,7)) # (1, 5) (商,餘數)

 

divmod的應用:分頁。
假設有103條資料,你每頁顯示12條資料,你最終顯示多少頁。
print(divmod(103,12)) # (8,7) 即要9頁,前8頁,每頁12條資料,最後一頁,7條資料
    

 

round:保留浮點數的小數位數,預設保留整數,四捨五入。 ***
print(round(3.141592653))     #預設保留整數(會四捨五入):3
print(round(3.641592653))     #預設保留整數(會四捨五入):4
print(round(3.141592653,4))  #保留四位小數(會四捨五入):3.1416
print(round(3.141592653,2))  #保留兩位小數(會四捨五入):3.14

 

    

 

pow:求x**y次冪。(三個引數為x**y的結果對z取餘) **
print(pow(2,5))       # 2的5次冪:32
print(pow(2,5,12))  # 2的5次冪的結果對12取餘(32對12取餘):8
    

 

sum:對可迭代物件進行求和計算(可設定初始值)。 *****
sum(iterable,start_num)
print(sum([1,2,3,4,100,101]))          # 211
print(sum([1,2,3,4,100,101],100))   # 311(第二個引數為初始值)
print(sum([int(i) for i in [1,'2',3,'4','100',101]]))

 

    

 

min:返回可迭代物件的最小值(可加key,key為函式名,通過函式的規則,返回最小值)。 *****
print(min([1,-2,3,4,100,101]))                  # -2
print(min([1,-2,3,4,100,101],key=abs))   # 1

 

應用:
求出年齡最小的那個元組
ls = [('daming',1000),('xiaoming',18),('zhongming',500)]
這裡的資料還不算複雜,可用之前學過的知識求出

min_age = min([i[1] for i in ls])
for j in ls:
    if j[1] == min_age:
        print(j)

但是有時候資料複雜的情況下,用之前的知識寫,可能會很複雜。
這時可用min()方法,配合自定製的函式進行求值

def func(x):
    return x[1]  # 1000  18  500
print(min(ls,key=func))
# 結果:('xiaoming', 18)

min(可迭代物件,key=函式名):
1,它會將iterable的每一個元素當做函式的引數傳進去。
2,它會按照返回值去比較大小。
3,最後返回的是遍歷的元素 x

 

複製程式碼
dic = {'a':3,'b':2,'c':1}
def func1(x):
    return dic[x]
print(min(dic,key=func1))  
結果:c
# 這裡傳進去的元素是字典的鍵,比較的返回值是字典的值,最後返回的是遍歷的鍵


def func2(x):
    return x[1]
print(min(dic.items(),key=func2))
結果:('c', 1)
# 這裡傳進去的元素是字典的鍵和值組成的元組,比較的返回值是字典的值,最後返回的是遍歷的元組
複製程式碼

 

 

max:返回可迭代物件的最大值(可加key,key為函式名,通過函式的規則,返回最大值)。 *****
print(max([1,2,3,100]))    # 100