为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我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 关注
  • 2550 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信