為什么我import?math之后,使用sqrt還需要寫math.sqrt,而abs可以直接用,加了math.abs反而報(bào)錯(cuò)?
3 回答
已采納

清波
TA貢獻(xiàn)165條經(jīng)驗(yàn) 獲得超90個(gè)贊
首先,這個(gè)猿問是我在站內(nèi)消息中 主動(dòng)(不要臉)要過來的,為了方便后來者查閱(騙積分)。
開題,這其實(shí)是一個(gè)命名空間的問題。但是需要看我回答的人可能都是初學(xué)者,所以我就不講命名空間了,直接解答本題,盡量少扯別的(不可能。。)。
初學(xué)者很容易被 內(nèi)置函數(shù),模塊里的方法和 某些對象(特別是內(nèi)置的數(shù)據(jù)類型)的方法擾亂, 一個(gè)一個(gè)講:
內(nèi)置函數(shù):
##?abs()?就是Python?的內(nèi)置函數(shù)(built-in?functions),簡稱BIF?這樣的函數(shù)有多少呢??沒數(shù)過,?用法就是直接寫: print?abs(-11) 11 ##?說一個(gè)調(diào)出所有內(nèi)置函數(shù)的方法,可以打印出來慢慢看: for?i?in?dir(__builtins__): ????print?i ##?小寫字母開頭的都是,?可以挨個(gè)?help(xx)?學(xué)習(xí)了。?當(dāng)然有一些我們熟悉的,比如說?len()?zip()?range() ##?題主之所以混淆,是因?yàn)檫@個(gè)絕對值,怎么看都是BIF?從Math?家領(lǐng)養(yǎng)過來的。。。
模塊里的方法:
##?就用math?模塊吧,?sqrt就是?math?模塊里面的一個(gè)方法(函數(shù)),?引用不同,調(diào)用方法不同: ##?(1)?引用整個(gè)模塊,把模塊作為一個(gè)家庭,引入整個(gè)模塊的意思就好比,我們聚會,?math是一個(gè)家庭, ##?我們請來他們?nèi)遥ǜ杏X想罵人),這時(shí)候我們稱呼math的家人(方法,如sqrt)的時(shí)候,?就會說:“math?家的sqrt” ##?對應(yīng)代碼如下: import?math print?math.sqrt(4) 2.0 ##?(2)?從模塊中單獨(dú)引入該方法(函數(shù)),?這個(gè)就好比?我們從?math家?直接請來了?sqrt?一個(gè)人,如此,稱呼他的時(shí)候 ##?就無需帶著家族了,直接喊他的名字就好,代碼如下: from?math?import?sqrt print?sqrt(1) 1.0 ##?(3)?引用模塊中的所有方法(函數(shù)),這個(gè)跟第一點(diǎn)引入整個(gè)模塊不同,這次我們雖然也請了math全家,但是卻是 ##?每一個(gè)人都下了請柬,同樣稱呼的時(shí)候也無需帶著家族名號了,代碼如下: from?math?import?* print?sqrt(1) 1.0 print?log(8,2)??##?math?中滿眼的三角函數(shù),恕我無能,我認(rèn)為最簡單的就是這個(gè)了。。 3.0 ##?(4)?引入模塊中的某方法并給予別名,?這就好比我們開了個(gè)假面舞會,或者cosplay大會,從math家請了一位,并且 ##?告訴他,你今晚扮演?蝙蝠俠,代碼如下: from?math?import?sqrt?as?kaifang print?kaifang(16)?##?以我近30年的拼音功力?起的名字?>_<?。 4.0 ##?(5)?引入整個(gè)模塊?并賦予這個(gè)模塊別名,這個(gè)跟上面那個(gè)差不多了,這次是給他們?nèi)遥ㄎ拿鳎└拿?。代碼如下: import?math?as?shuxue print?shuxue.sqrt(16)????##?作為英語渣,看到這句,我也想殺了我自己。。。 4.0 ##?小貼士,如果想知道某些模塊含有那些方法,?首先?import?xxx?然后?help(xxx)?就好了。 ##?總結(jié),我擦?扯了這么多,算了不總結(jié)了。。。
內(nèi)置數(shù)據(jù)類型的方法:
##?以字符串為例,?首先help(str)?看方法,然后我下面隨便用幾個(gè)。 s='abcdefc' print?s.upper()?##?大寫所有 'ABCDEF' print?s.index('c')?##?返回?參數(shù)?所處的第一個(gè)index,?有其他參數(shù)可以調(diào)整 2 ##?查看某對象的方法:?help(對象名),?內(nèi)置數(shù)據(jù)類型如?help(list),?tuple,?set?,?dict,?bool,?int,?float?等等 ##?總結(jié),某些對象或者?內(nèi)置數(shù)據(jù)類型(也是對象)的方法調(diào)用?就是??Object.method()??(對象.方法名())
我 —————— 真—————— 能—————— 扯—————— ?。?!———————— ?。?!
點(diǎn)擊展開后面5條
添加回答
舉報(bào)
0/150
提交
取消