真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python內(nèi)建函數(shù)原理 python常用內(nèi)置函數(shù)原理用法

Python 里為什么函數(shù)可以返回一個(gè)函數(shù)內(nèi)部定義的函數(shù)

“在Python中,函數(shù)本身也是對(duì)象”

創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供漳平企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為漳平眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

這一本質(zhì)。那不妨慢慢來(lái),從最基本的概念開(kāi)始,討論一下這個(gè)問(wèn)題:

1. Python中一切皆對(duì)象

這恐怕是學(xué)習(xí)Python最有用的一句話。想必你已經(jīng)知道Python中的list, tuple, dict等內(nèi)置數(shù)據(jù)結(jié)構(gòu),當(dāng)你執(zhí)行:

alist = [1, 2, 3]

時(shí),你就創(chuàng)建了一個(gè)列表對(duì)象,并且用alist這個(gè)變量引用它:

當(dāng)然你也可以自己定義一個(gè)類(lèi):

class House(object):

def __init__(self, area, city):

self.area = area

self.city = city

def sell(self, price):

[...] #other code

return price

然后創(chuàng)建一個(gè)類(lèi)的對(duì)象:

house = House(200, 'Shanghai')

OK,你立馬就在上海有了一套200平米的房子,它有一些屬性(area, city),和一些方法(__init__, self):

2. 函數(shù)是第一類(lèi)對(duì)象

和list, tuple, dict以及用House創(chuàng)建的對(duì)象一樣,當(dāng)你定義一個(gè)函數(shù)時(shí),函數(shù)也是對(duì)象:

def func(a, b):

return a+b

在全局域,函數(shù)對(duì)象被函數(shù)名引用著,它接收兩個(gè)參數(shù)a和b,計(jì)算這兩個(gè)參數(shù)的和作為返回值。

所謂第一類(lèi)對(duì)象,意思是可以用標(biāo)識(shí)符給對(duì)象命名,并且對(duì)象可以被當(dāng)作數(shù)據(jù)處理,例如賦值、作為參數(shù)傳遞給函數(shù),或者作為返回值return 等

因此,你完全可以用其他變量名引用這個(gè)函數(shù)對(duì)象:

add = func

這樣,你就可以像調(diào)用func(1, 2)一樣,通過(guò)新的引用調(diào)用函數(shù)了:

print func(1, 2)

print add(1, 2) #the same as func(1, 2)

或者將函數(shù)對(duì)象作為參數(shù),傳遞給另一個(gè)函數(shù):

def caller_func(f):

return f(1, 2)

if __name__ == "__main__":

print caller_func(func)

可以看到,

函數(shù)對(duì)象func作為參數(shù)傳遞給caller_func函數(shù),傳參過(guò)程類(lèi)似于一個(gè)賦值操作f=func;

于是func函數(shù)對(duì)象,被caller_func函數(shù)作用域中的局部變量f引用,f實(shí)際指向了函數(shù)func;cc

當(dāng)執(zhí)行return f(1, 2)的時(shí)候,相當(dāng)于執(zhí)行了return func(1, 2);

因此輸出結(jié)果為3。

3. 函數(shù)對(duì)象 vs 函數(shù)調(diào)用

無(wú)論是把函數(shù)賦值給新的標(biāo)識(shí)符,還是作為參數(shù)傳遞給新的函數(shù),針對(duì)的都是函數(shù)對(duì)象本身,而不是函數(shù)的調(diào)用。

用一個(gè)更加簡(jiǎn)單,但從外觀上看,更容易產(chǎn)生混淆的例子來(lái)說(shuō)明這個(gè)問(wèn)題。例如定義了下面這個(gè)函數(shù):

def func():

return "hello,world"

然后分別執(zhí)行兩次賦值:

ref1 = func #將函數(shù)對(duì)象賦值給ref1

ref2 = func() #調(diào)用函數(shù),將函數(shù)的返回值("hello,world"字符串)賦值給ref2

很多初學(xué)者會(huì)混淆這兩種賦值,通過(guò)Python內(nèi)建的type函數(shù),可以查看一下這兩次賦值的結(jié)果:

In [4]: type(ref1)

Out[4]: function

In [5]: type(ref2)

Out[5]: str

可以看到,ref1引用了函數(shù)對(duì)象本身,而ref2則引用了函數(shù)的返回值。通過(guò)內(nèi)建的callable函數(shù),可以進(jìn)一步驗(yàn)證ref1是可調(diào)用的,而ref2是不可調(diào)用的:

In [9]: callable(ref1)

Out[9]: True

In [10]: callable(ref2)

Out[10]: False

傳參的效果與之類(lèi)似。

4. 閉包LEGB法則

所謂閉包,就是將組成函數(shù)的語(yǔ)句和這些語(yǔ)句的執(zhí)行環(huán)境打包在一起時(shí),得到的對(duì)象

聽(tīng)上去的確有些復(fù)雜,還是用一個(gè)栗子來(lái)幫助理解一下。假設(shè)我們?cè)趂oo.py模塊中做了如下定義:

#foo.py

filename = "foo.py"

def call_func(f):

return f() #如前面介紹的,f引用一個(gè)函數(shù)對(duì)象,然后調(diào)用它

在另一個(gè)func.py模塊中,寫(xiě)下了這樣的代碼:

#func.py

import foo #導(dǎo)入foo.py

filename = "func.py"

def show_filename():

return "filename: %s" % filename

if __name__ == "__main__":

print foo.call_func(show_filename) #注意:實(shí)際發(fā)生調(diào)用的位置,是在foo.call_func函數(shù)中

當(dāng)我們用python func.py命令執(zhí)行func.py時(shí)輸出結(jié)果為:

chiyu@chiyu-PC:~$ python func.py

filename:func.py

很顯然show_filename()函數(shù)使用的filename變量的值,是在與它相同環(huán)境(func.py模塊)中定義的那個(gè)。盡管foo.py模塊中也定義了同名的filename變量,而且實(shí)際調(diào)用show_filename的位置也是在foo.py的call_func內(nèi)部。

而對(duì)于嵌套函數(shù),這一機(jī)制則會(huì)表現(xiàn)的更加明顯:閉包將會(huì)捕捉內(nèi)層函數(shù)執(zhí)行所需的整個(gè)環(huán)境:

#enclosed.py

import foo

def wrapper():

filename = "enclosed.py"

def show_filename():

return "filename: %s" % filename

print foo.call_func(show_filename) #輸出:filename: enclosed.py

實(shí)際上,每一個(gè)函數(shù)對(duì)象,都有一個(gè)指向了該函數(shù)定義時(shí)所在全局名稱(chēng)空間的__globals__屬性:

#show_filename inside wrapper

#show_filename.__globals__

{

'__builtins__': module '__builtin__' (built-in), #內(nèi)建作用域環(huán)境

'__file__': 'enclosed.py',

'wrapper': function wrapper at 0x7f84768b6578, #直接外圍環(huán)境

'__package__': None,

'__name__': '__main__',

'foo': module 'foo' from '/home/chiyu/foo.pyc', #全局環(huán)境

'__doc__': None

}

當(dāng)代碼執(zhí)行到show_filename中的return "filename: %s" % filename語(yǔ)句時(shí),解析器按照下面的順序查找filename變量:

Local - 本地函數(shù)(show_filename)內(nèi)部,通過(guò)任何方式賦值的,而且沒(méi)有被global關(guān)鍵字聲明為全局變量的filename變量;

Enclosing - 直接外圍空間(上層函數(shù)wrapper)的本地作用域,查找filename變量(如果有多層嵌套,則由內(nèi)而外逐層查找,直至最外層的函數(shù));

Global - 全局空間(模塊enclosed.py),在模塊頂層賦值的filename變量;

Builtin - 內(nèi)置模塊(__builtin__)中預(yù)定義的變量名中查找filename變量;

在任何一層先找到了符合要求的filename變量,則不再向更外層查找。如果直到Builtin層仍然沒(méi)有找到符合要求的變量,則拋出NameError異常。這就是變量名解析的:LEGB法則。

總結(jié):

