【Python基础】模块化编程-包调用

文章详细介绍了Python中如何进行模块的导入和调用,包括在同一目录和不同目录下如何import其他文件的函数和类。此外,还提到了模块化的实践,例如创建功能模块如舵机模块,并展示了如何在不同层级的模块间进行交互。最后,给出了一个智能小车项目的例子,演示了如何整合不同的模块来实现特定功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


datitle: Python Module&&Invoking
date: 2020-05-12 00:16:58
img: https://gitee.com/github-25970295/blogImage/raw/master/img/woman-3219507__340.webp
categories: 编程语言
reprintPolicy: cc_by
cover: false
tags:

  • python

​ 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等,总之要操作其他文件中的代码,在java中,只要在同一个文件目录下,我们就不需要通过import导入,但是在Python中,我们就需要通过import来进行导入,这样我们才能应用其他文件中定义的函数和数据等代码。

1. Python 调用

1.1. 同一目录

调用函数

# A.py
def add(x,y):
	print("xxx")
	
# B.py
import A
A.add(1,2)

#或者
from A import add
add(1,2)

调用类

# A.py
class A:
    def __init__(self,xx,yy):
        self.x=xx
        self.y=yy
    def add(self):
        print("x和y的和为:%d"%(self.x+self.y))
        
# B.py
from A import A
a=A(2,3)
a.add()

#或者
import A
a=A.A(2,3)
a.add()

1.2. 不同目录

若不在同一目录,python查找不到,必须进行查找路径的设置,将模块所在的文件夹加入系统查找路径

注意: import 是从项目文件夹开始的

import sys
sys.path.append(‘a.py所在的路径’)
import a
a.func()

2. 模块调用

而一个package跟一个普通文件夹的区别在于,package的文件夹中多了一个__init__.py文件。换句话说,如果你在某个文件夹中添加了一个__init__.py文件,则python就认为这个文件夹是一个python中的package。

# 假设 文件目录如下
- mod_a
    __init__.py     # 模块文件夹内必须有此文件
    aaa.py
- mod_b
    __init__.py     # 模块文件夹内必须有此文件
    bbb.py
- ccc.py

2.1. 调用同级模块

import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # 扫除路径迷思的关键!
from mod_b.bbb import *

2.1. 调用上级模块

import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from ccc import *

3. 功能模块化编写

###################################################
#               智能小车1.0 -- 舵机模块
###################################################
 
import RPi.GPIO as GPIO
import time
class ServoModule:
    # 初始模块
    def __init__(self, PIN):
        print('Servo Module In Progress')
        GPIO.setmode(GPIO.BOARD)
        self.PIN = PIN
        #initial 是启动引脚设置初始 
    # 舵机左转
    def turnLeft(self):
        self.pwm = GPIO.PWM(self.PIN, 50)   
    # 舵机右转
    def turnRight(self):
        self.pwm = GPIO.PWM(self.PIN, 50)
        self.pwm.start(0)      
 
if __name__ == "__main__":
    try:
        # 19,21,23
        m = ServoModule(19)       
    except KeyboardInterrupt:
        pass
    GPIO.cleanup()
###################################################
#               智能小车1.0
###################################################
# 光敏传感器           红 黑 任意
# 超声波传感器-发送     红 黑  任意 * 2
# 超声波传感器-接收
# 红外避障传感器-左     红 黑  任意
# 红外避障传感器-右     红 黑  任意
# 无源蜂鸣器           红 黑   任意
# 寻迹传感器           红 黑   任意
# 七彩大灯R-G-B         黑 任意 * 3
# 超声波云台舵机-左右转   任意
# 摄像头云台舵机-左右转   红   黑   任意
# 摄像头云台舵机-上下转   红   黑   任意
# 左轮in1-in2         任意 * 2
# 右轮in1-in2         任意 * 2
 
# 接电:红 8
# 接地:黑 9
# 其他:17
 
import threading
import os
 
from PyCode.Modules.RGBLightModule import *
from PyCode.Modules.ServoModule import *
 
 
##----------小车对外提供的功能
class QQCar:
 
    def __init__(self):
        # 初始化智能小车使用控制脚--------------
        self.PIN_LIGHT = 8              # 01:光敏
        self.PIN_ULTRASON_TRIG = 11     # 02:超声波-发射
  
    # 超声波云台,右转
    def servoUltrasonicTurnRight(self):
        self.servoModule_U.turnRight()
 
    # 摄像头水平云台,左转
    def servoCameraHTurnLeft(self):
        self.servoModule_CH.turnLeft()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路途…

点滴记录

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值