学习python课程第十五天

一. 什么是模块?

模块是一组相关功能的集合体,一个模块其实就是一个py文件,

python中的一个功能就是一个函数.

例如:mymodule.py 文件名为 mymodule.py 模块名为 mymodule

模块也分为四类:

1,自定义模块

  创建一个py文件.把一堆函数写进去就是一个模块.

2.c语言编写并连接到python解释器的内置模块

  time模块. time.sleep()功能 等.

  内置的模块能不能满足你所有的需求? 不可能. 所以你必然会自己定义模块

  这时候就会出现这样一个情况 对于同样一个功能 你需要自定义 我也自定义. 大家都自定义.这时候就有

  人跳出来. 说我写了一个最牛逼的,然后放到网上你们需要了自己下载使用. 这样的我们称之为第三方模块

  他其实也属于自定义模块.

3.编译为DLL的c c++扩展

  不需要知道什么意思.会用就行

4.一些模块组成的文件夹,成为包.

  无论是什么类别的模块使用方法是一样的.

  这其中内置与第三方的只要知道如何使用就行了.不需要知道怎么来的.

二. 为什么使用模块.

  好处在哪里?

1.减少编写重复代码.很多有现成的代码.直接拿来使用

  low么? no我们编写程序是为了创造价值,而不是作无意义的重复劳动

2.从文件界别组织代码. 使我们的代码更加清晰

三. 自定义模块

  我们已经知道一个py文件就是一个模块.所以自定义模块非常简单.

  案例:

    创建一个模块,为其创建几个功能.另外我们可以在模块中

    添加普通的py代码.我们也会被执行

    文件:spam.py

    print(‘from the spam.py‘)

    money = 100

    def func1():

      print(‘func1‘)

    def func2():

      print(‘func2‘)

    但是你想想,模块中应该执行代码么?

    不应该 模块是一个工具箱,提供功能才是工具箱该做的事情

四.使用模块

  使用关键字来导入模块

  import  模块名

  文件:模块的使用.py

  import spam.py

  现在我们有两个文件

  模块的使用.py 和 spam.py

  模块的使用.py 此时作为执行文件

  spam.py此时作为被导入的模块

  

  执行模块的使用.py

  我们可以看到输出了

  ‘from the spam,py‘

四.1 在我们执行import spam 时到底发生了什么?

  很显然执行了spam.py

  我们之前说过一旦执行一个py文件 会产生一个该文件的全局命名空间

  然后将这个文件中的名称和值得对应关系都放到空间中

  总结 : 在执行import时, 做了三件事情

  1.创建一个命名空间

  2.执行导入的py文件,将产生的名称放入名称空间

  3.在执行文件中产生一个姓的名称, 该名称指向被导入文件的命名空间

 简单的说其实就是得到了一个名称.这个名字指向被导入文件

 一旦有了这个名称,我们就可以通过这个名称找到对应的命名空间中的所有名称

  测试:

    执行:spam.func1()

    输出:‘func1‘

    执行:print(spam.money)

    输出:1000

    我们成功的访问到了spam模块中的内容

思考:

  在模块的使用.py文件中加入:

  import spam

  import spam

  import spam

  import spam

  问:‘from the spam‘输出了几次?

  答: 一次, 模块中的代码仅在首次导入时执行一次

四.2 执行文件与被导入文件的命名空间相互独立

  在spam.py文件中加入

  def func3():

    print(money)

  在模块的使用.py中加入

  money = 10000

  spam.func()

  输出结果为:100

  结论: 模块中代码的执行始终以当前文件的命名空间为准

四.3 import 语句的其他写法

  1. 取别名:

      语法. import xxx as xx

      作用: 简化书写

  2.导入多个模块:

      语法: import spam,mysql,oracle

      作用: 简化书写

  3.导入模块中名字到当前文件的命名空间

      语法: from xxx import xxx,xxx...

      作用: 简化书写 今后在使用名字时 不需要再加前缀. 直接使用即可

           除了书写方式不同 其他特性完全一致

      注意: 可能与当前名称空间中的名称冲突

          如果冲突则按照就近查找的原则

  4. from 取别名

      from xxx import xxx as x

  5.from 导入多个

      from xx import xxx,xx

  6.导入所有

      from xx import *

      注意: 该方式会导入模块中所有的命名空间到当前命名空间

      如果模块中名称非常多的话,极易产生名称冲突 使用的时候要小心

      延伸:

        模块中可以控制 * 能被导入的名字

        在模块文件中加入

        __all__=[‘名字1‘,‘名字2‘]

        注意值是字符串类型

五.python文件的两种执行方式

  1.作为可执行文件

  2.作为模块被导入

  作为模块开发者经常需要对自己的功能进行测试

  但是这些测试代码在模块被使用者导入的时候不应该执行

  这时我们可以使用一个__name__来判断当前文件是作为执行文件还是模块导入

