重要函數總結

複製代碼
五星方法以下:
key : min max sorted 
function :filter map
normal: reversed zip zip_longest globals locals print sum repr  reduce

四星方法:
bytes abs divmod 




一、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



            
三、sorted:對全部可迭代的對象進行排序操做。 *****
與列表的sort區分:
列表的sort方法是對原列表進行排序修改,並無生成新的列表
內置函數sorted方法會造成一個新列表

l1 = [2,3,5,3,1,9,8,6]
l1.sort()
print(l1)   

print(sorted(l1)) # 造成了一個新列表
print(l1)         # 原列表不變

內置函數sorted還能夠與函數結合使用
l2 = [(1,1000),(2,18),(4,250),(3,500)]

def func1(x):
    return x[1]

print(sorted(l2,key=func1)) 
#按第二個元素升序排序 [(2, 18), (4, 250), (3, 500), (1, 1000)]

print(sorted(l2,key=func1,reverse=True)) 
#按第二個元素降序排序 [(1, 1000), (3, 500), (4, 250), (2, 18)]            
            
            
四、filter:過濾,經過你的函數,過濾一個可迭代對象(相似於生成器表達式的篩選模式) 生成一個迭代器。 *****
l1 = [1,2,3,4,5,6]
def fun(x):
    return x % 2 == 0 #篩選出偶數
g = filter(fun,l1)  # filter(fun,l1)生成的是一個迭代器
print(g)
for i in g:
    print(i)
結果:
2 4 6

l2 = [(2,1),(3,4),(4,5)]
def fun2(x):
    return x[1] % 2 == 1 #篩選出第二個元素爲奇數的元組
g = filter(fun2,l2)
for i in g:
    print(i)
結果:
(2, 1)
(4, 5)


五、map:會根據提供的函數對指定序列作映射。(循環修改並返回) 生成一個迭代器*****
l1 = [1,2,3,4,5,6]
def fun(x):
    return x**2 #返回每一個元素的平方
g = map(fun,l1)
for i in g:
    print(i)
結果:1 4 9 16 25 36 (min max sorted filter返回的都是遍歷的參數,map返回的是return的值) 六、reversed:將一個序列翻轉,並返回此翻轉序列的迭代器。 *****
6-1、reversed()與列表的reverse()區分:
列表的reverse()只能列表使用:列表.reverse(),對原列表進行翻轉,結果返回的仍是列表。
內置函數reversed(),將一個序列翻轉,結果是返回一個迭代器。

列表的reverse()
l1 = [1,3,4,2,6]
l1.reverse()  #將列表進行翻轉
print(l1)     #返回修改後的列表 [6, 2, 4, 3, 1]

內置函數reversed()
reversed(l1)             #生成一個迭代器
print(reversed(l1))   #一個地址
for i in reversed(l1):
  print(i)
結果:
用for循環輸出迭代器的值
6 2 4 3 1


字符串使用reversed()
s1 = 'abcdefg'
for i in reversed(s1):
  print(i)
結果:
g f e d c b a

字典使用reversed() 報錯
dic = {'name':'xiaoming','age':1000,'hobby':'oldwomen'} # 不行
        



七、拉鍊方法:zip() 將多個iter縱向組成元素爲元組的迭代器,默認以長度最小的iterable爲標準長度 *****
l1 = [1,2,3,4]
tu1 = ('a','b','c')
dic = {'name':'xiaoming','age':18,'hobby':'girl','hometown':'guangzhou'}

zip(l1,tu1,dic)  #迭代器(生成器對象)

print(zip(l1,tu1,dic)) #迭代器地址:<zip object at 0x000002C878E6A6C8>

for i in zip(l1,tu1,dic): 
    print(i)

#循環輸出迭代器的內容:
(1, 'a', 'name')
(2, 'b', 'age')
(3, 'c', 'hobby')


# 若想以最大的iterable爲標準長度,則能夠使用itertools.zip_longest()
from itertools import zip_longest
x = [1, 3, 5, 7, 9]
y = [2, 4, 6, 8]
for i in zip_longest(x, y):
    print(i)

(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, None)
        


8、
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}
            


九、print
print的參數分析:print(self, *args, sep=' ', end='\n', file=None)
1,*args:可接收多個位置參數
2,sep:打印多個值之間的分隔符,默認爲空格
3,end:每一次打印的結尾,默認爲換行符
4,file: 默認是輸出到屏幕,若是設置爲文件句柄,輸出到文件

print(1,2,3,sep='|')  # 1|2|3


print(1,2,end=' ')
print(3,4)  # 1 2 3 4

            

十、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]]))




十一、repr:返回一個對象的string形式(原形畢露)  *****
print(repr('{"name":"xiaoming"}'))  #'{"name":"xiaoming"}'
print('{"name":"xiaoming"}')        # {"name":"xiaoming"}


格式化輸出%r--->原封不動的寫出來(基礎數據類型均可接收)
字符串單雙引號都默認是單引號
msg = 'xiaoming是%r的人' % ('德高望重')
print(msg) # xiaoming是'德高望重'的人

msg = 'xiaoming是%r的人' % ("德高望重")
print(msg) # xiaoming是'德高望重'的人

msg = 'xiaoming是%r的人' %(18)
print(msg) # xiaoming是18的人

msg = 'xiaoming是%r的人' %(True)
print(msg) # xiaoming是True的人

msg = 'xiaoming是%r的人' %({'name':'xiaming','age':18})
print(msg)  # xiaoming是{'name': 'xiaming', 'age': 18}的人

repr():可用於判斷json pickle序列化模塊 特殊字符串,python字符串的區別



12、reduce
Python3中reduce移到了functools模塊中,你能夠用過from functools import reduce來使用它。
reduce一樣是接收兩個參數:func(函數)和seq(序列,如list)

原理:首先將序列中的前兩個元素,傳入func中,再將獲得的結果和第三個元素一塊兒傳入func,…,
這樣一直計算到最後,獲得一個值,把它做爲reduce的結果返回。
from functools import reduce
ret = reduce(lambda x,y:x+y, [1, 2, 3, 4])
print(ret)  # 10


l = [30, 11, 77, 8, 25, 65, 4]
ret = reduce(lambda x,y: x if x > y else y, l)
print(ret)  # 77

1三、bytes:unicode ---> bytes類型(單向的編碼) ****
編碼encode():
s1 = '小明'
b1 = s1.encode('utf-8')
print(b1)   # b'\xe5\xb0\x8f\xe6\x98\x8e'

解碼decode():
s2 = b1.decode('utf-8')
print(s2)   # 小明

用bytes()方法編碼(單向)
a1 = '小白'
b1 = bytes(a1,encoding='utf-8')
print(b1)    # b'\xe5\xb0\x8f\xe7\x99\xbd'

不能用bytes()方法解碼
a2 = bytes(b1,encoding='utf-8')
print(a2)   # 報錯

只能用decode()解碼
a2 = b1.decode('utf-8')
print(a2)   # 小白



1四、abs:函數返回數字的絕對值。 ****
print(abs(-100))     # 100


1五、divmod:計算除數與被除數的結果,返回一個包含商和餘數的元組(a // b, a % b)。 ****
print(divmod(12,7)) # (1, 5) (商,餘數)
複製代碼
相關文章
相關標籤/搜索