包和常见模块

WhatsApp网页版扫码分析 扫码登录本质上是WhatsApp的多设备登录,设备之间可以独立运行,那么当我们首次通过WhatsApp扫码登录二维码时,到底发生了那些事情?交换了那些数据? 阅读详情

函数——>工具;模块——>工具箱;包——>工具库。在工具箱里放到是类似的工具,工具库里放着各种工具箱。

函数和模块的关系:模块是用来管理函数的。

模块和包的关系:包是用来管理模块的。

如何制作模块?如何创建包?

函数的本质:是可以调用的内置或自定义的程序;模块的本质:是py文件;包的本质是:文件夹。

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。而这样的一个py文件在Python中称为模块(Module)。

 包

什么是包

当一个项目中模块越来越多,维护和开发不是那么高效的时候,我们可以引入一种比模块更高级语法:包。

包是对相关功能的模块py文件的组织方式。

包可以理解为文件夹,更确切的说,是一个包含__init__文件的文件夹。

导入包的语法
  1. import 包名[.模块名 [as 别名]]

  2. from 包名 import 模块名 [as 别名]

  3. from 包名.模块名 import 成员名 [as 别名]

  4. from 包名 import * 相当于 import 包名[.模块名 [as 别名]]

案例:将上面案例中的cal .py文件放到utils包中管理,logger.py放到logger包中管理。

-- demo
   main.py  #执行文件
   -- m_log #包
   		__init__.py
      logger.py #存储在logger包中的一个模块
from m_log import logger
logger.get_logger() #调用了logger模块中的get_logger函数

模块

模块介绍

模块是组织代码的更高级形式,大大提高了代码的阅读性和可维护性。

模块一共3种:

  • 解释器内建模块

  • 第三方模块

  • 应用程序自定义模块

另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。

模块导入
# 方式1:导入一个模块
import 模块名
import 模块名 as 别名

# 方式2:导入多个模块
import (
   模块1
   模块2 
   )

import 模块1,模块2

# 方式3:导入成员变量, *为导入全部模块
from 模块名 import 成员变量
from 模块名 import *  = import 模块名

导入模块时会执行模块,多次导入只执行一次。

案例:  

cal.py
logger.py
main.py

# cal.py
def add(x,y):
    return x + y

def mul(x,y):
    return x * y

print('这是cal模块文件')

# logger.py
def get_logger():
    print('打印日志!')
    
print('这是logger模块文件')
# 全局导入与部分导入.py
import cal #导入了cal模块
import logger #导入了logger模块
# 注意:import导入模块,就好比是将模块中的代码执行了
from cal import mul #将cal模块中的mul成员进行导入


# 调用用了cal模块中的add函数
result = cal.add(1,2)
print(result)
c = mul(3,4)
print(c)

# 调用了logger模块中的get_logger函数
logger.get_logger()

注意:执行源文件的名字一定不要和模块的名字同名

全局导入和部分导入

# 全局导入。导入模块中全部函数(方法)
import logger  # (from logger import *)导入模块(表示当导入模块时,就是将导入的模块中的代码全部执行了一遍。)

ret = logger  # 应用cal模块里的add方法(本质上是调用模块cal里的add函数)
print(ret)  # <module 'logger' from 'D:\\study\\python\\……\\logger.py'>,返回一个 地址

# 部分导入。导入模块中某中方法(方法)
from cal import add  # 将cal模块中的add函数进行加载(导入),应用cal模块里的add方法(本质上是调用模块cal里的add函数),就只可以调用cal中的add函数,其他函数(方法)调用不成。

ret = add(3, 5)
print(ret)
__name__

__name__是python内置变量,存储的是当前模块名称。

对于很多编程语言来说,程序都必须要有一个入口。像C,C++都有一个main函数作为程序的入口,而Python作为解释性脚本语言,没有一个统一的入口,因为Python程序运行时是从模块顶行开始,逐行进行翻译执行,所以,最顶层(没有被缩进)的代码都会被执行,所以Python中并不需要一个统一的main()作为程序的入口。

