廖雪峰 | 6.0 使用模块和安装第三方模块

1,在Python中,一个.py文件就称之为一个模块(Module)
2,模块使用优势:
(1)提高了代码的可维护性
(2)编写代码不必从零开始,可以被其他地方引用
(3)可以避免函数名和变量名冲突,相同名字的函数和变量完全可以分别存在不同的模块中。但是也要注意,尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数。
3,包(Package)
Python引入了按目录来组织模块的方法,可以避免模块名冲突。

image.png

文件www.py本身是一个模块,其模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utilsmycompany.web也是一个模块

  • 创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。
  • 查看系统是否已存在该模块的方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

使用模块

1,以内建的sys模块为例,编写一个hello_1的模块:

#!/usr/bin/env python3  #使得本文件可以直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*-   #表示.py文件本身使用标准UTF-8编码

' a test module '   #表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释

__author__ = 'Michael Liao'   #使用__author__变量标注作者

import sys   #导入sys模块

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':  #如果使用命令行运行模块,则运行test函数
    test()

(1)sys模块的argv变量,用list存储命令行的所有参数。sys.argv是获取运行Python文件的时候命令行参数。
(2)argv至少有一个元素,因为第一个参数永远是该.py文件的名称,例如:

#文件a.py内容见下
import sys
a=sys.argv
b=len(sys.argv)
print(a)
print(b)
#运行程序
C:\Users\Alexia Lee>cd python_study
C:\Users\Alexia Lee\python_study>python a.py
['a.py']
1

C:\Users\Alexia Lee\python_study>python a.py Alexia
['a.py', 'Alexia']
2

(3)判断模块运行模式

if __name__=='__main__':
test()

  • main代表模块的名称(带.py后缀),此处为hello_1.py
  • 命令行运行hello.py
C:\Users\Alexia Lee\python_study>python hello_1.py  #符合if条件,运行test函数
Hello, world!
C:\Users\Alexia Lee\python_study>python hello_1.py Alexia 
Hello, Alexia!
  • 启动Python交互环境,导入hello模块
C:\Users\Alexia Lee\python_study>python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello_1  #跳过if判断,忽略后面的执行命令
>>> hello_1.test()
Hello, world!

2,作用域
(1)定义:作用域:程序创建、访问、改变一个变量时,都是在一个保存该变量的空间内进行,这个空间为命名空间,即作用域。
(2)通过_前缀来表示该函数或变量是在模块内部使用

  • 正常的函数和变量名是公开的(public),可以被直接引用,比如:abcx123PI等;
  • 类似__xxx__这样的变量是特殊变量,是非公开的(private)的,可以被直接引用,但是有特殊用途,如__author__作为文档注释等
  • private函数或变量的作用,如:
def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public

安装第三方模块

1,pip安装与使用
(1)在Python中,安装第三方模块,是通过包管理工具pip完成的
(2)在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,下载https://bootstrap.pypa.io/get-pip.py,然后直接运行 python get-pip.py即可
(3)安装第三方库Pillow的命令是:

pip install Pillow

2,安装常用模块:推荐直接使用Anaconda
(1)官网下载:https://www.anaconda.com/products/distribution
(2)按流程安装,下图全选

image.png

(3)cmd打开运行命令框,activate base激活环境,进入Python

C:\Users\Alexia Lee>activate base

(base) C:\Users\Alexia Lee>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

3,模块搜索路径
(1)加载模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错
(2)默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

>>> import sys
>>> sys.path

(3)添加搜索目录

  • 方法一:暂时设置——直接修改sys.path,添加要搜索的目录:
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容