1. 程式人生 > >python——內置函數和匿名函數

python——內置函數和匿名函數

數字 typeerror super nco 操作 小結 輸入輸出 做到 itl

內置函數

接下來,我們就一起來看看python裏的內置函數。截止到python版本3.6.2,現在python一共為我們提供了68個內置函數。它們就是python提供給你直接可以拿來使用的所有函數。這些函數有些我們已經用過了,有些我們還沒用到過,還有一些是被封印了,必須等我們學了新知識才能解開封印的。那今天我們就一起來認識一下python的內置函數。這麽多函數,我們該從何學起呢?

Built-in Functions
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()

技術分享

作用域相關

技術分享

基於字典的形式獲取局部變量和全局變量

globals()——獲取全局變量的字典

locals()——獲取執行本方法所在命名空間內的局部變量的字典

其他

技術分享

輸入輸出相關:

input() 輸入

技術分享
s = input("請輸入內容 : ")  #輸入的內容賦值給s變量
print(s)  #輸入什麽打印什麽。數據類型是str
s = input("請輸入內容 : ")  #輸入的內容賦值給s變量
print(s)  #輸入什麽打印什麽。數據類型是str

print() 輸出

技術分享
def print(self, *args, sep=‘ ‘, end=‘\n‘, file=None): # known special case of print
    """
    print(value, ..., sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False)
    file:  默認是輸出到屏幕,如果設置為文件句柄,輸出到文件
    sep:   打印多個值之間的分隔符,默認為空格
    end:   每一次打印的結尾,默認為換行符
    flush: 立即把內容輸出到流文件,不作緩存
    """
技術分享
def print(self, *args, sep=‘ ‘, end=‘\n‘, file=None): # known special case of print
    """
    print(value, ..., sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False)
    file:  默認是輸出到屏幕,如果設置為文件句柄,輸出到文件
    sep:   打印多個值之間的分隔符,默認為空格
    end:   每一次打印的結尾,默認為換行符
    flush: 立即把內容輸出到流文件,不作緩存
    """
技術分享 技術分享
f = open(‘tmp_file‘,‘w‘)
print(123,456,sep=‘,‘,file = f,flush=True)
f = open(‘tmp_file‘,‘w‘)
print(123,456,sep=‘,‘,file = f,flush=True)
技術分享
import time
import sys
for i in range(0,101,2):
     time.sleep(0.1)
     char_num = i//2      #打印多少個#
     per_str = ‘%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num)
     print(per_str,end=‘‘, file=sys.stdout, flush=True)
技術分享
import time
import sys
for i in range(0,101,2):
     time.sleep(0.1)
     char_num = i//2      #打印多少個#
     per_str = ‘%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num)
     print(per_str,end=‘‘, file=sys.stdout, flush=True)
技術分享

數據類型相關:

type(o) 返回變量o的數據類型

內存相關:

id(o) o是參數,返回一個變量的內存地址

hash(o) o是參數,返回一個可hash變量的哈希值,不可hash的變量被hash之後會報錯。

技術分享
t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #會報錯

‘‘‘
結果:
TypeError: unhashable type: ‘list‘
‘‘‘
技術分享
t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #會報錯

‘‘‘
結果:
TypeError: unhashable type: ‘list‘
‘‘‘
技術分享

hash函數會根據一個內部的算法對當前可hash變量進行處理,返回一個int數字。

*每一次執行程序,內容相同的變量hash值在這一次執行過程中不會發生改變。

文件操作相關

open() 打開一個文件,返回一個文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定編碼.

模塊操作相關

__import__導入一個模塊

技術分享 import time
import time

幫助方法

在控制臺執行help()進入幫助模式。可以隨意輸入變量或者變量的類型。輸入q退出

或者直接執行help(o),o是參數,查看和變量o有關的操作。。。

和調用相關

callable(o),o是參數,看這個變量是不是可調用。

如果o是一個函數名,就會返回True

技術分享
def func():pass
print(callable(func))  #參數是函數名,可調用,返回True
print(callable(123))   #參數是數字,不可調用,返回False