在刚才的案例中三个模块都打印一次__name__

# cal.py
def add(x,y):
    return x + y

def mul(x,y):
    return x * y

print('这是cal模块文件,__name__内置变量的值为:',__name__)

# logger.py
def get_logger():
    print('打印日志!')

print('这是logger模块文件,__name__内置变量的值为:',__name__)

# 全局导入与部分导入.py:作为执行文件
import cal #导入了cal模块
import logger #导入和logger模块

print('main文件的__name__这个内置变量为:',__name__)

 结果为:

这是cal模块文件,__name__内置变量的值为: cal
这是logger模块文件,__name__内置变量的值为: logger
main文件的__name__这个内置变量为: __main__

通过结果发现__name__只有在执行模块中打印__main__,在其他导入模块中打印各自模块的名称。

所以,__name__可以有以下作用:

1.利用__name__=="__main__"声明程序入口。

2.可以对导入的模块进行功能测试

main.py

import cal  # 模块cal在当前文件夹里可以直接导入如:import cal,如果模块cal里包含名为add的函数,导入时要写上模块名和函数名如:from cal import add。"这是cal模块文件"是导入cal模块时自动运行所返回的结果。"cal"是模块cal运行print(__name__)所返回的结果。
import logger  # 模块logger在当前文件夹里可以直接导入如:import logger,如果模块logger里包含名为get_logger的函数,导入时要写上模块名和函数名如:from logger import get_logger。"这是logger模块文件"是导入logger模块时自动运行所返回的结果。"logger"是模块logger运行print(__name__)所返回的结果。
if __name__ == '__main__':  # __name__是变量,'__main__'是字符串。用来判断当前文件是否为执行文件,如果所返回的结果是__main__,表示当前文件为执行文件,即主程序执行入口。
    """在一个项目中由很多文件组成的,就要由一个主程序入口,一旦执行主程序之后,整个项目就运行起来了。如何判断这些文件哪个是主程序入口(即主程序文件)呢?就取找哪个文件里有主程序文件标识:if __name__ ==
    '__main__'就可以了。有if __name__ == '__main__'标识的文件就是主程序执行入口。
    在C、C++、Java等语言中必须有一个程序执行的入口。而python中可以没有程序执行入口的标识,但也可以模仿C、C++、Java写上一行代码:if __name__ == '__main__':来表示主程序执行入口。
    什么叫主程序执行入口:在一个项目中由很多文件组成的,就要运行某一个程序启动项目运行,一旦执行这个程序之后,整个项目就运行起来了,这个程序就是主程序文件,也叫主程序执行入口。"""
    print('我是主程序')  # "我是主程序"
    logger.get_logger()  # "打印日志"是调用logger模块中的get_logger函数(方法)print('打印日志')所返回的结果。

    print(__name__)  # "__main__"是运行print(__name__)所返回的结果。表示当前文件为执行文件。

# 模块文件中的__name__表示为模块名
# 执行文件(主程序文件)中的__name__表示为__main__

cal.py  

# 模块。模块里主要放的是函数的定义。有时是全局变量的声明。
# 这个模块里管理的是两个函数和一个全局变量

def add(x, y):  # 第一个函数
    return x + y


def mul(x, y):  # 第二个函数
    return x * y


num = 100  # 全局的变量。一个全局变量
print('这是cal模块文件')
print(__name__)

logger.py  

# 模块
# 这个模块里管理的是一个函数
def get_logger():
    print('打印日志')


print('这是logger模块文件')
print(__name__)

常见模块

time模块

<1> 时间戳

import time

# ret = time.time()  # 创建一个时间戳(返回当前时间),可以利用时间戳判断一种程序运行的耗时。
# print(ret)  # python时间戳是10位整数和6位小数。1493136727.099066。js时间戳是13位整数。
# python时间戳转js时间戳:time.time()*1000