閉包最重要的使用價(jià)值在于:封存函數(shù)執(zhí)行的上下文環(huán)境;

閉包在其捕捉的執(zhí)行環(huán)境(def語(yǔ)句塊所在上下文)中,也遵循LEGB規(guī)則逐層查找,直至找到符合要求的變量,或者拋出異常。

5. 裝飾器語(yǔ)法糖(syntax sugar)

那么閉包和裝飾器又有什么關(guān)系呢?

上文提到閉包的重要特性:封存上下文,這一特性可以巧妙的被用于現(xiàn)有函數(shù)的包裝,從而為現(xiàn)有函數(shù)更加功能。而這就是裝飾器。

還是舉個(gè)例子,代碼如下:

#alist = [1, 2, 3, ..., 100] -- 1+2+3+...+100 = 5050

def lazy_sum():

return reduce(lambda x, y: x+y, alist)

我們定義了一個(gè)函數(shù)lazy_sum,作用是對(duì)alist中的所有元素求和后返回。alist假設(shè)為1到100的整數(shù)列表:

alist = range(1, 101)

但是出于某種原因,我并不想馬上返回計(jì)算結(jié)果,而是在之后的某個(gè)地方,通過(guò)顯示的調(diào)用輸出結(jié)果。于是我用一個(gè)wrapper函數(shù)對(duì)其進(jìn)行包裝:

def wrapper():

alist = range(1, 101)

def lazy_sum():

return reduce(lambda x, y: x+y, alist)

return lazy_sum

lazy_sum = wrapper() #wrapper() 返回的是lazy_sum函數(shù)對(duì)象

if __name__ == "__main__":

lazy_sum() #5050

這是一個(gè)典型的Lazy Evaluation的例子。我們知道,一般情況下,局部變量在函數(shù)返回時(shí),就會(huì)被垃圾回收器回收,而不能再被使用。但是這里的alist卻沒(méi)有,它隨著lazy_sum函數(shù)對(duì)象的返回被一并返回了(這個(gè)說(shuō)法不準(zhǔn)確,實(shí)際是包含在了lazy_sum的執(zhí)行環(huán)境中,通過(guò)__globals__),從而延長(zhǎng)了生命周期。

當(dāng)在if語(yǔ)句塊中調(diào)用lazy_sum()的時(shí)候,解析器會(huì)從上下文中(這里是Enclosing層的wrapper函數(shù)的局部作用域中)找到alist列表,計(jì)算結(jié)果,返回5050。

當(dāng)你需要?jiǎng)討B(tài)的給已定義的函數(shù)增加功能時(shí),比如:參數(shù)檢查,類(lèi)似的原理就變得很有用:

def add(a, b):

return a+b

這是很簡(jiǎn)單的一個(gè)函數(shù):計(jì)算a+b的和返回,但我們知道Python是 動(dòng)態(tài)類(lèi)型+強(qiáng)類(lèi)型 的語(yǔ)言,你并不能保證用戶傳入的參數(shù)a和b一定是兩個(gè)整型,他有可能傳入了一個(gè)整型和一個(gè)字符串類(lèi)型的值:

In [2]: add(1, 2)

Out[2]: 3

In [3]: add(1.2, 3.45)

Out[3]: 4.65

In [4]: add(5, 'hello')

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

/home/chiyu/ipython-input-4-f2f9e8aa5eae in module()

---- 1 add(5, 'hello')

/home/chiyu/ipython-input-1-02b3d3d6caec in add(a, b)

1 def add(a, b):

---- 2 return a+b

TypeError: unsupported operand type(s) for +: 'int' and 'str'

于是,解析器無(wú)情的拋出了一個(gè)TypeError異常。

動(dòng)態(tài)類(lèi)型:在運(yùn)行期間確定變量的類(lèi)型,python確定一個(gè)變量的類(lèi)型是在你第一次給他賦值的時(shí)候;

強(qiáng)類(lèi)型:有強(qiáng)制的類(lèi)型定義,你有一個(gè)整數(shù),除非顯示的類(lèi)型轉(zhuǎn)換,否則絕不能將它當(dāng)作一個(gè)字符串(例如直接嘗試將一個(gè)整型和一個(gè)字符串做+運(yùn)算);

