首页 > 编程语言 >模块化编程(二)

模块化编程(二)

时间:2024-07-01 10:00:34浏览次数:17  
标签:__ 语句 模块化 编程 导入 模块 print import

模块的导入

经常有这样一句话:“不要重复造轮子”,知道别人已经造好了轮子,并且轮子也好用,那就直接拿别人的轮子来用,此处的“模块导入”就是“拿别人的轮子过来”。前文提到模块化编程的好处之一就是“代码复用性高”。写好的模块可以被反复调用,模块的导入就是“在本模块中使用其它模块”。

写文章-CSDN创作中心icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/140068975

import语句导入

import语句基本格式如下

import 模块名
import 模块1,模块2...    # 导入多个模块
import 模块名 as 模块别名    # 导入模块并给导入的模块取个名字

import加载的模块分为4类:

  1. 使用Python编写的 .py 文件
  2. 已被编译为共享库或DLL的C或C++扩展
  3. 一组模块的包
  4. 使用C编写并链接到Python解释器的内置模块 

通过import语句实现导入和使用模块时,本质上是使用了内置函数 __import__(),Python解释器进行执行,最终会生成一个 module类 对象,这个对象就代表了被加载的模块,且被其引用。因此,我们通过import语句导入多个模块时,本质上也就是生成多个 module类对象,而给模块起个别名本质上就是新创建一个变量引用加载的模块对象。

注意:导入多个相同模块时,只有一行语句会生效,其他的都没用。

示例代码如下

import os.path

print(id(os.path))
print(type(os.path))

代码运行结果

1749657667760
<class 'module'>

Process finished with exit code 0

 from...import导入

基本语法格式如下

form 模块名 import 成员1,成员2[,...]    #导入要用的成员1,成员2[,...]
form 模块名 import *                   #导入一个模块中所有成员

注意:尽量避免 from 模块名 import * 这种写法,因为这会导入该模块中所有不是以下划线_开头的名字全都导入当前位置。因为模块中有很多属性,很有可能导入的属性和其他属性同名,从而发生命名冲突,而且代码可读性极差。

示例代码如下

from math import pi

print(pi)

代码运行结果

3.141592653589793

Process finished with exit code 0

import 语句 和 form...import语句的区别 

import 导入的是模块,from...import语句导入的是模块中的函数或类。在使用import语句导入的模块时要加 模块名,而在使用 from...import语句导入时则可以直接用函数或类名。

示例代码如下

首先定义一个Calculate.py文件,在文件中输入下面代码

"""一个简单的计算器"""

def add(*nums):
    total = 0
    for num in nums:
        total+=num
    print(f"计算的总和为:{total}")
    return total

def minus(a,b):
    print(f"{a}-{b}={a-b}")
    return a-b

class MyCalculate():
    def print_all(self,num):
        print(num)

再定义一个用于测试的 .py文件,输入下面代码

import Calculate

print(Calculate.add(1,2,3))
print(Calculate.minus(3,2))
------------------------------------------------------------------------
# 上面代码等价于下面代码
from Calculate import add,minus

print(add(1,2,3))
print(minus(3,2))

代码运行结果

计算的总和为:6
6
3-2=1
1

Process finished with exit code 0

import加载底层原理

__import__()动态导入

import语句本质上就是调用内置函数 __import__(),可以给 __import__()动态传递不同的参数值,就能导入不同的模块。

示例代码如下

s = "math"
m = __import__(s) #导入模块math并将其引用赋给m
print(m.sqrt(9))
print(m.pi)

代码运行结果

3.0
3.141592653589793

Process finished with exit code 0

注意:一般不建议使用 __import__(),因为它在Python2和Python3中有差异,可能会导致意外错误。

模块的加载问题

当导入一个模块时,模块中的代码都会被执行。不过,如果再次导入改模块,则不会再次执行。因为导入模块更多的时候需要的是模块中定义的变量、函数、对象等。因此,一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象。

重新加载

若有时候确实需要重新加载模块,可以用:importlib.reload()方法。

示例代码如下

import Calculate
import importlib

importlib.reload(Calculate)

标签:__,语句,模块化,编程,导入,模块,print,import
From: https://blog.csdn.net/2302_76708905/article/details/140091258

相关文章

  • “Java编程学习路线图:从新手到专家的全面指南“
    学习Java编程语言是一个系统化的过程,涉及多个阶段和技能点。下面是一个推荐的Java学习路线,包括一些关键的里程碑和相应的表情符号来表达学习过程中的情感体验。1.基础入门......
  • CUDA编程的注意事项和使用流程详解
    目录一、背景二、CUDA编程的基本概念 2.1、CUDA线程(Thread):2.2、线程块(Block):2.3、网格(Grid):2.4、内存模型:三、CUDA编程流程3.1.环境配置3.2.编写CUDA代码 3.2.1、初始化和分配内存3.2.2、数据传输3.2.3、内核函数(Kernel)调用3.2.4、结果传回主机3.2.5、释放资源......
  • 【粉丝福利社】Hello Cangjie!华为仓颉编程语言震撼发布!(文末送书-进行中)
    ......
  • 哪种编程语言最省电?编程质量与耗电多少有关?
    能量使用数据是否能告诉我们编程语言的质量?图片去年,来自葡萄牙三所不同大学的六名研究人员决定调查这个问题,最终发布了一篇题为《编程语言的能效》的论文。他们在运行用27种不同语言编写的10个编程问题的解决方案时,监测了每种语言使用的电量、速度和内存使用情况。图......
  • PHP 面向对象编程(OOP)入门指南
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程范式,通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言,支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法,并提供示例代码帮助理解。一、面向对象编程的基本概念1.1类和对象......
  • LINUX系统编程:多线程互斥
    目录1.铺垫2.线程锁接口的认识静态锁分配动态锁的分配互斥量的销毁互斥量加锁和解锁3.加锁版抢票4.互斥的底层实现1.铺垫先提一个小场景,有1000张票,现在有4个进程,这四个进程疯狂的去抢这1000张票,看看会发生什么呢?#include<iostream>#include<thread>#include......
  • Python基础之网络编程
    目录1网络编程1.1简介1.2socket()1.3TCP简单实例单向交互1.3.1服务端1.3.2客户端1.4TCP双向交互1.4.1服务端1.4.2客服端1.5UDP连接1.6PythonInternet模块1网络编程1.1简介Socket又称套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求,使主机间或者......
  • 算法的六种思想(97%的算法题都基于这六种编程思想)
    1、递归算法(RecursiveAlgorithm)递归算法是一种自我调用的算法。在解决问题时,它将问题拆分成更小的子问题,并通过调用自己来解决这些子问题。每个子问题又可以进一步拆分,直到达到基本情况,然后逐层返回结果,最终得到整个问题的解决方案。2、贪心算法(GreedyAlgorithm)贪心算......
  • Java Script-使用DOM编程实现移动坦克
    要求:实现:将坦克图片放在页面上:<imgid="mytank"src="./img/right.png"/>在css中设置坦克的初始位置以及页面背景:<styletype="text/css">    input{font-size:26px;margin-top:20px;}    body{background-image:url("./img/gra......
  • JavaScript第十二讲:DOM编程“创建,删除,替换,插入节点”
    目录1.创建节点2.删除节点3.替换节点4.插入节点使用appendChild()使用insertBefore()深入解析与注意事项1.创建节点在HTMLDOM中,我们通常使用JavaScript的document.createElement()方法来创建元素节点,使用document.createTextNode()方法来创建文本节点。示例......