start = time.time()  # 通过time模块计算程序运行的耗时。以后学习异步操作时可以对比同步用时的区别。

i = 0
sum = 0
while i < 99999:
    sum += i
    i += 1  

end = time.time()
print(end - start)  # 运行该程序耗时0.00896906852722168秒

<2> 时间字符串
time.strftime("%Y-%m-%d %X")  # %Y:年 %m:月 %d:天 %X:时分秒
print(time.strftime("%Y-%m-%d %X"))  # 返回当前时间
'2017-04-26 00:32:18'

<3> 程序暂定固定的时间
print('正在下载数据......')
time.sleep(2) #程序暂定n秒,睡眠时间n秒
print('下载成功!')

 小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

import time
计算一组程序执行的耗时
start = time.time()
# 测试代码
num = 0
for i in range(10000000):
    num += 1
print(num)
##############################
print('总耗时:', time.time() - start)  
# 10000000
总耗时: 0.46068501472473145

random模块(了解)

import random
ret = random.randint(1, 10)  # randint可以返回指定区域的一个随机数字
print(ret)

alist = [1, 2, 3, 4, 5]
random.shuffle(alist)  # shuffle可以将直接将原来的列表元素打乱次序,不会返回一个新列表
print(alist)  # [1, 4, 5, 2, 3]

ret = random.random()  # 大于0且小于1之间的小数
print(ret)  # 0.7691380876618417  0.607846495794258

ret = random.choice([1, '23', [4, 5]])  # choice返回列表中的随机一个元素
print(ret)

ret = random.sample([1, '23', [4, 5]], 2)  # sample返回列表元素任意2个随机组合
print(ret)

>>> import random
>>> random.random()      # 大于0且小于1之间的小数
0.7664338663654585
>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数
2
>>> random.randrange(1,3) # 大于等于1且小于3之间的整数
1
>>> random.choice([1,'23',[4,5]])  # 返回列表中的随机一个元素
1
>>> random.sample([1,'23',[4,5]],2) # 列表元素任意2个随机组合
[[4, 5], '23']
>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 直接将原来的列表元素打乱次序,不会返回一个新列表
>>> item
[5, 1, 3, 7, 9]

os模块(了解)

os模块是与操作系统交互的一个接口

import os

os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  # 改变当前脚本工作目录;相当于shell下cd
os.curdir   # 返回当前目录: ('.')
os.pardir  # 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')   # ***可生成多层递归目录
os.removedirs('dirname1')    # ***若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    #创建文件夹。*** 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    # 删除文件夹。*** 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    # ***列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  #*** 删除一个文件
os.rename("oldname","newname")  #*** 重命名文件/目录
os.stat('path/filename') #  获取文件/目录信息
os.sep    # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    # 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    # 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  # 运行shell命令,直接显示
os.environ  # 获取系统环境变量
os.path.abspath(path)  # ***返回path规范化的绝对路径
os.path.split(path)  # 将path分割成目录和文件名二元组返回
os.path.dirname(path)  # 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) #  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) #  ***如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  # 如果path是绝对路径,返回True
os.path.isfile(path)  # ***如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  # ***如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  # 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  # 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) # ***返回path的大小

序列化和反序列化模块:json(重点)

json格式的数据本质上属于字符串类型的数据。但字符串类型的数据很难去解析其中的局部内容。即使用正则也很难取出。这时就要用序列化和反序列化来取。

序列化: 将python中的字典、列表对象转换成指定形式字符串(json格式),然后再写入到文件中(可以将字典、列表对象保存到文件中进行持久化存储),序列化的意义是把对象往文件里存储。dump转存

反序列化:将指定格式的字符串(json格式)转换成字典,列表对象(可以将文件中存储的字符串数据,读取成字典或列表对象)。可以选择获取内容。反序列化的意义是把json字符串转换为Python对象(字典格式)让python可以处理。load载入

