学习Python的day.14

news2024/11/25 10:57:12

模块学习

什么是模块:
打开Python解释器,定义了data = 1, 然后去访问data是可以访问到的;关闭Python解释器,再打开,再去访问data,访问不到了。

假设我有1000行的代码,在python解释器中写了,关闭了之后,那意味着我这1000行代码就消失了。

出现了一个脚本的东西,或者认为使用一个文件来记录你写的代码。因为文件是保存在磁盘中,打开或者关闭,文件它依然存在,所以里边的内容也依然存在。

在Python中指的就是一个.py文件, 来记录你写的代码,你把代码放入文件中,他就不会消失了。 

模块的定义: 一个Python文件就是一个模块。
如果你的模块内容过多,你可以把这个模块(.py)分割成若干模块。

重要的点:
(1)什么是模块: 一个python文件(.py)就是一个模块
(2)如果一个模块里边的代码过长,可以将这个模块按照一定的规则划分成若干模块,一般的规则,就是按功能划分
(3)如果在其他模块想要使用另一个的功能(变量,函数,类),可以去导入模块,导入模块的好处就是避免代码的重复

如何去导入模块:

import module_name
# 这种形式:导入这个module_name的全部内容

from module_name import 局部内容(变量, 函数, 类)
# 这种形式:导入的是Module_name的局部内容

from test_module import data, data2
# 导入多个局部内容时使用逗号分隔

你的被导入模块和你需要导入的模块,必须位于同一个级别,同一个级别你可以把他想象成同一级别的目录
重命名:as

from module_name import 局部内容 as newname
# 示例
from test_module import data as d
#就是将导入的局部内容进行改名
from module_name import *: * 代表的是所有的意思

这种方式会导入所有不以下划线(_)开头的名称,注意:大多数情况下,不要用这个功能

模块中的内容:

模块包含可执行语句及函数定义,导入模块的时候:其实就是去执行我们test_module.py中的代码,你在哪里导入就在哪里执行, 所以一般模块导入的位置,就放在.py文件的顶部

如何去调用模块中变量,函数,类:
1、将整个文件引入

import 文件名

文件名.函数名()/文件名.类名

通过这种方法可以运行另外一个文件里的函数

2、只引入某个文件中的一个类/函数/变量

需要从某个文件中引入多个函数或变量是,用逗号隔开即可

from 文件名 import 函数名,类名,变量名

代码示例:

test_module.py文件

data = 1
data2 = 2
print("This is test_module")

# 我在运行test_module.py的时候他也等于
# __name__ == __main__
print("test_module: __name__=", __name__)

if __name__ == '__main__':
    print("only test_module is main")

test.py文件

import test_module

print(test_module.data)
print(test_module.data2)
data3 = "module_learning"
print("This is my module")
print(data3)
from test_module import data as d, data2 as d2

print(d)
print(d2)

运行结果:

调用test_module.py,就是直接把test_module.py运行一遍

__name__:是python解释器内置的一个变量,可以直接去使用,如果当前的模块是主模块(你自己运行的模块:python.exe 模块名.py),就是__name__ == __main__,如果不是主模块的话,就是__name__ == 模块名

例: 在module_learning导入了test_module模块
    (1)在test_module中打印了__name__ 
    (2)在module_learning中也打印了__name__
    (3)然后去运行module_learning,也意味着我们的module_learning为主模块
    (4)在test_module中打印出来__name__ == test_module
    (5)在module_learning中打印了__name__ == __main__

常用的模块:

print()
id()
input()
# 上面的几个方法不需要导入任何模块,可以直接去使用,这些东西存在builtins.py这个文件(模块),
builitins.py:

Built-in functions, exceptions, and other objects.:内建了函数, 异常和一些其他的对象,有些是python内置提前预设的,不需要我们导入。

包:

什么是包?
新建一个包之后:包中包含了一个__init__.py的一个文件,新建一个文件夹:是不包含__init__.py的,Python 只把含 __init__.py 文件的目录当成包

__init__.py的作用:init -> initial:是初始化的意思,最简情况下,__init__.py 只是一个空文件,该文件也可以执行包的初始化代码,或设置 __all__ 变量

包的功能:提高检索模块的效率,让我们的模块层次化分类显示,提高可读性

包的概念:
包是一种用“点式模块名”构造 Python 模块命名空间的方法,针对模块来说的: 管理模块的命名空间 -> 包(package)
命名空间:

在python中,一个命名空间是一个容器,容器内的元素是能映射到对象的名称。多个命名空间相互独立,允许不同命名空间有相同的名称。

有了命名空间之后如何去访问模块呢?
命名空间.模块名
导入:
import 命名空间.module_name
from 命名空间 import Module_name
from 命名空间.module_name import 局部内容

import package(包).module_name
from package(包) import Module_name
from package(包).module_name import 局部内容

# from test_package.package_module1 import data
# from test_package import package_module1
import test_package.package_module1
print(test_package.package_module1.data)

常用的模块:
sys:python解释器相关
os:operation system 和操作系统相关的
random:随机数
time:时间
json:和json数据格式相关的

import sys
# 带v的意思: variable: 变量
print(sys.platform)  #系统所在的平台是win32
print(sys.version)   # python解释器的版本
print(sys.modules)   # 当前有哪些模块

sys.path: 里面存放的是搜索模块的路径:
假设你导入 spam 模块时,解释器首先查找名为 spam 的内置模块;如果没找到,解释器再从 sys.path 变量中的目录列表里查找 spam.py 文件。
sys.path 初始化时包含以下位置:
    输入脚本的目录(或未指定文件时的当前目录)。
    PYTHONPATH (目录列表,与 shell 变量 PATH 的语法一样)。
    The installation-dependent default 
['D:\\lwz_data\\openlab\\20211010Python_code',
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\python39.zip',
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\DLLs', 
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\lib', 
 'E:\\learningSoftware\\pythonSoftware\\python_interpreter', 
'E:\\learningSoftware\\pythonSoftware\\python_interpreter\\lib\\site-packages'
, 'E:\\learningSoftware\\pythonSoftware\\PyCharm
 2018.3.7\\helpers\\pycharm_matplotlib_backend']

print(sys.path)      # python模块的搜索路径: 先后顺序的
print(sys.api_version) #1013
D:\>python sys_test.py 111 222
['sys_test.py', '111', '222']
sys_test.py 111 222

传入了三个参数: 第一个参数其实就是我们.py文件名,第二个参数是111, 第三个参数是222,我们将语句放在linux上去执行的时候,你就可以使用sys来判断你传入的参数

print(sys.argv) # 代表使用python.exe usual_module.py的时候传入的参数
                # 是一个列表
sys.exit(0) # 退出
# 退出码是0: 执行成功
# 退出码是1: 执行的时候遇到了错误
# 退出码是-1: 手动停止程序

random:随机数

import random

随机小数---random():
x in the interval [0, 1): 代表随机的数字在 0 =< x < 1

如果想输出其他随机小数是,要乘以倍数

random.random()*10


随机整数---randint(a, b):
Return random integer in range [a, b]: 返回一个随机整数:[a, b]
choice(seq):
Choose a random element from a non-empty sequence.
# 从不为空的序列中选择一个随机的元素
choices(self, population, weights=None, *, cum_weights=None, k=1)
Return a k sized list of population elements chosen with replacement
# 返回一个k大小的列表
# weights: 权重, 权重大的选中的几率高一些
# cum_weights: 累加权重
取样:def sample(self, population, k, *, counts=None):
Chooses k unique random elements from a population sequence or set
选择k个唯一的随机元素从取样的序列或者集合中
sample(['red', 'blue'], counts=[4, 2], k=5)==sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
def randrange(self, start, stop=None, step=1):
Choose a random item from range(start, stop[, step])
# 选择一个随机的条目从range()

代码示例:

import random
print(random.random())
print(random.random()*10)
print(random.randint(0, 100))
print(random.choice([4, 5, 6]))
print(random.choices([4, 5, 6, 7, 8], cum_weights=[1, 2, 3, 4, 5], k=2))
print(random.sample([4, 5, 6, 7, 8], k=2))
print(random.randrange(1, 10))
# for i in range(1, 10)

输出结果:

json:一种数据格式

现在在web中比较流行一种传输数据的方式
示例:在编程中,别人给你提供了一个接口:get_students_by_classno(classno),我们可以根据班级编号来获取学生信息,数据格式就可以是我们json格式,和我们字典比较像,分为两种:
第一种:将python对象,转换成json格式的数据
第二种:将json格式的数据,转换成python对象

代码示例:

import json
dict_data = {1: 2, 2: 3}
# json.loads()
data = json.dumps(dict_data)
# 把一个字典转换成一个json格式的字符串
print(data, type(data))
# 把一个json格式的字符串转换成一个python中的字典对象
dict_data2 = json.loads(data)
print(dict_data, type(dict_data))

输出结果:

time:和时间相关的

一个关于时间的模块,可以用于格式化时间

代码示例:

import time

print(time.localtime())
print(time.gmtime())
#1635564740.366917
data = time.time()
print(data)
time.sleep(2)
print(time.time() - data)
# 睡眠: 单位是秒
# time.sleep()
# time.gmtime()
print(time.timezone) # 东八区, UTC + 8

#-28800 =》 28800是一个秒数 =》 小时是8
# 指定一个时间格式然后去输出
#  strftime(format[, tuple]) -> string
#  输入的是一个a time tuple
print(time.strftime("%Y-%m-%d, %H:%M:%S, %j, %W, %w, %Z, %z", time.localtime()))
# time.asctime()
# 默认展示当前时间的格式:Sat Oct 30 11:43:32 2021
print(time.ctime())
# time.mktime()

输出结果:

 OS

主要是和操作系统进行交互,访问目录以及文件的操作

import os

# 输出当前系统的操作系统类型
print(os.name)
# 输出当前目录
print(os.curdir)

# 列出所有的文件和目录, 默认是输出当前工作路径下的所有文件
print(os.listdir())
#查看环境变量
print(os.environ)
#查看当前目录
print(os.getcwd())
#打印系统目录下的内容
print(os.system("dir"))

print(os.mkdir()) #创建目录
print(os.rmdir()) #删除目录

# 最常用的os模块中接口: 类似windows中的资源管理器: 创建文件,查看,删除
# 应用场景:列出某个目录下所有的文件

#查看命令帮助
help(os.listdir)

#输出当前工作目录
print(os.getcwd())

os.chdir("C:\\test")
print(os.getcwd())
print(os.listdir())
print(os.listdir("C:\\test"))

print(os.cpu_count())
# print(os.path)
# current directory: 当前的目录
print("*" * 80)
print(os.path.curdir)
# split: 分割: 分割前边的路径和最后一个文件或目录

print(os.path.split("C:\\test\\test2"))
# 合并两个路径 d: test => d:\test
print(os.path.join("C:\\test", "sys_test.py"))
# 判断你给的这个路径是否是一个目录
print(os.path.isdir("C:\\test\sys_test.py"))
# 判断你给定的路径是否是一个文件
print(os.path.isfile("C:\\test\sys_test.py"))
# absolute path: 绝对路径
print(os.path.abspath("."))
# 给定的路径是否存在
print(os.path.exists("C:\\20211010"))
# 目录名
print(os.path.dirname("C:\\test\sys_test.py"))
# 获取文件大小 4096B 单位一定是字节
print(os.path.getsize("C:\网络拓扑图"))

输出结果:

我这里没有utf-8编码导致一些乱码 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pv操作练习题

信号量解决五个哲学家吃通心面问题 题型一 有五个哲学家围坐在一圆桌旁&#xff0c;桌中央有盘通心面&#xff0c;每人面前有一只空盘于&#xff0c;每两人之间放一把叉子。每个哲学家思考、饥饿、然后吃通心面。为了吃面&#xff0c;每个哲学家必须获得两把叉子&#xff0c;…

【机器视觉1】坐标系定义

坐标系定义 1. 图像坐标系2. 摄像机坐标系3. 世界坐标系4. 三种坐标系间的转换4.1 摄像机坐标系与无畸变图像坐标系之间的变换4.2 世界坐标系与摄像机坐标系之间的变换4.3 世界坐标系与无畸变图像坐标系之间的变换 1. 图像坐标系 数字图像坐标系&#xff1a; O 0 − u v O_0-u…

【差分+操作】C. Helping the Nature

Problem - 1700C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始手玩了一下 如果不是高低高的形式&#xff0c;那么一定不能通过操作3把全部元素变成0 因此就是先把所有元素变成高低高的形式 但是低在什么地方不确定 因此考虑枚举中间低谷位置&#xff0c;O(1)计…

【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

软件测试岗,4轮成功拿下字节 Offer,面试题复盘(附答案)

一共经历了四轮面试&#xff1a;技术4面&#xff0b;HR面。 特整理出所涉及的全部知识点&#xff0c;并复盘了完整面试题及答案&#xff0c;分享给大家&#xff0c;希望能够帮到一些计划面试字节的朋友。 一、测试基础理论类 怎么编写案例?软件测试的两种方法测试结束的标准…

allegro查看板子元器件的pin脚总数

怎么在ALLEGRO里统计焊盘和包括芯片pin和阻容的pad&#xff1f; 板子要拿出去布&#xff0c;需要根据焊盘计费&#xff1f; 方法一&#xff1a; 在find里面只勾选pin&#xff0c;然后鼠标左键&#xff0c;选择全部的pin 再选择菜单Display–element&#xff0c;如下图&#x…

Vivado综合属性系列之三 RAM_STYLE

目录 一、前言 二、RAM_STYLE ​ ​2.1 工程代码 ​ ​2.2 参考资料 一、前言 ​ ​RAM英文全称为Random Access Memory&#xff0c;随机存取存储器&#xff0c;可以实现数据的快速随机读写&#xff0c;RAM可直接verilog代码编写&#xff0c;也可调用IP核。 二、RAM…

Nginx 安装配置

Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下&#xff0c;Nginx是Apache服务器不错的替代品。 Nginx 安装 系统平台&#xff1a;CentOS …

Java-Thread知识点汇总

什么是线程 记得小时候的电脑老是很卡,打开一个浏览器、游戏啥的老是卡死&#xff0c;关又关不掉&#xff0c;然后就会打开任务管理器&#xff0c;强制关闭它 我们可以看到&#xff0c;这个叫“进程”&#xff0c;简单理解一下&#xff0c;进程就是由&#xff08;一个或多个&am…

入河排污口设置论证报告书如何编制?入河排污口水质影响预测方法有哪些

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…

Bootstrap开发之——Bootstrap简介(01)

一 概述 Bootstrap概念学习前需要具备知识查阅Bootstrap文档Bootstrap各版本有什么不同 二 Bootstrap概念 Bootstrap是一个使用HTML、CSS和JavaScript框架的前端开发框架Bootstrap 是全球最受欢迎的前端框架&#xff0c;用于构建响应式、移动设备优先的网站简洁、直观、强悍的…

Linux-基础指令-3

时间相关的指令 date显示 date 指定格式显示时间&#xff1a; date %Y:%m:%d 例子&#xff1a; 而上述中的 %Y %m %d 等等这些中间可以用很多的符号来分割&#xff0c; 如&#xff1a;" - " " _ " " : " 等等这些都是可以的&#xff0c;但是…

5月份了,不会还有人没找到工作吧.....

前两天跟朋友感慨&#xff0c;去年的铜九铁十、裁员、疫情导致好多人都没拿到offer&#xff01;现在都已经5月了&#xff0c;金三银四都结束一段时间了。 金三银四都已经结束&#xff0c;大部分企业也招到了自己需要的人&#xff0c;但是我看我的读者们还是有很大一部分人在抱…

算法套路十六——DP求解最长递增子序列LIS

算法示例&#xff1a;LeetCode300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] …

品优购项目学习记录02-main主体盒子搭建,推荐模块

文章目录 一、main主体盒子搭建1.1 newsflash新闻快报模块1.1.1 news新闻模块1.1.2 lifeservice生活服务模块1.1.3 bargain模块 二、推荐模块 一、main主体盒子搭建 1.main盒子宽度为980像素&#xff0c;位置距离左边220px(margin-left)&#xff0c;给高度就不用清除浮动 2.mai…

桂院校园导航小程序 云开发项目 二次开发教程 1.0.1

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Guide 先 假装 大伙都成功安装了云开发项目&#xff0c;并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了&#xff0c;有提到 我的学校…

vue 引入图片的问题

文章目录 为什么使用require自己讲解实例 - src下 - img验证 实例 - public下 - 绝对路径 - img报错&#xff0c;其中 imgurl5、imgurl6 找不到资源&#xff01;个人猜想&#xff1a; 去掉 imgurl5、imgurl6 再次运行&#xff08;开发环境&#xff09;&#xff1a;去掉 imgurl5…

EF Core Build failed. Use dotnet build to see the errors.

Build failed. Use dotnet build to see the errors. 今天学习abp框架用到EF Code First时&#xff0c;报出上述错误。 在网上查了很多资料。 dotnet build D:\Practice\abp\SourceCode\BookStore\src\Acme.BookStore.EntityFrameworkCore\Acme.BookStore.EntityFrameworkCor…

Stable Diffusion webui安装使用

参考&#xff1a; https://stability.ai/blog/stable-diffusion-public-release https://github.com/AUTOMATIC1111/stable-diffusion-webui 安装&#xff08;6g显存&#xff09; 1、conda创建python 3.10.6环境 conda create -n stable-diffusion pythonpython 3.10.6 也安装…

【axios】axios的完整配置

注意&#xff1a;本文实例化为TS版 1、axios概念 axios 是一个基于 promise 封装的网络请求库&#xff0c;它是基于 原生XHR 进行二次封装&#xff0c;可以说是 XHR 的一个子集&#xff0c;而 XHR 又是 Ajax 的一个子集 特点 从浏览器中创建 XMLHttpRequests从 node.js 创建…