预览

学python必会的12个模块_java

学python必会的12个模块_java_02

学python必会的12个模块_python_03

学python必会的12个模块_python_04

学python必会的12个模块_python_05

学python必会的12个模块_linux_06

学python必会的12个模块_python_07

学python必会的12个模块_java_08

学python必会的12个模块_机器学习_09

学python必会的12个模块_python_10

学python必会的12个模块_java_11

学python必会的12个模块_机器学习_12

学python必会的12个模块_python_13

   下载方式  

高清思维导图下载

关注下方公众号

回复:py12 

学python必会的12个模块_java_14

长按上方二维码即可关注

回复:py12领取

什么是模块

一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

import加载的模块分为四个通用类别

1 使用python编写的代码(.py文件)

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

3 包好一组模块的包

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

为何要使用模块?

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

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

学习python

​http://dida100.com/it/​

模块的使用

示例文件:自定义模块my_module.py,文件名my_module.py,模块名my_module

次导入模块my_module时会做三件事


  • 1.为源文件(my_module模块)创建新的名称空间,在my_module中定义的函数和方法若是使用到了global时访问的就是这个名称空间。


2.在新创建的命名空间中执行模块中包含的代码,见初始导入import my_module

In fact function definitions are also ‘statements’ that are ‘executed’; the execution of a module-level function definition enters the function name in the module’s global symbol table.
4 事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放入模块全局名称空间表,用globals()可以查看



3.创建名字my_module来引用该命名空间

这个名字和变量名没什么区别,都是‘第一类的’,且使用my_module.名字的方式可以访问my_module.py文件中定义的名字,my_module.名字与test.py中的名字来自两个完全不同的地方。



为模块名起别名,相当于m1=1;m2=m1

1 import my_module as sm

2 print(sm.money)

  • 示范用法一:有两中sql模块mysql和oracle,根据用户的输入,选择不同的sql功能
#mysql.py
  def sqlparse():
      print("from mysql sqlparse")
  #oracle.py
  def sqlparse():
      print("from oracle sqlparse")

  #test.py
  db_type=input(">>: ")
  if db_type =="mysql":
      import mysql as db
  elif db_type == "oracle":
      import oracle as db

  db.sqlparse()

示例用法1

  • 示范用法二:为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如
if file_format == "xml":
       import xmlreader as reader
  elif file_format =="csv":
       import csvreader as reader
  data=reader.read_date(filename)
在一行导入多个模块

1 import sys,os,re

from ... import...
  • 对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了、 1 from my_module import read1,read2这样在当前位置直接使用read1和read2就好了,执行时,仍然以my_module.py文件全局名称空间
#测试一:导入的函数read1,执行时仍然回到my_module.py中寻找全局变量money
  #demo.py
  from my_module import read1
  money=1000
  read1()

  执行结果:
  from the my_module.py
  spam->read1->money 1000
# 测试二:导入的函数read2,执行时需要调用read1(),仍然回到my_module.py中找read1()
# demo.py 
from my_module import read2 
def read1(): 
    print("==========") 
 read2()

执行结果:

from the my_module.py
  my_module->read2 calling read1
  my_module->read1->money 1000
  • 如果当前有重名read1或者read2,那么会有覆盖效果。
#测试三:导入的函数read1,被当前位置定义的read1覆盖掉了
  #demo.py
  from my_module import read1
  def read1():
      print("==========")
  read1()
 
  执行结果:
  from the my_module.py
  • 需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系,如下:
from my_module import money,read1
  money=100 #将当前位置的名字money绑定到了100
  print(money) #打印当前的名字
  read1() #读取my_module.py中的名字money,仍然为1000


  from the my_module.py
  my_module->read1->money 1000
  • 也支持as
from my_module import read1 as read
  • 也支持导入多行
from my_module import (read1,ead2, money)
from my_module import *

把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

from my_module import * #将模块my_module中所有的名字都导入到当前名称空间
  print(money)
  print(read1)
  print(read2)
  print(change)

执行结果:

from the my_module.py
  <function read1 at 0x1012e8158>
  <function read2 at 0x1012e81e0>
  <function change at 0x1012e8268>
模块搜索路径

  • 模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
  • 特别注意的是:我们自定义的模块名不应该与系统内置模块重名。
  • 详见博客

dir()函数

  • 内建函数dir是用来查找模块中定义的名字,返回一个有序字符串列表
import my_module
  dir(my_module)
  • 如果没有参数,dir()列举出当前定义的名字dir()不会列举出内建函数或者变量的名字,它们都被定义到了标准模块builtin中,可以列举出它们,
import builtins
  dir(builtins)

`

   下载方式  

高清思维导图下载

关注下方公众号

回复:py12 

学python必会的12个模块_java_15

长按上方二维码即可关注

回复:py12领取