做数据解析的时候要用到序列化和反序列化。

  • 基本使用

  • 序列化:dumps和dump

import json
# 持久化存储
# # 序列化
dic = {
    'hobby': ['football', 'pingpang', 'smoke'],
    'age': 20,
    'score': 97.6,
    'name': 'zhangsan'
}
# 序列化:用json模块中的dumps方法,将字典对象转换成了json格式的字符串(字典样式的字符串),就可以写入文件里了。
r = json.dumps(dic)  # dumps方法。
# print(r)  # 返回字符串类型(json格式),{"hobby": ["football", "pingpang", "smoke"], "age": 20, "score": 97.6, "name": "zhangsan"}

  # print(type(r))  # <class 'str'>

  with open('./person.txt', 'w') as fp:
      fp.write(r)

  # 优化上面的代码(初始优化)

  dic = {
      'hobby': ['football', 'pingpang', 'smoke'],
      'age': 20,
    'score': 97.6,
      'name': 'zhangsan'
  }

  fp = open('./person.txt', 'w')
  json.dump(dic, fp)  # dump方法。用json模块中的dump方法,可以直接把字典转成字符串,并写入到fp所表示的文档中,一步到位进行序列化。
  fp.close()

  # 优化上面的代码(最终优化)

  dic = {
      'hobby': ['football', 'pingpang', 'smoke'],
      'age': 20,
      'score': 97.6,
      'name': 'zhangsan'
  }

  with open('./person.txt', 'w') as fp:
      json.dump(dic, fp)  # dump方法。用json模块中的dump方法,可以直接把字典转成字符串,并写入到fp所表示的文档中,一步到位进行序列化。

 反序列化:loads和load,用load比较方便,loads多一步操作。选择获取内容。

str = '{"hobby": ["football", "pingpang", "smoke"], "age": 20, "score": 97.6, "name": "zhangsan"}'
# #反序列化:将字符串(json格式)转换成了字典对象
dic = json.loads(str)
print(dic)  # 返回字典格式,{'hobby': ['football', 'pingpang', 'smoke'], 'age': 20, 'score': 97.6, 'name': 'zhangsan'}
print(type(dic))  # <class 'dict'>


with open('person.txt', 'r') as fp:
    text = fp.read()
    # print(type(text))  # <class 'str'>
    dic = json.loads(text)
    print(dic)  # {'hobby': ['football', 'pingpang', 'smoke'], 'age': 20, 'score': 97.6, 'name': 'zhangsan'}
    print(type(dic))  # <class 'dict'>

# 以上代码还可以写成:
with open('person.txt', 'r') as fp:
    dic = json.load(fp)
    print(dic, type(dic))  # {'hobby': ['football', 'pingpang', 'smoke'], 'age': 20, 'score': 97.6, 'name': 'zhangsan'} , <class 'dict'>

正则模块

  • 什么是正则表达式?

    • 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(例如,*,+,?等)。

    • 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

    • 分组: (ab) 。分组没有讲,比较复杂,记住括号就行了,表示只取括号里面的内容,如(ab)表示只取ab。

  • 常用的正则标识

单字符:
    . : 除换行以外所有字符
    [] :[aoe] [a-w] 匹配集合中任意一个字符
    \d :数字  [0-9]
   
数量修饰:
    * : 任意多次  >=0
    + : 至少1次   >=1
    ? : 可有可无  0次或者1次
    {m} :固定m次 hello{3,}
    {m,} :至少m次
    {m,n} :m-n次
边界:
    $ : 以某某结尾 
    ^ : 以某某开头
分组:
		(ab)  
贪婪模式: .*
非贪婪(惰性)模式: .*?

