Python学习基础笔记七十——模块和库1
模块和库:
一个python代码文件就实现了功能。功能比较单一。
在企业中,项目开发的文件,可能有成百上千个。
不同的代码文件,实现了不同的功能模块,就像一块块积木一样。这些功能文件整合起来,实现一个完整的软件。
在python中,一个代码文件,也就是一个.py文件,我们也叫它一个模块(module)。
a.py 文件,我们称之为模块a。
b.py文件,我们称之为模块b。
模块就是代码文件的意思。
模块之间的调用:
那么代码模块之间是怎么互相联系的呢?
案例:输入总费用和聚餐人数,计算人均费用的功能。单独实现一个模块文件aa.py
fee = input('请输入午餐费用: ')
members = input('请输入聚餐人员姓名,以英文逗号,分隔:')memberlist = members.split(',')headcount = len(memberlist)avgfee = int(fee) / headcountprint(avgfee)
放到列表中,是为了得到人数。
但是,我们需要将每次账单记录到文件中,这样才能定期进行结算。
我们可以创建另外一个模块文件save.py, 在里面定义一个函数,该函数实现记录消费信息到文件的功能。
def savetofile(memberlist, avgfee):with open('record.txt', 'a', encoding='utf8') as f:recorditem = [f'{member}:{avgfee}' for member in memberlist]f.write(' | '.join(recorditem) + '\n')
聚餐人数的列表和平均费用。
a是文件的追加模式。
通过列表推导式,产生 人员列表:平均费用 这样的列表项。
然后还使用了|分隔符。
就这段代码,也有很多内容值得我们学习的。
现在aa.py和save.py两个模块文件。
方法一:
在aa.py里面通过import关键字导入模块save。
import save
导入save模块。模块文件对象。
导入后,save模块就成为模块aa中的一个变量,对应一个模块对象。
模块也是一个对象。
save.savetofile(memberlist, avgfee)
使用save模块中里面的savetofile函数。
到save模块找savetofile的名字,这个名字对应的是一个函数。
方法二:
还可以在aa.py里面通过from import 关键字导入其他模块里的标识符(或者是变量名或者是函数名等。)
from save import savetofile
导入之后,这些其他模块的变量名和函数名就称为模块aa 里面的变量名、函数名了。
这样,我们就可以直接使用它们了。
完整代码:
from save import savetofilefee = input('请输入午餐费用: ')
members = input('请输入聚餐人员姓名,以英文逗号,分隔:')memberlist = members.split(',')headcount = len(memberlist)avgfee = int(fee) / headcountprint(avgfee)savetofile(memberlist, avgfee)
一些技巧:
1)如果在一些模块文件中需要导入多个其他模块文件,可以分开写导入语句。
import aa
import bb
import cc
也可以一起导入:
import aa, bb, cc
2)如果我们要从1个模块中导入多个标识符:
from aa import func1, var1, func2, var2
3)如果到导入的1个模块中有很多个标识符:
from aa import *
通配符,把aa模块中所有可以导入的对象全部都导入了。
4)如果从两个模块中导入函数,恰好两个函数是同名的,那么我们可以使用别名。
from save import savetofile
from save2 import savetofile as savetofile2
当一个b模块从a模块导入了名字 var1 后,注意,b模块和a模块 是 各自有一个
名为 var1 的变量 , 而不是两个模块共享一个 名为 var1 的变量。
如果要在多个模块中共享同一个数据对象,并且这个数据对象的值将来可能会改变。
即使共享的只是一个数字或者字符串变量, 也应该放在一个值可以变动的对象类型中。 比如:列表, 或者后面要学习的 字典 和 自定义类型。
相关文章:

Python学习基础笔记七十——模块和库1
模块和库: 一个python代码文件就实现了功能。功能比较单一。 在企业中,项目开发的文件,可能有成百上千个。 不同的代码文件,实现了不同的功能模块,就像一块块积木一样。这些功能文件整合起来,实现一个完…...

SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)
SVA提供了几个内建的函数来检查一些最常用的设计条件。 $onehot(expression)—检验表达式满足“one-hot”,换句话说,就是在任意给定的时钟沿,表达式只有一位为高。 $onehot0( expression)—检验表达式满足“ zero one-hot”,换句话说,就是在任意给定…...
正则表达式(自用)
正则表达式 符号概述 分类符号用法示例元字符^以 ***开头$以 ***结尾d匹配数字s匹配任意的空白符.匹配除换行符以外的任意字符w匹配字母或数字或下划线或汉字\转义重复限定符*次数,至少一次至少1次?0次 或者 1次{n}{n,}{n,m}重复n次;n活更多次&#x…...
大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和
题目描述与示例 题目描述 小欧拿到了一个数组,她有q次操作,每次操作修改一个元素。小欧希望每次修改后得到当前数组所有元素之和。你能帮帮她吗? 输入描述 第一行输入两个正整数n和q,代表数组的大小和操作次数。 第二行输入n…...
Python括号匹配问题
给定一个只包含小写字母的字符串,判断该字符串中的括号是否闭合,如果每个左括号都有对应的右括号,并且括号的嵌套顺序正确,那么括号就能正确闭合。 否则,括号不能正确闭合,字符串中括号仅限于 "("…...

