第十节-常用技术

2023-11-08 06:08
文章标签 技术 常用 第十节

本文主要是介绍第十节-常用技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

id() 函数用于获取对象的内存地址
>>>a = 'runoob' 
>>> id(a) 
4531887632 
>>> b = 1 
>>> id(b) 
140588731085608
习题1: 练习序列化与反序列,
将一个字典对象序列化
复制一份文件,
再反序列化复制出来的文件
dumps、loads 是对字符序列,包括列表和字典的操作,
dump、load 是对文件的操作,序列化和反序列化
习题1: 序列化与反序列,
将一个字典对象序列化
复制一份文件,
再反序列化复制出来的文件
"""
#序列化
import json
dict1 = {'a':'1','b':'2','c':'3'}
with open("dict1.json","w") as file_in:
    json.dump(dict1,file_in,indent=4)
#反序列化
with open("dict1.json","r") as file_in:
    new_dict1 = json.load(file_in)
    print(new_dict1)


from timeit import timeit
#字符串的序列化和反序列化
print(timeit("""
import pickle
b = pickle.dumps(dict1)
print(b)
print(pickle.loads(b))
""",globals = globals()))

#用pickle dump load序列化、反序列化
import pickle
with open("./test_data/data.pickle","wb") as file_in:
    pickle.dump(dict1,file_in)
with open("./test_data/data.pickle","rb")as file_out:
    a = pickle.load(file_out)
    print("a =",a)
>>
{'a': '1', 'b': '2', 'c': '3'}
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01X\x01\x00\x00\x001q\x02X\x01\x00\x00\x00bq\x03X\x01\x00\x00\x002q\x04X\x01\x00\x00\x00cq\x05X\x01\x00\x00\x003q\x06u.'
{'a': '1', 'b': '2', 'c': '3'}
9.183143498391086
a = {'a': '1', 'b': '2', 'c': '3'}

习题2:
使用两种方法计算给定列表中list(range(10000))中, 和为10000的两个数, 输出每对数的对应两个下标
并使用 time, timeit, profile 三种方法测试效率
"""
习题2:
使用两种方法计算给定列表中list(range(10000))中,
和为10000的两个数,输出每对数的对应两个下标
并使用 time, timeit, profile 三种方法测试效率
这里全部按照执行100000次比较
"""
from timeit import timeit
from time import time
import profile


#方法一
#time()单独使用仅仅执行一次
start = time()
# a = list(range(10000))
b = {}
for i in range(50000):
    b[i+1]=100000-i+1
# print(b)
end = time()
print("time = %.4f s"%(end-start))

#timeit()执行1000000次,转化
print("timeit = %.6f s"%float(timeit("""
b = {}
for i in range(3):
    b[i+1]=3-i+1
""",globals=globals())/10)#1百万次除10
)
#profile()执行一次
def sum_num(n):
    b = {}
    for i in range(int(n/2)):
        if i + 1 not in b:
            b[i + 1] = n - i + 1
    return b
profile.run("sum_num(100000)",sort="ncall")

#方法二、
#time方法
start = time()
a = list(range(50000))
b = {}
for i in a:
    if i+1 not in b:
        b[i + 1] = 100000 - i + 1
end = time()
print("time2 = %.4f s"%(end-start))
# print(b)

#timeit方法
print("timeit2 = %.6f s"%float(
      timeit("""
a = list(range(3))
b = {}
for i in a:
    b[i + 1] = 3 - i + 1
    """,globals=globals())/10)
)

#profile方法
def sum_numb(n):
    a = list(range(int(n/2)))
    b = {}
    for i in a:
        b[i + 1] = n - i + 1
    return b
profile.run("sum_numb(100000)",sort="ncall")
>>
time = 0.0100 s
timeit = 0.051264 s
         5 function calls in 0.016 seconds

   Ordered by: call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.016    0.016 profile:0(sum_num(100000))
        1    0.000    0.000    0.016    0.016 :0(exec)
        1    0.000    0.000    0.016    0.016 <string>:1(<module>)
        1    0.016    0.016    0.016    0.016 Temporary File.py:65(sum_num)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        0    0.000             0.000          profile:0(profiler)


time2 = 0.0140 s
timeit2 = 0.067639 s
         5 function calls in 0.016 seconds

   Ordered by: call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.016    0.016 profile:0(sum_numb(100000))
        1    0.000    0.000    0.016    0.016 :0(exec)
        1    0.000    0.000    0.016    0.016 <string>:1(<module>)
        1    0.016    0.016    0.016    0.016 Temporary File.py:96(sum_numb)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
        0    0.000             0.000          profile:0(profiler)

这篇关于第十节-常用技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368239

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1