正则在python中的使用

  • 基于re模块进行正则匹配操作

  • 主要使用re模块中的findall进行指定规则的匹配

    • findall(str,rule)

      • str表示即将进行匹配的原始字符串数据

      • rule表示指定规则的正则表达式

      • findall返回的是列表,列表中存储匹配到的指定内容

  • 练习

import re  # 正则模块

# 提取出http://和https://
key = 'http://www.baidu.com and https://sougou.com'
ex = 'https?://'  # ? : 可有可无  0次或者1次
ret = re.findall(ex, key)
print(ret)  # ['http://', 'https://']

# 提取170
string = '我喜欢身高170的女孩子!'
# ex = 'XXX'  # ex = ''  # 正则表达式
ex = '\d'  # \d :数字  [0-9]
ret = re.findall(ex, string)
print(ret)  # ['1', '7', '0']

ex = '\d+'  # \d :数字  [0-9], + : 至少1次   >=1
ret = re.findall(ex, string)
print(ret)  # ['170']

ex = '\d+'  # \d :数字  [0-9], + : 至少1次   >=1
ret = re.findall(ex, string)
print(ret[0])  # [0]:取下标位0的列表元素。170

#####################################################################
# 提取出http://和https://
key = 'lalala<hTml>hello</HtMl>hahah'  # 输出<hTml>hello</HtMl>
ex = '<hTml>(.*)</HtMl>'  # (.*)取出[hello]。()表示只取括号里面的内容。比如后面的分组(ab)表示只取ab。
result = re.findall(ex, key)[0]  # [0]取出hello
print(result)
#####################################################################
# 提取出hello
key = 'lalala<hTml>hello</HtMl>hahah'  # 输出<hTml>hello</HtMl>
ex = '<hTml>.*</HtMl>'  # .*取出['<hTml>hello</HtMl>']
result = re.findall(ex, key)
print(result)


key = 'lalala<hTml>hello</HtMl>hahah'  # 输出<hTml>hello</HtMl>
ex = '<hTml>(.*)</HtMl>'  # (.*)取出[hello]。()表示只取括号里面的内容。比如后面的分组(ab)表示只取ab。
result = re.findall(ex, key)[0]  # [0]取出hello
print(result)

#####################################################################
# 提取出hit.edu.
key = 'Tom@hit.edu.com'  # 想要匹配到hit.
ex = 'h.*\.' #贪婪模式
result = re.findall(ex, key)[0]  # hit.
print(result)

# 提取出hit.
key = 'Tom@hit.edu.com'  # 想要匹配到hit.
ex = 'h.*?\.'  # ex表示正则表达式。?将正则的贪婪模式调整为非贪婪模式。默认下为贪婪模式
result = re.findall(ex, key)[0]  # hit.
print(result)

# 提取出hit
key = 'Tom@hit.edu.com'  # 想要匹配到hit.
# ex = 'h.*\.' #贪婪模式
ex = 'h.*?\.'  # ?将正则的贪婪模式调整为非贪婪模式。默认下为贪婪模式
result = re.findall(ex, key)[0][0:-1]  # 注意是[0:-1]不是[0,-1]hit
print(result)
# 或者
key = 'Tom@hit.edu.com'  # 想要匹配到hit
ex = 'h.t?'  # ?将正则的贪婪模式调整为非贪婪模式。默认下为贪婪模式
result = re.findall(ex, key)[0]  # hit
print(result)
#####################################################################
# 匹配sas和saas
key = 'saas and sas and saaas'
ex = 'sa{1,2}s'  # sa{1,2}s表示a出现的次数为一次到两次。{m,n} :m-n次
result = re.findall(ex, key)  # ['saas', 'sas']
print(result)
#####################################################################
# 匹配手机号
key = '你好我的手机号是13222222222你记住了吗'
ex = '1[3,5,7,8,9]\d{9}'  # 表示手机的第一位数字是固定的1;第二位是[3,5,7,8,9]中的其中一种;剩下的9位数是0-9的任意九个数字,用\d匹配。
result = re.findall(ex, key)
print(result)

# 身份证中的x不用正则就可以,用python中的replace替换
# 取出身份证中的数字
r = '1234x'
a = r.replace('x', '')
print(a, len(a))

Maven 是一款自动化构建工具,专注于Java项目的构建、依赖的管理。 阅读详情

相关推荐

ANSYS Workbench接触分析实战:从算法选择到收敛难题破解

本文深入解析ANSYS Workbench接触分析的核心技术与实战技巧,涵盖四大接触算法选择、收敛难题破解秘籍及典型场景参数设置。通过实际案例演示如何优化接触刚度、pinball区域和非对称行为等关键参数,帮助工程师有效解决结构非线性问题,提升仿真效率和精度。

weixin_28705087的博客 358

Python中的包(package)、模块(module)、方法(function)的逻辑关系

1. 逻辑关系 首先给出它们三个的结构关系:包→模块→方法,对应于英文就是:package→module→function。 2. 分类说明 包(package):包是一个类似文件夹的东西,它里面包含了很多.py文件还有一个__init__.py文件,init.py这个文件是描述有多少个模块的东西。该目录下一定得有这个__init__.py文件和其它模块或子包。 下图就是matplotlib包的文件结构。 模块(module):在Python中一个.py文件就可以称为一个模块,其表达的含义是实现了某个功

sally的jerry 1977

2024.6.10丨基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释指南

本文详细介绍了基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释方法,涵盖工具安装、参数优化、数据库选择及实战案例解析。通过DIAMOND的快速比对和VFDB的全面毒力因子数据,显著提升微生物基因组研究效率,适用于临床检测、食品安全监测等多个场景。

weixin_33712987的博客 376

Python基础之模块和包

我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,外部不需要引用的函数全部定义成。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。

上善若泪 1820

ANSYS Fluent热边界条件避坑指南:为什么你的自然对流计算结果总出错?

本文深入剖析了在ANSYS Fluent中进行自然对流仿真时,导致计算结果出错或发散的核心原因与解决方案。重点解析了重力项与操作密度设置、Boussinesq与不可压缩理想气体模型的抉择、以及压力离散格式(推荐Body Force Weighted)这三大关键雷区,并结合电子机箱散热等实战案例,提供了一套稳定可靠的仿真设置流程与调试技巧。

weixin_28396629的博客 740

等离子体密度诊断集

在实验上不仅要对带电粒子的分布和运动状态进行诊断,如电子温度、电子密度、电离温度等参数,还需要对等离子体中的中性粒子进行必要的实验测量,来获得有关物种的产生、能量分布以及各个激发态布居数分布等信息,如气体温度、转动温度、振动温度、激发温度等参数。

in546的博客 1351

python库、包及模块的关系

