本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p=6&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb

上节课学习本章总结,章节选择题,实战一:计算圆的面积和周长,实战二:定义学生类录入5个学生,实战三:使用面对对象思想实现乐队演奏,实战四:使用面向对象思想编写出租车和家用轿车类,本节课学习模块的简介及自定义模块,模块的导入,Python中的包,主程序运行,Python中常用的内置模块及random模块中常用函数的使用。

下面进入第十章(第一章是python的安装没有在博文中体现,这里标注的九是从第二章开始的),关于程序的模块,我认为是比较重要的一部分,因为后续写论文编写代码都是依靠这个框架搭建。

1.模块的简介及自定义模块

如何定义模块:

#模型的定义,命名这个文件名为my_info,因为模块名称必须为小写字母和下划线
#定义模块的变量
#定定义模块的函数
name='L'
def info():print(f'大家好我叫{name}')

2.模块的导入

两个调用方式如上。具体使用案例如下:

首先我们定义两个模块(两个python文件)

模块一my_info.py:

name='L'
def info():print(f'大家好我叫{name}')

模块二introduce.py:

name='K'
age=18
def info():print(f'姓名:{name},年龄:{age}')

 使用上面两个模块,导入:

#(1)调用模块的方法:import以后使用“模块名.函数名()”
import my_info
print(my_info.name)
my_info.info()#还可以“模块别名.函数名()”
import my_info as a
print(a.name)
a.info()#(2)from..import..
from my_info import name #导入的一个具体的变量的名称
from my_info import info #导入的一个具体的函数的名称
print(name) #此时不需要“模块名.”,直接使用变量名和函数名
info()#通配符,意思就是调用这个模块里面的所有内容
from my_info import *
print(name)
info()#同时导入多个模块,用逗号分割
import math,time,random

如果有两个模块的变量和函数名字一样,那么如何处理这种情况:

from my_info import *
from introduce import *
#导入模块中具有同名的变量和函数,后导入的会将之前导入的覆盖
info()#如果我既想使用info中的函数也想使用introduce的函数,也就是不想覆盖其中一个方案
#解决方案:使用import
import my_info
import introduce
#使用模块中的函数或变量时,模块名打点调用
my_info.info()
introduce.info()

运行结果如下:

姓名:K,年龄:18
大家好我叫L
姓名:K,年龄:18进程已结束,退出代码为 0

3.Python中的包

你也许经常从师兄师姐那里听到做科研就是“调包”,那么什么是调包?包又是个什么东西?

包的作用是避免模块名称相冲突的问题,一个包类似于电脑中一个文件夹,它只比文件夹多了一个叫做initpy的文件,将功能相似的模块放入一个包内从而方便模块的组织和管理。注意建立包的时候的名字必须是英文不允许出现汉字。

 可以看到chap10文件夹和名为admin的包的区别就是,包一旦创建就会有_init_.py这个文件。在编写包的时候可以编写这个_init_.py也可以不编写,比方说我们可以在_init_.py这个文件里编写下面这些内容:

print('Hello World!')
print('How are you?')

 选中admin这个包,单击右键选择新建python文件,比如我们命名为my_admin.py具体内容如下:

def info():print('大家好,我叫ysj,今年18岁')
name='ysj'

 在chap10这个文件中新建一个python文件,想办法能从包中调用模块,语法为“包名.模块名”或者“from 包名 import 模块名 as 别名”,还有“from 包名.模块名 import 函数/变量等”内容可以编写如下:

import admin.my_admin as a #包名.模块名 其中admin为包名,my_admin为模块名(模块就是那个对应的python文件)
a.info() #此时一定会先执行_init_的内容,而且是自动执行的print('-'*40)
from admin import my_admin as b #from 包名 import 模块名 as 别名
b.info()print('-'*40)
from admin.my_admin import info #from 包名.模块名 import 函数/变量等
info() #此时在使用info这个函数的时候直接调用名字即可,不需要说明哪一个模块from admin.my_admin import * #from 包名.模块名 import *
print(name)

运行结果如下:

Hello World!
How are you?
大家好,我叫ysj,今年18岁
----------------------------------------
大家好,我叫ysj,今年18岁
----------------------------------------
大家好,我叫ysj,今年18岁
ysj进程已结束,退出代码为 0

4.主程序运行

现在有两个模块model_a和model_b,前者的内容如下:

print('welcome to Beijing')
name='ysj'
print(name)

 model_b的内容如下:

#导入的代码
import model_a

此时执行model_b的代码输出的结果就是运行model_a的内容:

welcome to Beijing
ysj进程已结束,退出代码为 0

那么如果我们不想要执行model_a的内容,像是

if __name__ == '__main__':

只需要先打上main,然后回车main就会自动变成上面这一行。将model_a修改为如下内容:

# print('welcome to Beijing')
# name='ysj'
# print(name)
if __name__ == '__main__':print('welcome to Beijing')name='ysj'print(name)

 此时再运行model_b就不会再输出上面的内容,它阻止了全局变量的数据被输出,也就是说在被调用模块的时候,需要将不希望输出的内容放进if main结构(主程序代码)里面。

5.Python中常用的内置模块及random模块中常用函数的使用

 

注意这里的随机种子根据这个数字产生特定的数字,规定好了随机种子不管在什么电脑上都能产生一样的数字。如果不规定随机种子就不能保证每一次产生的数字是一样的,如果想要不同的数字就要规定不同的随机种子数。

#导入
import random
#设置随机数种子
random.seed(10)
print(random.random()) #[0.0,1.0]
print(random.random()) #这两次结果是不一样
print('-'*40)
random.seed(10)
print(random.randint(1,100)) #[1,100]for i in range(10): #[m,n)步长为k,m-->start-->1,n-->stop-->10,k-->step-->print(random.randrange(1,10,3)) #12行代码执行了10次print(random.uniform(1,100)) #[a,b]随机小数lst=[i for i in range(1,11)]
print(random.choice(lst)) #lst是列表也是序列#随机的排序
random.shuffle(lst)
print(lst)
random.shuffle(lst) #必须写上这行要不然就会两行执行结果一样了
print(lst) #此时再执行一遍

运行结果如下:

0.5714025946899135
0.4288890546751146
----------------------------------------
74
1
4
4
7
1
1
4
4
4
7
81.25126013057475
1
[5, 4, 10, 7, 3, 2, 1, 6, 8, 9]
[3, 4, 5, 6, 8, 10, 7, 1, 2, 9]进程已结束,退出代码为 0

本节完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917449.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917449.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917449.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCL滤波器及其电容电流前馈有源阻尼设计软件【LCLAD_designer】

本文主要介绍针对阮新波著《LCL型并网逆变器的控制技术》书籍 第二章(LCL滤波器设计)及第五章(LCL型并网逆变器的电容电流反馈有源阻尼设计)开发的一款交互式软件【LCL&AD_designer】,开发平台MATLAB_R2022b/app d…

【Conda】配置Conda镜像源

Conda 镜像源配置指南 适用系统:Windows 10(含 Miniconda / Anaconda) & Linux(Ubuntu / CentOS / Debian 等)1. 为什么要设置镜像源 在中国大陆直接访问 repo.anaconda.com 经常遇到速度慢、连接超时、SSL 错误等…

八股取士--docker

基础概念类 1. 什么是Docker?它解决了什么问题? 解析: Docker是一个开源的容器化平台,用于开发、交付和运行应用程序。 主要解决的问题: 环境一致性:解决"在我机器上能跑"的问题资源利用率&#…

C++:STL中的栈和队列的适配器deque

学习完string类、容器vector和容器list,再去学习其他容器的学习成本就非常低,容器的使用方法都大差不差,而栈和队列的底层使用了适配器,去模拟实现就没有那么麻烦,适配器也是一种容器,但是这种容器兼备栈和…

9类主流数据库 - 帮你更好地进行数据库选型!

作者:唐叔在学习 专栏:数据库学习 标签:数据库选型、MySQL、Redis、MongoDB、大数据存储、NoSQL、数据库优化、数据架构、AI数据库 大家好,我是你们的老朋友唐叔!今天咱们来聊聊程序员吃饭的家伙之一 —— 数据库。在这…

推送本地项目到Gitee远程仓库

文章目录前言前面已加学习了下载gitee软件,网址在上一篇文章。在gitee创建账号与仓库。现在来学习如何讲本地项目推送到Gitee远程仓库一、流程总结前言 前面已加学习了下载gitee软件,网址在上一篇文章。在gitee创建账号与仓库。现在来学习如何讲本地项目…

CMake 命令行参数完全指南(5)

​**40. --version**​ ​解释​:显示CMake版本 ​示例​: cmake --version # 输出:cmake version 3.25.2​**41. --warn-uninitialized**​ ​解释​:警告未初始化的变量 ​适用场景​:检测脚本错误 ​示例​&#xf…

基于Python实现生产者—消费者分布式消息队列:构建高可用异步通信系统

深入剖析分布式消息队列的核心原理与Python实现,附完整架构设计和代码实现引言:分布式系统的通信基石在微服务架构和云原生应用普及的今天,服务间的异步通信成为系统设计的核心挑战。当单体应用拆分为数十个微服务后,服务间通信呈…

【大模型核心技术】Agent 理论与实战

一、基本概念 LLM 特性:擅长理解和生成文本,但采用 “一次性” 响应模式,本质上是无记忆的生成模型。Agent 本质:包含 LLM 的系统应用,具备自主规划、工具调用和环境反馈能力,是将 LLM 从 “聊天机器人” 升…

Maven - 依赖的生命周期详解

作者:唐叔在学习 专栏:唐叔的Java实践 标签:Maven依赖管理、Java项目构建、依赖传递性、Spring Boot依赖、Maven最佳实践、项目构建工具、依赖冲突解决、POM文件详解 文章目录一、开篇二、Maven依赖生命周期2.1 依赖声明阶段:POM文…

从零打造大语言模型--处理文本数据

从零打造大语言模型 第 1 章:处理文本数据 章节导读 在把文本投喂进 Transformer 之前,需要两步:① 将字符流切分成离散 Token;② 把 Token 映射成连续向量。 1.1 理解词嵌入(Word Embedding) 嵌入向量 一…

【Spring】Bean的生命周期,部分源码解释

文章目录Bean 的生命周期执行流程代码演示执行结果源码阅读AbstractAutowireCapableBeanFactorydoCreateBeaninitializeBeanBean 的生命周期 生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的声明周期 Bean 的声明周期分为以下 …

[spring-cloud: 服务发现]-源码解析

DiscoveryClient DiscoveryClient 接口定义了常见的服务发现操作,如获取服务实例、获取所有服务ID、验证客户端可用性等,通常用于 Eureka 或 Consul 等服务发现框架。 public interface DiscoveryClient extends Ordered {/*** Default order of the dis…

QML 基础语法与对象模型

QML (Qt Meta-Object Language) 是一种声明式语言,专为创建流畅的用户界面和应用程序逻辑而设计。作为 Qt 框架的一部分,QML 提供了简洁、直观的语法来描述 UI 组件及其交互方式。本文将深入解析 QML 的基础语法和对象模型。 一、QML 基础语法 1. 基本对…

HTTPS的概念和工作过程

一.HTTPS是什么HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层(SSL)HTTP协议内容都是按照文本的方式明文传输的,这就导致传输过程中可能出现被篡改的情况最著名的就是十多年前网络刚发展的时期,出现“…

Unity —— Android 应用构建与发布​

文章目录1 ​Gradle模板​​:了解Gradle模板的作用及使用方法,以增强对构建流程的控制。​2 ​Gradle模板变量​​:参考文档——自定义Gradle模板文件中可用的变量列表。2.1 修改Unity应用的Gradle工程文件2.1.1 通过Gradle模板文件2.1.2 导出…

【iOS】strong和copy工作流程探寻、OC属性关键字复习

文章目录前言strong和copy的区别为什么要用copy?什么时候用什么修饰?strong(ARC自动管理)strong修饰变量的底层流程图底层代码核心实现小结copy底层流程图对比与strong的关键不同之处内部调用关系(伪代码)小…

程序代码篇---多循环串口程序切换

上位机版(Python)要实现根据串口接收结果高效切换四个 while 循环函数,我们可以采用状态机模式,配合非阻塞串口读取来设计程序结构。这种方式可以实现快速切换,避免不必要的资源消耗。下面是一个高效的实现方案&#x…

rk3568上,实现ota,计算hash,验证签名,判断激活分区,并通过dd命令,写入对应AB分区

通过自定义升级程序&#xff0c;更直观的理解ota升级原理。 一、模拟计算hash&#xff0c;验证签名&#xff0c;判断激活分区&#xff0c;并通过dd命令&#xff0c;写入对应分区 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

数据分析—numpy库

numpy库NumPy 库全面指南NumPy (Numerical Python) 是 Python 科学计算的基础库&#xff0c;提供了高性能的多维数组对象和工具。以下是 NumPy 的核心功能和使用方法。一、安装与基础1. 安装 NumPypip install numpy2. 导入 NumPyimport numpy as np # 标准导入方式二、数组创建…