第十节-常用技术

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

相关文章

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

MySQL连接池(Pool)常用方法详解

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构... 目录mysql 连接池 (Pool) 常用方法详解1. 创建连接池2. 核心方法2.1 pool.q

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指