一直认为import库时,如果导入高层名称,那么其子功能一定能够使用,通过一个例子来说明我想表达的意思: 问题描述:中文分词,提出中文标点符号。 解题思路:确定有哪些中文标点符号,再提出? 有哪些标点符号?人为排除,不可避免会遗漏;能够使用第三方库?有:zhon。 import re import zhon import string line = "测试。。去除标点。。" print(...

Fragrant_huee 3858

Echarts之风力风速玫瑰图

风力风速玫瑰图前言改进之路代码如下总结导出与导入 前言 今天上班收到任务,我们老大让我研究一下这个“风速风向玫瑰图”,还说这个是百度的雷达图的变异体,于是乎我直接找的雷达图,但是雷达图没有这种柱形的,都是点线,然后我又找了好久,最后突然在echarts官网上面看到了图1-2,才终于有了思路,原来这个图不是雷达图的变异体,而是极坐标系下的堆叠柱状图,于是就开始我的“改进”之路了。 图1-1 改进之路...

qq_38776605的博客 1万+

python包实际怎么使用_Python--模块与包

模块1、什么是模块?一个模块就是一个Python文件,文件名就是模块名字加上.py后缀。因此模块名称也必须符合变量名的命名规范。1 使用python编写的代码(.py文件)2 已被编译为共享库或DLL的C或C++扩展3 包好一组模块的包4 使用C编写并链接到python解释器的内置模块2、为什么要使用模块?如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常...

weixin_39560029的博客 322

实战5:农作物产量预测 蔬菜产量预测 lstm 完整代码数据-可直接运行-计算机毕设

实战5:农作物产量预测 蔬菜产量预测 lstm 完整代码数据-可直接运行-计算机毕设

机器学习深度学习业余选手 1257

【IPC】ONVIF Device Manager 测试工具

介绍onvif 协议测试工具

以实战经验介绍行业知识 1957

几句话简单解释模块包类的区别和关系

1:类:实现新的对象,由class语句创建,简单说是一串代码2:模块:由一些函数,变量,类组成,可以被调用,简单说就是一个以.py结尾的文件3:包:包将有联系的/方向大致相同的模块组织在一起,,简单说就是一个文件夹,但是需要注意的是每个目录下都有__init__.py文件,这也是包和文件夹的区别,注意:包中可能也有子包,在子包的目录中,也需要有__init__.py文件。 ...

weixin_33811961的博客 1208

Roboflow 与 YOLOv11 数据集全流程:从获取到训练,让你数据无忧

上传图像:点击“Upload”按钮,批量上传本地图像(支持 JPG、PNG 格式,单张最大 10MB)。智能标注:利用 Roboflow 的“Auto-Annotate”功能,基于预训练模型自动生成标注,再手动微调,标注效率提升 70%。格式导出:标注完成后,同样选择“YOLOv11”格式导出,流程与公开数据集一致。

m0_71589036的博客 271

包和模块的介绍和几个常见错误!!!

1.模块的基本使用 (1) import 模块 使用:模块.函数名 (2) from 模块 import 函数名1,函数名2 使用:直接函数名 (3) from 模块 import * (4) import的时候,python解释器会搜索模块位置如果导入不成功的话,就在pycharm上把模块所在目录设为source root 2.python中的包 (1) 包中一般包含了多个模块 (2) 导入包中的模块一般:from package import module1或者 import pac...

weixin_48272780的博客 194

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

绝对、相对导入以及包和常见内置模块

详细介绍了绝对导入相对导入包以及开发规范和常见内置模块

主要发布一些日常学习代码及理解 879

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python3 【包和模块】避坑宝典:常见错误解析

Python包和模块的常见错误分析

ROGERLEE- Python场景式编程学习与训练 878

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python基础之--包和模块

定义一个model1模块print(year, "是闰年")else:print(year, "不是闰年")returnyear = int(input("请输入年份:"))用户自己编写的模块,用于复用代码。文件名以py.pypy结尾,存放自定义的函数、类等。model1,用于判定是否为闰年和加减法工具,可以直接调用print(year, "是闰年")else:print(year, "不是闰年")returnyear = int(input("请输入年份:"))分类。

m0_73338216的博客 1113

python中包和模块

当运行这个py文件时,如果是入口程序,__name__全局变量就是“__main__”,如果不是入口程序,就返回模块名。os.path.join(“./img”,“1.jpg”) #用于拼接两个路径字符串,也可以拼接多个。time.strftime(“%Y-%m-%d %H:%M:%S”) #以字符串返回当前时间。time.localtime() #返回一个元组,其元素为当前的年月日,十分秒,天数等等。re=os.listdir(“./img”) #返回此路径下的文件名字,装在一个列表中。

2401_85523237的博客 496

from pathlib import path_python小课堂15 - 史上最详细的包和模块import讲解篇

python小课堂15 - 史上最详细的包和模块import讲解篇前言在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包、模块,而为了代码可以重复利用(复用性),就有了类、函数的概念。类和函数在下次介绍。python中的包python中的包,对应到计算机中,可以理解为文件夹,但是文件加下必须有一个名为__init__.py的文件,若没有此文件,python则会认为其只是一个普...

weixin_39639965的博客 3908

Python(包和模块)

Python基础

m0_50007961的博客 559

python 引入同一路径的类_python小课堂15 - 史上最详细的包和模块import讲解篇

前言在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包、模块,而为了代码可以重复利用(复用性),就有了类、函数的概念。类和函数在下次介绍。python中的包python中的包,对应到计算机中,可以理解为文件夹,但是文件加下必须有一个名为__init__.py的文件,若没有此文件,python则会认为其只是一个普通的文件夹。打开pycharm,创建一个包,如下: python中...

weixin_39871649的博客 759

Python模块化编程概念:模块、包、导入及常见系统模块总结

Python模块化编程通过模块和包组织代码,提高可维护性和复用性。模块是包含函数、类和变量的Python文件,通过import导入;包是包含多个模块的文件夹,通过__init__.py标识。Python导入机制按当前目录、标准库和第三方库路径顺序查找模块,并缓存已加载模块。常用标准模块包括os(操作系统交互)、sys(解释器交互)、math(数学计算)、random(随机数)和datetime(日期时间)。通过pip工具管理第三方模块,支持安装、升级和虚拟环境创建,使用requirements.txt记录依

2301_78494402的博客 1531

模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理

本文介绍了Python模块化编程的概念与实践。模块化编程通过将代码分解为独立可复用的模块(.py文件)和包(包含__init__.py的目录),使用import机制实现代码组织。重点讲解了Python标准库中的常用模块(如os、sys、math、datetime等)及其核心功能,并详细说明了第三方模块的管理方法,包括pip工具的使用、requirements.txt依赖管理以及虚拟环境配置。文章还列举了numpy、pandas等常用第三方模块,强调了模块化编程在提升代码可维护性、复用性和协作效率方面的重要性

2401_82422441的博客 753

Python 模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理

模块(Module)是Python中组织代码的基本单位,它是一个包含Python定义和语句的文件。模块的文件名就是模块名加上.py后缀。例如,math.py就是一个名为math的模块。包(Package)是Python中用于组织模块的更高层次结构。它本质上是一个包含特殊文件的目录,该目录下可以包含多个模块文件或子包。模块化编程是Python开发中的核心概念,良好的模块化设计可以显著提高代码的可维护性、可重用性和可读性。通过合理使用内置模块和第三方模块,我们可以避免重复造轮子,专注于业务逻辑的实现。

lvzlj的博客 1498

python 包及模块引用梳理

前言:在查看一些工程性代码的时候,总是会发现类似: from .util import utils from . import datasets 这样的引用语句, 这让我比较困惑,所以趁这次机会,花点时间,好好整理一下相关的知识 文章目录1. python包机制2. python模块相对引用3. 举例reference 1. python包机制 - 包 - 模块 - 框架: 如何组织包和模块...

pprp的博客 6188

关于模块化编程概念(模块、包、导入)、常见系统模块总结及第三方模块管理

本文系统介绍了Python模块化编程的核心概念与实践方法。主要内容包括:1)模块与包的概念解析,模块是功能单元(.py文件),包是模块的目录集合;2)多种模块导入方式及适用场景;3)常用内置模块(math/random/datetime等)的功能示例;4)第三方模块管理:pip工具使用、虚拟环境创建、依赖管理文件requirements.txt;5)最佳实践:合理划分功能、命名规范、避免循环导入、文档编写与单元测试。文章强调模块化编程对代码复用、维护性和扩展性的重要性,为Python开发者提供了全面的模块化

qq_74732076的博客 966
上一篇: 文件操作及练习
下一篇: 前端知识之Web和HTML
天*天
博客等级 码龄3年 27粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值