微信小程序备案内容常见问题汇总
一、备案时间点 自2023年09月01日起,新的微信小程序,必须备案后才能上架; 在2024年03月31日前,所有小程序都必须完成备案; 于2024年04月01日起,对未备案小程序进行清退处理。 微信小程序备案系统已于9月4日上线。 二、备案流程 [找备案入口]–[填主体信息]–[填小程…...

无人机新手防炸飞行技巧
不要在室内飞行,容易撞墙。起飞前设置好避障和返航模式。使用模拟器熟练掌握操控。选择开阔环境目视起飞。使用低速档平稳飞行。合理使用避障功能,不要盲目依赖。使用九宫格避障法。留意电量,及时返航。极低电量时放弃强行返航。飞行后及时为电池充电保养。...
webrtc opus 音频编码支持SILK和CELT模式
SILK CELT是指将SILK编解码器和CELT编解码器结合在一起的混合音频编码方案。 SILK(Super-wideband audio coding)是一种低延迟的音频编解码器,用于实时的语音通信。它提供高质量的音频传输,并且适用于各种比特率和带宽条件。SILK…...

掌握Python爬虫实现网站关键词扩展提升曝光率
目录 一、关键词优化的重要性 二、关键词优化的基本方法 1、选择与网站内容相关的关键词 2、控制关键词的密度和分布 3、关键词的层次布局 三、Python爬虫实现网站关键词扩展 1、确定目标网站 2、分析目标网站的HTML结构 3、编写Python爬虫代码 4、分析爬取到的关键词…...
ajax实现原理
网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面。这使得程序能够更快地回应用户的操作 Ajax的实现原理 创建Ajax对象 传入请求方式和请求地址 发送请求 获取服务器与客户端的响应数据 xhr.responseText // 1…...
图G的拉普拉斯矩阵为什么由L=D-A定义
图G的拉普拉斯矩阵由LD-A定义,其中D是度矩阵(Degree Matrix),A是邻接矩阵(Adjacency Matrix)。这种定义方式有以下原因: 1. 度矩阵D:度矩阵是一个对角矩阵,其对角线上的…...

实习项目遇到的bug
问题1: 大概是因为没设置ts类型,它查不到的问题,不定义的话加上问号,加上可选链就不会报错了 {{bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.replace(T, )? bizEquipmentInfo.lastUnlockingVO?.lastUnlockingTime.r…...
python selenium下载一个合适的chromedriver.exe(稳定版本)
可以使用该脚本来进行下载: 下载前需要安装如下的依赖 requests2.27.1 selenium4.14.0 webdriver_manager4.0.1下载脚本代码: import json import subprocess import shutil import os import time import zipfileimport requests from webdriver_mana…...

RabbitMQ从0到1完整学习笔记一:《基础篇》
目录 启篇 一、初识MQ 1.1 同步调用 1.2异步调用 1.3 技术选型 二、RabbitMQ 架构 2.2 收发消息 2.2.1 交换机 2.2.2 队列 2.2.3 绑定关系 2.2.4 发送消息 2.3 数据隔离 2.3.1 用户管理 2.3.2 virtual host 三、SpringAMQP 3.1 案例入门 3.1.1 导入依赖 3.1.2 消息发送 3.1.2 消…...
什么是时间冒泡?
时间冒泡是指当一个元素触发一个事件时,事件会像水泡一样,从触发元素向它的所有父节点传播,一直到根节点都会接收到此事件 1。如果父元素中注册了相应的事件处理函数,那么尽管事件在子节点触发的,在父元素上注册的事件…...

Go语言入门心法(三): 接口
Go语言入门心法(一) Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 一:go语言接口认知 Go语言中接口认知升维:解决人生问题的自我引导法则: 复盘思维|结构化思维|金字塔思维|体系化思维|系统化思维 面向对象编程(oop)三大特性: 封装,继承,多态 Go语言中,可…...
leetcode:210. 课程表 II
课程表 II 提示 中等 889 相关企业 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学习课程…...
[MT8766][Android12] 使用谷歌LPA实现ESIM功能的流程
文章目录 开发平台基本信息问题描述实现流程 其他问题 开发平台基本信息 芯片: MT8766 版本: Android 12 kernel: msm-4.19 问题描述 客户需要我们设备支持ESIM功能,5月份的时候在高通6125上面预研过ESIM功能,当时ESIM供应商是Links field,…...

MyBatis-Plus为简化开发而生
简介 MyBatis-Plus 简称 MP是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 他们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。 特性 无…...

【翻译】Efficient Data Loader for Fast Sampling-Based GNN Training on Large Graphs
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 此内容为机器翻译的结果,若有异议的地方,建议查看原文。 机器翻译的一些注意点,比如: 纪元、时代 > epoch工人 > worker火车、培训、训练师 > train Effic…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...