因此,為了更加優(yōu)雅的使用add函數(shù),我們需要在執(zhí)行+運(yùn)算前,對(duì)a和b進(jìn)行參數(shù)檢查。這時(shí)候裝飾器就顯得非常有用:

import logging

logging.basicConfig(level = logging.INFO)

def add(a, b):

return a + b

def checkParams(fn):

def wrapper(a, b):

if isinstance(a, (int, float)) and isinstance(b, (int, float)): #檢查參數(shù)a和b是否都為整型或浮點(diǎn)型

return fn(a, b) #是則調(diào)用fn(a, b)返回計(jì)算結(jié)果

#否則通過(guò)logging記錄錯(cuò)誤信息,并友好退出

logging.warning("variable 'a' and 'b' cannot be added")

return

return wrapper #fn引用add,被封存在閉包的執(zhí)行環(huán)境中返回

if __name__ == "__main__":

#將add函數(shù)對(duì)象傳入,fn指向add

#等號(hào)左側(cè)的add,指向checkParams的返回值wrapper

add = checkParams(add)

add(3, 'hello') #經(jīng)過(guò)類(lèi)型檢查,不會(huì)計(jì)算結(jié)果,而是記錄日志并退出

注意checkParams函數(shù):

首先看參數(shù)fn,當(dāng)我們調(diào)用checkParams(add)的時(shí)候,它將成為函數(shù)對(duì)象add的一個(gè)本地(Local)引用;

在checkParams內(nèi)部,我們定義了一個(gè)wrapper函數(shù),添加了參數(shù)類(lèi)型檢查的功能,然后調(diào)用了fn(a, b),根據(jù)LEGB法則,解釋器將搜索幾個(gè)作用域,并最終在(Enclosing層)checkParams函數(shù)的本地作用域中找到fn;

注意最后的return wrapper,這將創(chuàng)建一個(gè)閉包,fn變量(add函數(shù)對(duì)象的一個(gè)引用)將會(huì)封存在閉包的執(zhí)行環(huán)境中,不會(huì)隨著checkParams的返回而被回收;

當(dāng)調(diào)用add = checkParams(add)時(shí),add指向了新的wrapper對(duì)象,它添加了參數(shù)檢查和記錄日志的功能,同時(shí)又能夠通過(guò)封存的fn,繼續(xù)調(diào)用原始的add進(jìn)行+運(yùn)算。

因此調(diào)用add(3, 'hello')將不會(huì)返回計(jì)算結(jié)果,而是打印出日志:

chiyu@chiyu-PC:~$ python func.py

WARNING:root:variable 'a' and 'b' cannot be added

有人覺(jué)得add = checkParams(add)這樣的寫(xiě)法未免太過(guò)麻煩,于是python提供了一種更優(yōu)雅的寫(xiě)法,被稱(chēng)為語(yǔ)法糖:

@checkParams

def add(a, b):

return a + b

這只是一種寫(xiě)法上的優(yōu)化,解釋器仍然會(huì)將它轉(zhuǎn)化為add = checkParams(add)來(lái)執(zhí)行。

6. 回歸問(wèn)題

def addspam(fn):

def new(*args):

print "spam,spam,spam"

return fn(*args)

return new

@addspam

def useful(a,b):

print a**2+b**2

首先看第二段代碼:

@addspam裝飾器,相當(dāng)于執(zhí)行了useful = addspam(useful)。在這里題主有一個(gè)理解誤區(qū):傳遞給addspam的參數(shù),是useful這個(gè)函數(shù)對(duì)象本身,而不是它的一個(gè)調(diào)用結(jié)果;

再回到addspam函數(shù)體:

return new 返回一個(gè)閉包,fn被封存在閉包的執(zhí)行環(huán)境中,不會(huì)隨著addspam函數(shù)的返回被回收;

而fn此時(shí)是useful的一個(gè)引用,當(dāng)執(zhí)行return fn(*args)時(shí),實(shí)際相當(dāng)于執(zhí)行了return useful(*args);

