內置函數-max、min、round、sorted、ord、chr、any、all、dir、eval、exec、map、filter、reduce

http://www.nnzhp.cn/archives/152

一、max,min,round

1 print(max([3,4.563,3,6,2.5])) #取最大值,可循環參數便可,int類型的,字符串類型不行
2 print(min(9,4,7,1,0)) #取最小值
3 print(round(3.43535345,2)) #取即爲小數,四捨五入
4 print(round(1.12345,2))

二、sorted

1 s = '235434125636234'
2 res = sorted(s) #對字符串排序,默認升序
3 print(list(res)) #須要轉換下類型,打印
4 res = reversed(sorted(s))#reversed反轉,降序排序
5 print(list(res))
6 print(sorted(s,reverse=True)) #降序也能夠這樣寫,與上面寫法效果同樣。
#列表有.sort方法

三、ord、chr

1 print(ord('a'))#將字母轉成ascii裏面的值
2 print(chr(97)) #把數字轉成ascii碼錶裏面的字母

四、any、all

1 res = any([1,2,3,4,0]) #若是這個循環迭代序列裏面有一個爲真的話,就返回true
2 print(res)
3 res = all([1,1,1,0,1])#若是這個循環迭代序列裏面,所有爲真,就返回true
4 print(res)
1 print(any((1,2,0))) #返回True
2 print(any((0,0,0))) #所有是0,返回False

五、dir獲取幫助信息

1 import hashlib
2 m = hashlib.md5('abc'.encode())
3 print(dir(m)) #查看變量m的全部方法

六、eval 執行python代碼,只能執行簡單的,定義數據類型和運算

實例1:php

1 # eval#執行python代碼,只能執行簡單的,定義數據類型和運算
2 print(eval('1+1'))
3 print(eval('{"a":"1"}'))

 

執行結果:python

1 2
2 {'a': '1'}

實例2:面試

1 f = open('a.txt').read() #文件裏面的內容是「{'username':'abc','password':'123456'}」,可是讀出來是字符串
2 print(type(f))
3 print(f)
4 res = eval(f) #轉數據類型
5 print(type(res))
6 print(res)

執行結果:安全

1 <class 'str'>
2 {'username':'abc','password':'123456'}
3 <class 'dict'>
4 {'username': 'abc', 'password': '123456'}

七、exec:執行python代碼的,只要語法對,都能執行,不太安全

1 # 在線寫代碼:http://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3。這種會對敏感代碼進行控制
2 my_code = '''  #前面寫個變量,三引號做用於變量
3 def my():
4     print('運行程序')
5 my()
6 '''
7 exec(my_code) #執行python代碼的,這種方式不安全
運行程序

 八、map 

map是循環幫你調用函數,而後保存函數的返回值,python3中,返回的值放到了一個生成器裏面。須要list強制類型轉換下(能轉成list或元組,集合等可變的類型)。
map後面傳的能夠循環就行(字符串、列表等)
實例:
寫一個調用函數:
1 l = [1, 3, 4, 6, 2, 4, 7]
2 l2 = [] #定義一個空list存放補0後的值
3 def bl(i):  # 定義一個補0的函數
4     return str(i).zfill(2)
5 for i in l:
6     l2.append(bl(i))
7 print(l2)
['01', '03', '04', '06', '02', '04', '07']

上面這個能夠用map寫:app

1 #另外用map寫,幫你循環調用函數
2 l = [1, 3, 4, 6, 2, 4, 7]
3 l2 = list(map(bl,l))
4 # l2 = tuple(map(bl,l))
5 # l2 = set(map(bl,l)) #集合會去重
6 print(l2)
['01', '03', '04', '06', '02', '04', '07']

九、filter()

也是循環調用函數的,若是函數返回的值是真,那麼就保存這個值.若是返回值假,則過濾掉(過濾你傳過來的值)

實例1:上面的例子用filter過濾:
1 def bl(i):  # 定義一個補0的函數
2     return str(i).zfill(2)
3 l = [1, 3, 4, 6, 2, 4, 7]
4 l3 = list(filter(bl,l))
5 print(l3)

結果:返回的都是真,則所有值保留,list強制類型轉換後,放在list中函數

[1, 3, 4, 6, 2, 4, 7]

實例2:spa

1 def bl(i):  # 定義一個補0的函數
2     if i >3:
3         return True
4 l = [1, 3, 4, 6, 2, 4, 7]
5 l3 = list(filter(bl,l)) #循環調用函數,過濾掉傳入的list中小於3的值
6 print(l3)

結果:.net

[4, 6, 4, 7]

 十、reduce()

一個月前,我同窗去面試python開發崗,面試官給他出了一道題,使用三種不一樣的方法實現1到100的求和,而且要求語法儘可能簡潔。同窗的代碼以下code

#第一種
sum1 = 0
for i in range(1,101):
sum1+=i
print(sum1)
#第二種
print(sum(range(1,101)))
#第三種
print(reduce(lambda x,y:x+y,range(1,101)))

這三種方法獲得的結果都爲5050
寫完這個代碼之後,我同窗下午就收到了offer(固然是由於他薪資要得比較低的緣由!!!)
聽了我同窗的傳奇經歷,我決定好好的學一學python的哪些內建函數。
在此以前,咱們須要瞭解一下lamba。對象

1:lambda

lambda做爲一個表達式,定義了一個匿名函數,使用lambda簡化了函數定義的書寫形式。使代碼更爲簡潔,使函數的定義方式更爲直觀,易理解。
舉個例子,平時咱們手寫一個函數實現兩個數的求和,一般這樣寫:

def f(x,y):
return x+y
print(1,2)

可是使用lambda能夠寫成這樣:

f = lambda x,y:x+y
print(f(1,2))

這裏lambda做爲一個表達式,定義了一個匿名函數,上例的代碼x,y爲入口參數,x+y爲函數體,其結果就是返回x+y的和。

上面兩個代碼返回的結果都同樣,可是使用lambada更爲簡潔。
lambda與map,reduce等python內建函數配合使用能發揮更強大的做用。

2:map

map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並經過把函數 f 依次做用在 list 的每一個元素上,獲得一個新的 list 並返回。(python3中返回的是迭代器)

f = lambda x,y,z:x+y+z
x = map(f,[1,2,3],[4,5,6],[7,8,9])
for i in x:
print(i)

這段代碼分別將三個列表進行求和,而後返回一個可迭代的對象。
(1+4+7)
(2+5+8)
(3+6+9)

運行結果


或者可使用list將迭代器轉換爲列表

print(list(x)
1
運行結果
[12, 15, 18]

3:reduce

reduce()函數接收的參數和 map()相似,一個函數 f,一個list,但行爲和 map()不一樣,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每一個元素反覆調用函數f,並返回最終結果值。
python3使用reduce須要引入

from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101)))
1
這裏以我同窗筆試的題目爲列子,他先定義了一個lambda表達式,目的是爲了求兩個數的和,使用range生成1-100的數,因爲reduce對list的每一個元素反覆調用函數f,並返回最終結果值。
所以,其過程爲:
(1,2,3,4,5,6,7,8,9……..100)
1+2=3
3+3=6
6+4=10
10+5=15
………..
這樣執行就至關因而執行了一次1+2+3+4+…….+100

reduce()還能夠接收第3個可選參數,做爲計算的初始值。若是把初始值設爲100,計算:

print(reduce(lambda x,y:x+y,range(1,101),100))計算結果爲5150

相關文章
相關標籤/搜索