python快速入门课堂笔记_Python 快速入门笔记(9):模块和包

本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12302882.html。

目录

一、模块

指定导入的符号列表

模块查找的路径

在模块中插入测试代码

二、包

一、模块

所有 python 程序(.py文件)都可以作为一个模块,例如:

# foo.py

class Foo (object):

def __init__(self):

print("Created a Foo object")

def foo():

print("foo() is called")

FOO = 123

# 测试使用 foo 模块

>>> from foo import * # 导入 foo 模块,即 foo.py 中的内容(注:不会导入以下划线开头的符号)

>>> f = Foo() # 创建 Foo 的实例

Created a Foo object

>>> foo() # 调用 foo.py 中的 foo() 函数

foo() is called

>>> FOO # 直接使用 foo.py 中的全局变量 FOO

123

1. 指定导入的符号列表

从前面可以看到,通过 import * 语句会导入所有(不是以下划线开头的)符号,通过 __all__ 可以限定这种方式导入的符号,例如:

# foo.py

__all__ = ['Foo', 'foo'] # 只导出类名 Foo 和函数 foo() 的符号

class Foo (object):

def __init__(self):

print("Created a Foo object")

def foo():

print("foo() is called")

FOO = 123 # FOO 未被导出

# 测试使用 foo 模块

>>> from foo import * # 导入 foo 模块,即 foo.py 中的内容(注:不会导入以下划线开头的符号)

>>> f = Foo() # 创建 Foo 的实例

Created a Foo object

>>> foo() # 调用 foo.py 中的 foo() 函数

foo() is called

>>> FOO # FOO 未被导出

Traceback (most recent call last):

File "", line 1, in

NameError: name 'FOO' is not defined

>>> foo.FOO # 只能以模块名限定的形式访问

123

2. 模块查找的路径

通过 sys.path 可以查看和配置 python 解释器查找模块的路径列表:

>>> import sys

>>> sys.path # 搜索路径列表

['', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs',

'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk',

'C:\\Python27', 'C:\\Python27\\lib\\site-packages']

>>> sys.path.append('C:\\tmp\\python') # 追加一条搜索路径

另一种更常见的办法是通过 PYTHONPATH 环境变量去配置模块查找路径,例如:

export PYTHONPATH=$PYTHONPATH:~/python

3. 在模块中插入测试代码

有时候我们需要为模块写一些测试代码,直接写入模块文件中方便修改,但是不希望 import 时执行,可以通过当前模块名(__name__)来判断当前文件是作为主文件还是模块文件使用的,例如:

# add.py

def add(a, b):

return a + b

# 测试代码,当且仅当直接执行 add.py 才会执行(通过 import 导入 add.py 文件不会执行 if 中的内容)

if __name__ == '__main__':

print "Testing add()"

assert add(1, 2) == 3

print "Passed"

二、包

Python 中的“包”不需要在代码中声明,而是以文件夹的形式存在,只需要在某个文件夹中创建一个 init.py 文件(可以为空文件)即可,然后放入其中的模块文件就属于这个包,例如:

# 目录结构

.

+-- foo # 目录名

| +-- __init__.py # 空文件,python 解释器看到它会认为当前目录是一个包

| +-- bar.py # 模块文件

+-- test.py # 测试文件

# bar.py 文件内容

def qux():

print("qux() is called")

# test.py 文件内容

from foo.bar import qux

qux() # qux() is called

另外,“包”本身也可以作为一个模块,模块内容写入相应的 __init__.py 文件中即可,例如修改上面的文件内容:

# __init__.py 文件内容

def quz():

print("quz() is called")

# test.py 文件内容修改如下

from foo import quz

quz() # quz() is called

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql中的dump,从mysql中dump数据到本地

方法一:使用mysqldump命令,如: mysqldump -h10.90.6.237 -uf_insplat2car_r -P3306 -pxxxxxxxxx nbmp tb_tag_log --skip-lock-tables --set-charset --where"origin_chance_no like nbcar%" > dump.sql注意此方法默认情况下会在…

百度:2020年十大科技趋势

来源:6G俱乐部图片来源:百度2019,关于科技的鲜活记忆,正在快速变成时间洪流的一部分,也变成了我们读懂未来的钥匙。过去一年中,多技术融合正在加快,AI开发的门槛在迅速降低,产业智能…

数据绑定和第一个AngularJS 应用

Hello 小朋友 一&#xff1a; <input ng-model"name" type"text" placeholder"Your Name"> <h1>Hello {{ name }}</h1> 二&#xff1a; <body ng-app"myApp"><div ng-controller"MyController"&…

python实现采样函数_python中resample函数实现重采样和降采样代码

函数原型resample(self, rule, howNone, axis0, fill_methodNone, closedNone, labelNone, convention‘start, kindNone, loffsetNone, limitNone, base0, onNone, levelNone)比较关键的是rule,closed,label下面会随着两个用法说明降采样对时间数据细粒度增大&#xff0c;可以…

美国计划让“人工智能”去搜寻外星人!

来源&#xff1a;科学解码据美国太空网近日报道&#xff0c;美国国家航空航天局&#xff08;NASA&#xff09;官员称&#xff0c;他们希望利用人工智能&#xff08;例如机器学习&#xff09;技术&#xff0c;分析大型望远镜等收集的数据&#xff0c;从而帮助搜寻外星生命&#…

python的进程线程和协程_python成长之路 :线程、进程和协程

python线程进程与线程的历史我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心&#xff0c;它承担计算机的所有任务。 操作系统是运行在硬件之上的软件&#xff0c;是计算机的管理者&#xff0c;它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有…

iOS事件的响应和传递机制

跟二狗子哥哥交流的时候&#xff0c;他总说我&#xff0c;说的过程太业余。故 好好学习整理一下。努力不那么业余。 一、事件的产生、传递、响应&#xff1a; 1、事件从父控件依次传递到子控件&#xff0c;寻找最合适的子控件View。 2、寻找最合适的View的底层实现&#xff0c;…

php 树状数组公式,PY个树状数组

树状数组比较简单&#xff0c;于是就挑它下手了...于是生活终于也对咱下手了...要讲的就两个东西&#xff0c;一个是开数组&#xff0c;全局变量写最前面&#xff0c;数组是这么开的&#xff1a; f[0 for i in range(500005)]另外一个就是 注意 split()还有一句就是咱发现 pyth…

三宝机器人怎么充电_巨人通力导致吉祥三宝+36号故障怪现象的又一因素

想必大家都有过这样的经历&#xff1a;在电梯故障频繁出现时&#xff0c;明明可以判断是哪里的问题&#xff0c;但事实却是让你感觉不可思议&#xff0c;并且排查过程颇为周折。今天和大家分享一下我经历的巨人通力GPS30K电梯出现的吉祥三宝故障的排查过程。下图为电梯控制柜铭…

《自然》展望2020年重大科学事件!中国有两个大计划安排上了

来源&#xff1a;科技日报图片来源&#xff1a;Nature官网&#xff08;不包括标注了来源的图片&#xff09;“千门万户曈曈日&#xff0c;总把新桃换旧符”&#xff01;在辞旧迎新之际&#xff0c;我们除了要埋头梳理过去一年的悲欢得失&#xff0c;也应抬头眺望新一年的星辰大…

discuz search.php修改,discuz程序如何将热门搜索修改为指向门户搜索的方法

站长朋友们使用discuz论坛程序建站&#xff0c;细心的站长朋友们发现首页右上角有个热门搜索功能。这个功能的主要作用就是可以让会员们第一时间搜索到本论坛内需要找到的帖子&#xff0c;这样做就给会员朋友们提供了很大的好处&#xff0c;不用再为了找到需要的帖子而大费周章…

vue aplayer 进度条无法拖动_Vue-rideo-player视频播放插件的使用

***** git项目地址&#xff1a; https://github.com/surmon-china/vue-video-player***** 参考文章&#xff1a; https://www.jianshu.com/p/532fc1d8c90c使用安装&#xff1a; npm install vue-video-player --save2. 在main.js入口文件中引入import VideoPlayer from vue-vid…

php流程控制作业题,php流程控制

一、get传值我们请求服务器下一步操作啊&#xff0c;都是用get进行传值&#xff0c;然后服务器用预定义变量数组$_GET&#xff0c;接受。二、流程控制1 三元运算符 ? :逻辑很简单&#xff0c;就是设置条件&#xff0c;条件成立就执行“&#xff1f;” 。条件不成立就执行”:…

JS中的call()和apply()方法(转)

转自&#xff1a;http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类&#xff1a; JS1、方法定义 call方法: 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象…

中国AI芯片产业发展白皮书:未来三年年均增长率超50%

来源&#xff1a;赛迪顾问《中国AI芯片产业发展白皮书》从AI芯片的定义及分类、发展过程与现状、应用机会、竞争格局、发展趋势等多角度全面剖析AI芯片的发展新态势、 技术演进及行业格局&#xff0c;旨在为业内相关企业把握行业发展动态、挖掘市场机遇&#xff0c;提供借鉴与参…

python队列怎么用_如何在Python中使用多处理队列? - python

我很难理解多处理队列如何在python上工作以及如何实现它。假设我有两个python模块&#xff0c;它们从共享文件中访问数据&#xff0c;我们将这两个模块称为writer和Reader。我的计划是让读取器和写入器都将请求放入两个单独的多处理队列中&#xff0c;然后让第三个进程将这些请…

php获取显示图书数据,php基于dom实现读取图书xml格式数据的方法

本文实例讲述了php基于dom实现读取图书xml格式数据的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;<?php $doc new DOMDocument();$doc->load( books.xml );$books $doc->getElementsByTagName( "book" );foreach( $books as $book ){$au…

codeforces problem 768B

这是第一篇博客&#xff1f;日志也行。。。codeforces problem 768B这个题做了很长时间--好几天吧&#xff0c;有空的时候就想怎么做。问题描述看 http://codeforces.com/problemset/problem/768/B看起来是个三叉树的题目。最开始我想用递归完成&#xff0c;遍历每一个节点&…

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源&#xff1a; IEEE电气电子工程师尽管大肆宣传&#xff0c;人工智能仍需数年时间才能显著提高经济生产力。2016年&#xff0c;总部位于伦敦的Alphabet&#xff08;也是谷歌的母公司&#xff09;的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…