查看參數所屬類型的所有內置方法

dir() 默認查看全局空間內的屬性,也接受一個參數,查看這個參數內的方法或變量

技術分享
print(dir(list))  #查看列表的內置方法
print(dir(int))  #查看整數的內置方法
print(dir(list))  #查看列表的內置方法
print(dir(int))  #查看整數的內置方法

str類型代碼的執行

技術分享

http://www.cnblogs.com/Eva-J/articles/7266087.html

和數字相關

技術分享

數字——數據類型相關:bool,int,float,complex

數字——進制轉換相關:bin,oct,hex

數字——數學運算:abs,divmod,min,max,sum,round,pow

和數據結構相關

技術分享

序列——列表和元組相關的:list和tuple

序列——字符串相關的:str,format,bytes,bytesarry,memoryview,ord,chr,ascii,repr

序列:reversed,slice

數據集合——字典和集合:dict,set,frozenset

數據集合:len,sorted,enumerate,all,any,zip,filter,map

filter和map:http://www.cnblogs.com/Eva-J/articles/7266192.html

sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html

匿名函數

匿名函數:為了解決那些功能很簡單的需求而設計的一句話函數

技術分享
#這段代碼
def calc(n):
    return n**n
print(calc(10))
 
#換成匿名函數
calc = lambda n:n**n
print(calc(10))
技術分享

技術分享

上面是我們對calc這個匿名函數的分析,下面給出了一個關於匿名函數格式的說明

函數名 = lambda 參數 :返回值

#參數可以有多個,用逗號隔開
#匿名函數不管邏輯多復雜,只能寫一行,且邏輯執行結束後的內容就是返回值
#返回值和正常的函數一樣可以是任意數據類型

我們可以看出,匿名函數並不是真的不能有名字。

匿名函數的調用和正常的調用也沒有什麽分別。 就是 函數名(參數) 就可以了~~~

練一練:

請把以下函數變成匿名函數
def add(x,y):
    return x+y

上面是匿名函數的函數用法。除此之外,匿名函數也不是浪得虛名,它真的可以匿名。在和其他功能函數合作的時候

技術分享
l=[3,2,100,999,213,1111,31121,333]
print(max(l))

dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}


print(max(dic))
print(dic[max(dic,key=lambda k:dic[k])])
技術分享 技術分享
res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

輸出
1
25
49
16
64
技術分享 技術分享
res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)

輸出
11
15
技術分享

面試題練一練

現有兩個元組((‘a‘),(‘b‘)),((‘c‘),(‘d‘)),請使用python中匿名函數生成列表[{‘a‘:‘c‘},{‘b‘:‘d‘}]

技術分享
#答案一
test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
print(test(t1,t2))
#答案二
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
#還可以這樣寫
print([{i:j} for i,j in zip(t1,t2)])
技術分享
#答案一
test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
print(test(t1,t2))
#答案二
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
#還可以這樣寫
print([{i:j} for i,j in zip(t1,t2)])
技術分享

本章小結

說學習內置函數,不如說整理自己的知識體系。其實整理這些內置函數的過程也是在整理自己的知識體系。

我們講課的時候會歸類:常用或者不常用,主要還是根據場景而言。

一個優秀的程序員就應該是在該用這個方法的時候信手拈來,把每一個內置的函數都用的恰到好處。

要想做到這一點,至少要先了解,才能在需要的時候想起,進而將它用在該用的地方。

但是在這裏,我還是以自己的一點經驗之談,把幾個平時工作中相對更常用的方法推薦一下,請務必重點掌握:

其他:input,print,type,hash,open,import,dir

str類型代碼執行:eval,exec

數字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元組相關的:list和tuple

序列——字符串相關的:str,bytes,repr

序列:reversed,slice

數據集合——字典和集合:dict,set,frozenset

數據集合:len,sorted,enumerate,zip,filter,map

參考文檔:

  https://docs.python.org/3/library/functions.html#object

python——內置函數和匿名函數