掌握Python的X篇_22_import语句与模块

本篇将会开始介绍如何使用一些现成的函数,或者说模块,会用即可。对于前面我们学习到的printinput等都是python的exe文件在出厂时就已经有的,还有更多函数不是放在exe中的,而是以其他的方式,导入之后使用,导入之后就可以当做普通函数进行使用。

1. import语句

如果我们需要导入其他的模块,以使用其他模块中的函数或者类,我们就需要使用import语句。
import语句有三种形式:

1.1 import模块

import<模块名>

模块就被导入到当前python的名称空间中,我们就可以使用

<模块名>.方法

的方式,来调用模块中的方法(函数)。
比如:我们在ipython中输入randint(1,20),显示函数没有定义

In [1]: randint(1,20)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[1], line 1
----> 1 randint(1,20)

NameError: name 'randint' is not defined

在python标准库中有一个专门randon的模块,这个模块有很多获取随机数的方法。

In [3]: import random

In [4]: random.randint?
Signature: random.randint(a, b)
Docstring:
Return random integer in range [a, b], including both end points.

File:      e:\program files\python\python38\lib\random.py
Type:      method

In [5]: random.randint(1,200)
Out[5]: 30

可以通过以下三种方式来查看模块中的方法
(1)dir(random)

In [6]: dir(random)
Out[6]:
['BPF',
 'LOG4',
 'NV_MAGICCONST',
 'RECIP_BPF',
 'Random',
 'SG_MAGICCONST',
 'SystemRandom',
 'TWOPI',
 '_Sequence',
 '_Set',
 '__all__',
 '__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 '_accumulate',
 '_acos',
 '_bisect',
 '_ceil',
 '_cos',
 '_e',
 '_exp',
 '_inst',
 '_log',
 '_os',
 '_pi',
 '_random',
 '_repeat',
 '_sha512',
 '_sin',
 '_sqrt',
 '_test',
 '_test_generator',
 '_urandom',
 '_warn',
 'betavariate',
 'choice',
 'choices',
 'expovariate',
 'gammavariate',
 'gauss',
 'getrandbits',
 'getstate',
 'lognormvariate',
 'normalvariate',
 'paretovariate',
 'randint',
 'random',
 'randrange',
 'sample',
 'seed',
 'setstate',
 'shuffle',
 'triangular',
 'uniform',
 'vonmisesvariate',
 'weibullvariate']

(2) help(random)

In [8]: help(random)
Help on module random:

NAME
    random - Random variable generators.

DESCRIPTION
        integers
        --------
               uniform within range

        sequences
        ---------
               pick random element
               pick random sample
               pick weighted random sample
               generate random permutation

        distributions on the real line:
        ------------------------------
               uniform
               triangular
               normal (Gaussian)
               lognormal
               negative exponential
               gamma
               beta
               pareto
               Weibull

(3)random.<TAB补全的方式>
在这里插入图片描述
可以看到,用这种方法impot进入的模块,我们使用模块中的方法,需要加上模块名,作为“名称空间”。
加名称空间的好处,避免了不同的模块中有相同的函数名产生冲突
不过,对于某些情况,如果我们确认的只需要模块中的少数方法,我们可以使用from xxx import的语句。

1.2 from xxx import item

语法:

from<模块名>import<方法名>

这种语法导入的方法,不需要名称空间,可以直接使用。

In [10]: from random import randint

In [11]: randint(22,33)
Out[11]: 32

这种方法的缺点就是可能会带来方法的冲突

1.3 from xxx import *

这种方法不推荐,因为很容易造成方法的名称冲突
语法:

from<模块名>import *

以上语句,将导入模块中的所有变量及方法,使用时不需要名称空间,缺点是很容易产生名称冲突。(后一个覆盖前一个)

In [12]: random.gauss(1,0.1)
Out[12]: 1.0041061585192155

In [14]: gauss(1,0.1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[14], line 1
----> 1 gauss(1,0.1)

NameError: name 'gauss' is not defined

In [15]: from random import *

In [16]: gauss(1,0.1)
Out[16]: 0.9595171717868856

因此更为推荐第一种方法

2. 模块的本质

  • 模块的本质是py文件
  • 默认搜索路径sys.path

在现有的first.py的同文件夹下,创建一个mymodule.py文件,方法如下:
(1)打开资源管理器
在这里插入图片描述
(2)创建新建文件,并命名为mymodule.py
在这里插入图片描述
(3)修改文件内容如下:

def add(x,y):
    return x+y
def max(x,y):
    if x > y:
        return x
    else:
        return y

上述过程就将add(x,y)等函数放到了mymodule.py文件中,而在first.py中如何使用add(x,y)呢?这在实际的软件工程中是十分有用的,A程序员写A文件,B写B文件,方便分工,也体现函数优势。

first.py中代码如下

import mymodule 

ret = mymodule.add(100,200)
print(ret)

ret = mymodule.max(100,300)
print(ret)

运行结果:300 300

这时候我们会比较好奇,这里mymodule.py里的函数可以看见,那么上面使用到的random.randint方法对应模块在哪里呢?

并不是所有的模块的py文件都是和源码在同一目录下,实际上,import的过程,可以简单看作:

  • 在预设的路径中,寻找<模块名>.py( 或者同名目录)
  • 将该文件中的内容复制到当前文件

以上的“预设路径”:

  • 当前目录
  • sys.path中设置的路径(也就是环境变量中设置的路径)

3. 学习视频地址:import语句与模块

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值