测试:

  spam.py模块中加入

  print(__name__)

  运行模块文件

  输入:‘__main__‘

  在模块的使用.py文件中导入spam

  运行模块的使用.py

  输出:‘spam‘

总结: 作为执行文件运行时__name__的值为__main__

  作为模块被导入时__name__的值为模块名

于是我们可以用一下代码来判断运行状态

  if __name__ == ‘__main__‘:

    print(‘作为执行文件巡行了!‘)

  else:

    print(‘作为模块导入了!‘)

六. 模块的搜索路径(重点)

  回顾 导入模块时发生了什么?

  执行了导入的py文件

  要执行必然要先找到这个文件 那到底从哪里去找这个文件呢?

  我们之前之所以能够找到是因为你刚好把你要导入的文件和执行文件放一起了

  

查找的顺序:

  内存中已加载的模块->> 内置模块->>sys.path中的模块

  创建新文件 模块搜索路径.py

  模块搜索路径.py

  import sys

  print(sys.pash)

  详解:

    其中项目目录其实是不存在的.这里是因为pycharm自己给加上的.但是我们的执行环境不可能只是

    pycharm

    所以在开发时要当他不存在

  注意:

    不要将自己的模块名称和内置的或第三方的冲突

    对于内存 和 内置的路径. 我们无法进行操作

    唯一 一个可以操作的就是sys.path

  结论:

    在我们今后的项目开发中 如果需要的模块不在执行文件目录中. 需要手动加入到sys.path以确保程

    序可以正确执行

  写法:

    import sys

    sys,path.append(‘你的模块路径‘)

  

                                                                                                                             

原文地址:https://www.cnblogs.com/lvyipin1/p/9774792.html

时间: 2024-11-01 16:48:11

学习python课程第十五天的相关文章

学习python课程第十九天

一.   各种序列化模块 一.  pickle 模块 pickle是一个用来序列化的模块 序列化是什么? 指的是将内存中的数据结构转化为一种中间格式, 并储存到硬盘上, 反序列化? 将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化? 就是为了将数据持久储存 之前学过的文件也能完成持久化存储, 但是操作起来非常麻烦 pickle模块的主要功能 dump   load   dumps   loads dump 是序列化.  load是反序列化 不带s的是帮你封装好 write 和

学习python课程第十六天

一.    包: 1.什么是包: 包就是含有一个__init__.py文件的文件夹,它把所有模块都给组织起来. 强调:在python3中,即使没有__init__.py文件,也不会报错.但是在python2中就会报错. 创建包的目的不是为了运行, 而是被导入使用. 记住, 包只是模块的一种形式而已.包的本质就是一种模块. 2.为何要使用包: 1.包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来. 随着功能越写越多.我们无法将所有功能都放到一个文件中.于是我们使用模块去组织功能, 而

学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)

06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是不能减少他的程序内容,他的原来程序不变只能增不能减少,然后返回装饰好的子函数,再全局定义一个变量名与要装饰的函数名相同名字,并且将装饰后的函数调用赋予改变量. 1.简单的例子(无参函数) 如 #有个函数f1 def f1(): print('nick machachong') #

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

【WPF学习】第三十五章 资源字典

原文:[WPF学习]第三十五章 资源字典 如果希望在多个项目之间共享资源,可创建资源字典.资源字典只是XAML文档,除了存储希望使用的资源外,不做其他任何事情. 一.创建资源字典 下面是一个资源字典示例,它包含一个资源: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/wi

孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

(完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装. 今天成功了解并实测完成了向mongoDB数据库中删除记录的操作,详细学习过程见屏幕录屏学习过程. 一.首先解决了昨天没有解决的修改记录的问题 今天花了一定的时间认真看相关资料,发现在修改记录时: [方法一]: 集合对象.update({查询记录的筛选条件字典},{要修改的字段的信息},True) 这种方法与下面的方法结果 是

学习进度条(十五周)

本周主要是对于团队开发项目的修改完善.   第十五周 所花时间(包括上课) 上课2小时,课后10小时 代码量(行) 200+ 博客量 2 了解到的知识点 服务器连接GET方法

学习进度条--第十五周

  第十五周 所花时间(包括上课时间) 4小时(包括上课2小时) 代码量(行) 70 博客量(篇) 1篇 了解到的知识点 软件的开发文档具有重要作用,书面计划是精确和可以沟通的. 软件开发中应及时解决遇到问题,不然容易造成不可挽回的错误.

Python学习笔记(三十五)struct

摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431955007656a66f831e208e4c189b8a9e9f3f25ba53000 Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换. struct的pack函数把任意数据类型变成bytes: >>> import struct >>> struc