最后附上一張代碼執(zhí)行過(guò)程中的引用關(guān)系圖,希望能幫助你理解:

Python基礎(chǔ)之常見(jiàn)內(nèi)建函數(shù)

map() 函數(shù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象(Iterable), map 將傳入的函數(shù)依次作用到可迭代對(duì)象的每一個(gè)元素,并把結(jié)果作為迭代器(Iterator)返回。

舉例說(shuō)明,有一個(gè)函數(shù) f(x)=x^2 ,要把這個(gè)函數(shù)作用到一個(gè)list [1,2,3,4,5,6,7,8,9] 上:

運(yùn)用簡(jiǎn)單的循環(huán)可以實(shí)現(xiàn):

運(yùn)用高階函數(shù) map() :

結(jié)果 r 是一個(gè)迭代器,迭代器是惰性序列,通過(guò) list() 函數(shù)讓它把整個(gè)序列都計(jì)算出來(lái)并返回一個(gè) list 。

如果要把這個(gè)list所有數(shù)字轉(zhuǎn)為字符串利用 map() 就簡(jiǎn)單了:

小練習(xí):利用 map() 函數(shù),把用戶輸入的不規(guī)范的英文名字變?yōu)槭鬃帜复髮?xiě)其他小寫(xiě)的規(guī)范名字。輸入 ['adam', 'LISA', 'barT'] ,輸出 ['Adam', 'Lisa', 'Bart']

reduce() 函數(shù)也是接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象, reduce 將傳入的函數(shù)作用到可迭代對(duì)象的每個(gè)元素的結(jié)果做累計(jì)計(jì)算。然后將最終結(jié)果返回。

效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

舉例說(shuō)明,將序列 [1,2,3,4,5] 變換成整數(shù) 12345 :

小練習(xí):編寫(xiě)一個(gè) prod() 函數(shù),可以接受一個(gè) list 并利用 reduce 求積:

map() 和 reduce() 綜合練習(xí):編寫(xiě) str2float 函數(shù),把字符串 '123.456' 轉(zhuǎn)換成浮點(diǎn)型 123.456

filter() 函數(shù)用于過(guò)濾序列, filter() 也接受一個(gè)函數(shù)和一個(gè)序列, filter() 把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是 True 還是 False 決定保留還是丟棄該元素。

舉例說(shuō)明,刪除list中的偶數(shù):

小練習(xí):用 filter() 求素?cái)?shù)

定義一個(gè)篩選函數(shù):

定義一個(gè)生成器不斷返回下一個(gè)素?cái)?shù):

打印100以內(nèi)素?cái)?shù):

python內(nèi)置的 sorted() 函數(shù)可以對(duì)list進(jìn)行排序:

sorted() 函數(shù)也是一個(gè)高階函數(shù),還可以接受一個(gè) key 函數(shù)來(lái)實(shí)現(xiàn)自定義排序:

key 指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù) key 函數(shù)返回的結(jié)果進(jìn)行排序.

默認(rèn)情況下,對(duì)字符串排序,是按照ASCII的大小比較的,由于'Z' 'a',結(jié)果,大寫(xiě)字母Z會(huì)排在小寫(xiě)字母a的前面。如果想忽略大小寫(xiě)可都轉(zhuǎn)換成小寫(xiě)來(lái)比較:

要進(jìn)行反向排序,不必改動(dòng)key函數(shù),可以傳入第三個(gè)參數(shù) reverse=True :

小練習(xí):假設(shè)我們用一組tuple表示學(xué)生名字和成績(jī): L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()對(duì)上述列表分別按c成績(jī)從高到低排序:

運(yùn)用匿名函數(shù)更簡(jiǎn)潔:

python、什么是內(nèi)建函數(shù)

python內(nèi)建函數(shù)總結(jié)

1. abs(x)

abs()函數(shù)返回?cái)?shù)字(可為普通型、長(zhǎng)整型或浮點(diǎn)型)的絕對(duì)值。如果給出復(fù)數(shù),返回值就是該復(fù)數(shù)的模。例如:

