亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我import math之后,使用sqrt還需要寫math.sqrt,而abs可以直接用,加了math.abs反而報錯

為什么我import math之后,使用sqrt還需要寫math.sqrt,而abs可以直接用,加了math.abs反而報錯

W_Qing 2016-04-21 16:56:36
為什么我import?math之后,使用sqrt還需要寫math.sqrt,而abs可以直接用,加了math.abs反而報錯?
查看完整描述

3 回答

已采納
?
清波

TA貢獻165條經驗 獲得超90個贊

首先,這個猿問是我在站內消息中 主動(不要臉)要過來的,為了方便后來者查閱(騙積分)。


開題,這其實是一個命名空間的問題。但是需要看我回答的人可能都是初學者,所以我就不講命名空間了,直接解答本題,盡量少扯別的(不可能。。)。


初學者很容易被 內置函數,模塊里的方法某些對象(特別是內置的數據類型)的方法擾亂, 一個一個講:


內置函數:

##?abs()?就是Python?的內置函數(built-in?functions),簡稱BIF?這樣的函數有多少呢??沒數過,?用法就是直接寫:
print?abs(-11)
11

##?說一個調出所有內置函數的方法,可以打印出來慢慢看:
for?i?in?dir(__builtins__):
????print?i
##?小寫字母開頭的都是,?可以挨個?help(xx)?學習了。?當然有一些我們熟悉的,比如說?len()?zip()?range()
##?題主之所以混淆,是因為這個絕對值,怎么看都是BIF?從Math?家領養過來的。。。


模塊里的方法:

##?就用math?模塊吧,?sqrt就是?math?模塊里面的一個方法(函數),?引用不同,調用方法不同:

##?(1)?引用整個模塊,把模塊作為一個家庭,引入整個模塊的意思就好比,我們聚會,?math是一個家庭,
##?我們請來他們全家(感覺想罵人),這時候我們稱呼math的家人(方法,如sqrt)的時候,?就會說:“math?家的sqrt”
##?對應代碼如下:
import?math

print?math.sqrt(4)
2.0


##?(2)?從模塊中單獨引入該方法(函數),?這個就好比?我們從?math家?直接請來了?sqrt?一個人,如此,稱呼他的時候
##?就無需帶著家族了,直接喊他的名字就好,代碼如下:
from?math?import?sqrt

print?sqrt(1)
1.0


##?(3)?引用模塊中的所有方法(函數),這個跟第一點引入整個模塊不同,這次我們雖然也請了math全家,但是卻是
##?每一個人都下了請柬,同樣稱呼的時候也無需帶著家族名號了,代碼如下:
from?math?import?*

print?sqrt(1)
1.0

print?log(8,2)??##?math?中滿眼的三角函數,恕我無能,我認為最簡單的就是這個了。。
3.0


##?(4)?引入模塊中的某方法并給予別名,?這就好比我們開了個假面舞會,或者cosplay大會,從math家請了一位,并且
##?告訴他,你今晚扮演?蝙蝠俠,代碼如下:
from?math?import?sqrt?as?kaifang

print?kaifang(16)?##?以我近30年的拼音功力?起的名字?>_<?。
4.0


##?(5)?引入整個模塊?并賦予這個模塊別名,這個跟上面那個差不多了,這次是給他們全家(文明)改名。代碼如下:
import?math?as?shuxue

print?shuxue.sqrt(16)????##?作為英語渣,看到這句,我也想殺了我自己。。。
4.0



##?小貼士,如果想知道某些模塊含有那些方法,?首先?import?xxx?然后?help(xxx)?就好了。

##?總結,我擦?扯了這么多,算了不總結了。。。


內置數據類型的方法:

##?以字符串為例,?首先help(str)?看方法,然后我下面隨便用幾個。

s='abcdefc'

print?s.upper()?##?大寫所有
'ABCDEF'

print?s.index('c')?##?返回?參數?所處的第一個index,?有其他參數可以調整
2


##?查看某對象的方法:?help(對象名),?內置數據類型如?help(list),?tuple,?set?,?dict,?bool,?int,?float?等等
##?總結,某些對象或者?內置數據類型(也是對象)的方法調用?就是??Object.method()??(對象.方法名())


我 —————— 真—————— 能—————— 扯—————— ?。。 ??。?!

查看完整回答
6 反對 回復 2016-04-21
  • 清波
    清波
    不好意思, mooc 抽風了, 里面有個函數寫的不嚴謹 , log2(8) , log2 在Python2.x 中不存在, 需要改成log(8,2)
  • W_Qing
    W_Qing
    非常感謝!寫的清晰易懂~ 內置函數、模塊中調用函數的方法和某些對象的調用大概知道區分開了。
  • 龍_大人
    龍_大人
    可以修改噠~在內容右下角有修改按鈕~
點擊展開后面5
?
慕奶姨

TA貢獻55條經驗 獲得超70個贊

檢測函數

查看完整回答
反對 回復 2016-04-22
?
Python工程師

TA貢獻32條經驗 獲得超16個贊

可能使用的函數有問題吧

查看完整回答
反對 回復 2016-04-22
  • 3 回答
  • 1 關注
  • 2709 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號