编程之路:初识模块

模块的定义

模块就是一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module。

常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。

在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 

1 使用python编写的.py文件

2 已被编译为共享库或DLL的C或C++扩展

3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

4 使用C编写并链接到python解释器的内置模块

ps:如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

使用模块

import 导入模块

import spam

模块举例:

#spam.py
print(‘from the spam.py‘)

money=1000

def read1():
print(‘spam模块:‘,money)

def read2():
print(‘spam模块‘)
read1()

def change():
global money
money=0

  

结合笔记阅读

首次导入模块发生的三件事

1.创建一个模块的名称空间

2.执行模块对应文件,将产生的名字存放于1中的名称空间

3.在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀

#模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下 

#test.py
import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次‘from the spam.py‘,当然其他的顶级代码也都被执行了,只不过没有显示效果.
import spam
import spam
import spam

‘‘‘
执行结果:
from the spam.py
‘‘‘

  

模块起别名

import spam as sm

print(sm.money)

sm.read1( )

在一行导入多个模块(不推荐使用)

import spam,mysql,oracle

推荐写成多行

import spam

import mysql

import orade

from...import...的使用

#from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置

#大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

可以使用__all__来控制*(用来发布新版本),在spam.py中新增一行

__all__=[‘money‘,‘read1‘] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

py文件的两种用途

#编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用

#python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:__name__ 等于‘__main__‘
    当文件被当做模块导入时:__name__等于模块名

#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __name__ == ‘__main__‘:

  

模块查找路径

1.内存中已经加载的模块

2.内置模块

3.sys.path路径中包含的模块

搜索路径:
当一个命名为spam的模块被导入时
    解释器首先会从内建模块中寻找该名字
    找不到,则去sys.path中找该名字

sys.path从以下位置初始化
    1 执行文件所在的当前目录
    2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样)
    3 依赖安装时默认指定的

注意:在支持软连接的文件系统中,执行脚本所在的目录是在软连接之后被计算的,换句话说,包含软连接的目录不会被添加到模块的搜索路径中

在初始化后,我们也可以在python程序中修改sys.path,执行文件所在的路径默认是sys.path的第一个目录,在所有标准库路径的前面。这意味着,当前目录是优先于标准库目录的,需要强调的是:我们自定义的模块名不要跟python标准库的模块名重复,除非你是故意的,傻叉。

  

原文地址:https://www.cnblogs.com/taostaryu/p/8708769.html

时间: 2024-10-07 14:13:53

编程之路:初识模块的相关文章

服务器编程之路:进无止境(下)

(接上文) 为了找到第二个命题的解决方法,我们可以再回过头来看看本文中第一版的服务器程序.前面也说了,第一版程序的问题在于,一条线程服务一个连接,而OS切换线程的开销很大,所以造成性能上不去.但第一版程序绝对是愉快的顺序编程.如果我们想保留顺序编程,那应该怎么克服性能方面的缺陷呢? 问题被直接导向为:既然OS调度线程很吃力,那是否存在一种"用户态线程",由程序自己调度,让OS一边玩儿去? 先抛出答案,所谓的"用户态线程",我们一般的实现就是"协程(coro

编程之路:MySql系列之初识

数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题. 很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题...... 1.程序所有的组件就不可能运行在一台机器上 #因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的

网络编程之socketserver初识

Server #!/usr/bin/env python # @Author : "Wjl" # @Date : 2017/12/22 # @Time : 11:07 # @SoftWare : PyCharm # @File : Server端并发聊天_Server.py import socketserver """ socketserver模块是python为我们写好的一个封装了网络操作相关的模块 比我们自己手写socket方便 "&quo

ZSTU我的编程之路

浙江理工大学我的编程之路答案 语言:C/C++ 推荐编译器:Dev-C++ / CodeBlocks 严禁直接复制提交 作弊行为将会被ACM校队禁止入队 作者:JokerNoCry 1000: 送分题-A+B Problem #include <iostream> using namespace std; int main (){ int a,b; cin>>a>>b; cout<<a+b; } 零基础学C/C++ oj 题目1001--1199 1001:

Objective-C之父Brad Cox访谈:我的编程之路

Objective-C是苹果Mac OS X 上开发的首选语言,也正因为如此促就了它的辉煌.日前,作者Dave Dribin采访了Objective-C之父Brad Cox,一起来了解下这位大神级人物,是如何看待他的编程之路的. 众所周知,Brad Cox与Tom Love一起创造了iOS/MAC平台的首选开发语言Objective-C.构建于C语言之上的Objective-C其理念来自于公认的第二个面向对象的程序设计语言和第一个真正的集成开发环境的Smalltalk.日前,原文作者Dave D

转:PHP并发IO编程之路

并发IO问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接Fork进程,到Worker进程池/线程池,到现在的异步IO.协程.PHP程序员因为有强大的LAMP框架,对这类底层方面的知识知之甚少,本文目的就是详细介绍PHP进行并发IO编程的各种尝试,最后再介绍Swoole的使用,深入浅出全面解析并发IO问题. 多进程/多线程同步阻塞 最早的服务器端程序都是通过多进程.多线程来解决并发IO的问题.进程模型出现的最早,从Unix系统诞生就开始有了进程的概念.最早的服务器端程序一般都是Accept

前端编程之路

前言:本人作为一个前端小白,梳理一下这段时间开发前端一个页面的过程,希望对自己起到备忘并思考的作用,希望我的经验对于别人也有一点帮助的作用.由于本文碎碎念的部分过长,导致本文过长.还请读者见谅.-更新中(更新周期大概还会持续一个月) 前端框架 现如今,前端框架也越来越多了,比如ember,angular,以及这里要说到的vuejs..下面的内容首先要介绍vue.js的原理. Vue.js ? 原理 vue.js是一个 MVVM 前端框架,(Model / View / ViewModel) 这里

PHP并发IO编程之路

并发IO问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接Fork进程,到Worker进程池/线程池,到现在的异步IO.协程.PHP程序员因为有强大的LAMP框架,对这类底层方面的知识知之甚少,本文目的就是详细介绍PHP进行并发IO编程的各种尝试,最后再介绍Swoole的使用,深入浅出全面解析并发IO问题. 多进程/多线程同步阻塞 最早的服务器端程序都是通过多进程.多线程来解决并发IO的问题.进程模型出现的最早,从Unix系统诞生就开始有了进程的概念.最早的服务器端程序一般都是Accept

聊聊我的高效编程之路

林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:在程序开发过程中.一些IDE的配置.经常使用代类的积累以及经常使用框架的使用. 能帮助我们迅速写好代码,高速定位错误.同一时候,又有利于我们高速构造和部署,以及进行兴许的迭代开发. 文件夹: 一.IDE配置篇 二.规范project篇 三.经常使用代码篇 四.经常使用框架篇 五.其它工具 一.IDE配置篇 平时开发由于是选用Eclipse,所以在配置上假设一開始就配置好的话,开发的过