print abs(-2,4)

2.4

print abs(4+2j)

4.472135955

2. apply(function,args[,keywords])

apply()函數(shù)將args參數(shù)應(yīng)用到function上。function參數(shù)必須是可調(diào)用對(duì)象(函數(shù)、方法或其他可調(diào)用對(duì)象)。args參數(shù)必須以

序列形式給出。列表在應(yīng)用之前被轉(zhuǎn)換為元組。function對(duì)象在被調(diào)用時(shí),將args列表的內(nèi)容分別作為獨(dú)立的參數(shù)看待。例如:

apply(add,(1,3,4))

等價(jià)于

add(1,3,4)

在以列表或元組定義了一列參數(shù),且需要將此列表參數(shù)分別作為個(gè)個(gè)獨(dú)立參數(shù)使用的情況下,必須使用apply()函數(shù)。在要把變長(zhǎng)參數(shù)列應(yīng)用到已函數(shù)上時(shí),apply()函數(shù)非常有用。

可選項(xiàng)keywords參數(shù)應(yīng)是個(gè)字典,字典的關(guān)鍵字是字符串。這些字符串在apply()函數(shù)的參數(shù)列末尾處給出,它們將被用作關(guān)鍵字參數(shù)。

3. buffer(object[,offset[,size]])

如果object對(duì)象支持緩存調(diào)用接口buffer()函數(shù)就為object對(duì)象創(chuàng)建一個(gè)新緩存。這樣的對(duì)象包括字符串、數(shù)組和緩存。該新緩存通過(guò)使用從

offset參數(shù)值開(kāi)始知道該對(duì)象末尾的存儲(chǔ)片段或從offset參數(shù)值開(kāi)始直到size參數(shù)給出的尺寸為長(zhǎng)度的存儲(chǔ)片段來(lái)引用object對(duì)象。如果沒(méi)

給出任何選項(xiàng)參數(shù),緩存區(qū)域就覆蓋整個(gè)序列,最終得到的緩存對(duì)象是object對(duì)象數(shù)據(jù)的只讀拷貝。

緩存對(duì)象用于給某個(gè)對(duì)象類(lèi)型創(chuàng)建一個(gè)更友好的接口。比如,字符串對(duì)象類(lèi)型通用緩存對(duì)象而變得可用,允許逐個(gè)字節(jié)地訪問(wèn)字符串中的信息。

4. callable(object)

callable()函數(shù)在object對(duì)象是可調(diào)用對(duì)象的情況下,返回真(true);否則假(false),可調(diào)用對(duì)象包括函數(shù)、方法、代碼對(duì)象、類(lèi)(在調(diào)用時(shí)返回新的實(shí)例)和已經(jīng)定義‘調(diào)用’方法的類(lèi)實(shí)例

5. chr(i)

chr()函數(shù)返回與ASCII碼i相匹配的一個(gè)單一字符串,如下例所示:

print chr(72)+chr(101)+chr(108)+chr(111)

hello

chr()函數(shù)是ord()函數(shù)的反函數(shù),其中ord()函數(shù)將字符串轉(zhuǎn)換回ASCII整數(shù)碼,參數(shù)i的取值應(yīng)在0~255范圍內(nèi)。如果參數(shù)i的取值在此范圍之外,將引發(fā)ValueError異常。

6. cmp(x,y)

cmp()函數(shù)比較x和y這兩個(gè)對(duì)象,且根據(jù)比較結(jié)果返回一個(gè)整數(shù)。如果xy,則返回正數(shù)。請(qǐng)注意,此函數(shù)特別用來(lái)比較數(shù)值大小,而不是任何引用關(guān)系,因而有下面的結(jié)果:

a=99

b=int('99')

cmp(a,b)

7. coerce(x,y)

coerce()函數(shù)返回一個(gè)元組,該元組由兩個(gè)數(shù)值型參數(shù)組成。此函數(shù)將兩個(gè)數(shù)值型參數(shù)轉(zhuǎn)換為同一類(lèi)型數(shù)字,其轉(zhuǎn)換規(guī)則與算術(shù)轉(zhuǎn)換規(guī)則一樣。一下是兩個(gè)例子:

a=1

b=1.2

coerce(a,b)

(1.0,1.2)

a=1+2j

b=4.3e10

coerce(a,b)

((1+2j),(43000000000+0j))

8 compile(string,filename,kind)

compile()函數(shù)將string編譯為代碼對(duì)象,編譯生成的代碼對(duì)象接下來(lái)被exec語(yǔ)句執(zhí)行,接著能利用eval()函數(shù)對(duì)其進(jìn)行求值。

filename參數(shù)應(yīng)是代碼從其中讀出的文件名。如果內(nèi)部生成文件名,filename參數(shù)值應(yīng)是相應(yīng)的標(biāo)識(shí)符。kind參數(shù)指定string參數(shù)中所含代碼的類(lèi)別。

舉例如下:

a=compile(‘print “Hello World”’,’’,’single’)

exec(a)

Hello World

eval(a)

Hello World

9. complex(real,[image])

Complex()函數(shù)返回一個(gè)復(fù)數(shù),其實(shí)部為real參數(shù)值。如果給出image參數(shù)的值,則虛部就為image;如果默認(rèn)image參數(shù),則虛部為0j。

10. delattr(object,name)

delattr()函數(shù)在object對(duì)象許可時(shí),刪除object對(duì)象的name屬性,此函數(shù)等價(jià)于如下語(yǔ)句:

del object.attr

而delattr()函數(shù)允許利用編程方法定義來(lái)定義object和name參數(shù),并不是在代碼中顯示指定。

python如何導(dǎo)入函數(shù)

python的內(nèi)建函數(shù)即是python自帶的函數(shù),這種函數(shù)不需要定義,并且不同的內(nèi)建函數(shù)具有不同的功能,可以直接使用。

以下是部分內(nèi)建函數(shù)用法及說(shuō)明

1、abs(),返回?cái)?shù)字的絕對(duì)值。

2、all(),如果集合中所有元素是true或集合為空集合,返回True。

3、any(),如果集合中有一項(xiàng)元素是true,返回True;空集合為False

4、ascii(), 返回一個(gè)表示對(duì)象的字符串。

5、bin(),將整數(shù)轉(zhuǎn)換為前綴為“0b”的二進(jìn)制字符串。

6、bool(),返回一個(gè)布爾值,即True或者之一False。

7、bytearray(),返回一個(gè)新的字節(jié)數(shù)組。

8、callable(對(duì)象)判斷對(duì)象參數(shù)是否可被調(diào)用(可被調(diào)用指的是對(duì)象能否使用()括號(hào)的方法調(diào)用)

9、chr(),返回表示Unicode代碼點(diǎn)為整數(shù)i的字符的字符串。與ord()函數(shù)相反。

推薦學(xué)習(xí)《python教程》

10、classmethod,將方法轉(zhuǎn)換為類(lèi)方法。

11、compile,將源代碼編譯為代碼或AST對(duì)象。代碼對(duì)象可以由exec()或執(zhí)行eval()。 source可以是普通字符串,字節(jié)字符串或AST對(duì)象。

12、dic(),創(chuàng)建一個(gè)字典

13、divmod(a,b),將兩個(gè)數(shù)作為參數(shù),并在使用整數(shù)除法時(shí)返回由商和余數(shù)組成的一對(duì)數(shù)

14、enumerate(iterable,start = 0)

enumerate是枚舉、列舉的意思

對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值

enumerate多用于在for循環(huán)中得到計(jì)數(shù)

15、eval,將一個(gè)字符串變?yōu)樽值?/p>

16、exec(object [, globals[, locals]])exec語(yǔ)句用來(lái)執(zhí)行儲(chǔ)存在字符串或文件中的Python語(yǔ)句

17、filter(功能,可迭代)

filter函數(shù)用于過(guò)濾序列

filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。


分享題目:python內(nèi)建函數(shù)原理 python常用內(nèi)置函數(shù)原理用法
轉(zhuǎn)載源于:http://weahome.cn/article/dosjhid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部