第十节-常用技术

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

相关文章

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

一文详解Java常用包有哪些

《一文详解Java常用包有哪些》包是Java语言提供的一种确保类名唯一性的机制,是类的一种组织和管理方式、是一组功能相似或相关的类或接口的集合,:本文主要介绍Java常用包有哪些的相关资料,需要的... 目录Java.langjava.utiljava.netjava.iojava.testjava.sql

Springmvc常用的注解代码示例

《Springmvc常用的注解代码示例》本文介绍了SpringMVC中常用的控制器和请求映射注解,包括@Controller、@RequestMapping等,以及请求参数绑定注解,如@Request... 目录一、控制器与请求映射注解二、请求参数绑定注解三、其他常用注解(扩展)四、注解使用注意事项一、控制

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

python协程实现高并发的技术详解

《python协程实现高并发的技术详解》协程是实现高并发的一种非常高效的方式,特别适合处理大量I/O操作的场景,本文我们将简单介绍python协程实现高并发的相关方法,需要的小伙伴可以了解下... 目录核心概念与简单示例高并发实践:网络请求协程如何实现高并发:核心技术协作式多任务与事件循环非阻塞I/O与连接

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche