zoukankan      html  css  js  c++  java
  • Python模块、json和pickle及shelve

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

    使用模块有什么好处?
    最大的好处是大大提高了代码的可维护性。
    其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

    模块一共三种:
    python标准库
    第三方模块
    应用程序自定义模块

    #模块
    calculate :
    print('ok')
    x=9
    def add(x,y):
    return x+y

    def sub(x,y):
    return x-y

    # import sys
    # import calculate #解释器通过搜索路径找到calculate.py 后将calculate.py里面所有的代码解释一遍
    # #print(calculate.add(1,2))
    #
    # #搜索路径:sys.path
    # print(sys.path)
    # print(calculate.x)
    #
    # from calculate import add,sub #调用某一个函数
    # print(add(8,9))
    # print(sub(8,2))
    # print(calculate.x)
    #
    # from calculate import * #所有的方法和变量都引入,如果本地和引入的模块函数重名,则应#看执行顺序
    # def add(x,y):
    # return x+y+1
    # print(add(1,5)) #7
    #
    # from calculate import as plus #更改名字

    #包 package 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
    #包是组织模块的,模块是组织函数的
    #import web.logger 不正确的调用方式
    #logger.logger() name 'logger' is not defined
    #from web import logger 错

    # from web import logger #正确
    # logger.logger()

    # from web.web2 import logger #import 后面是一个模块
    # logger.logger() #正确的

    # from web.web2.logger import logger
    # logger() #正确

    # import web.web2.logger name 'logger' is not defined
    # logger() #错误

    #总结:包与包之间的调用,from package import module或者from module import functiom

    引入一个包执行代码时是执行_init_文件,这个包中其他的文件无法执行
    # import web #执行了_init_文件
    # print(web.main.x) #报错
    引入包中的文件才可以调用
    from web import main
    print(main.x)
    ===============================================================================
    if __name__=='__main__': #加了这句测试代码就不再执行
    只有在本代码中执行print(__name__)才会打印__main__,在其他代码中引入该模块会打印那个模块的名称。

    eval

      功能:将字符串str当成有效的表达式来求值并返回计算结果。
    ================================================================================
    json和pickle及shelve:

    dic=str({'name':'lili'})
    f=open('filename','w')
    f.write(dic)

    f=open('filename','r')
    data=f.read()
    #print(data['name']) #用eval()来转换为字典
    print(eval(data)['name'])

    #序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化
    #json 不能序列化函数和类
    import json
    dic={'name':'alex','age':'29'}
    data=json.dumps(dic)
    f=open('jsontest','w')
    f.write(data)
    f.close()
    #将原来的类型转换回来
    f=open('jsontest','r')
    data=f.read()
    data=json.loads(data)
    print(data['name'])
    f.close()

    def foo():
    print('ok')

    #data=json.dumps(foo) #Object of type 'function' is not JSON serializable

    #pickle 支持的数据类型更多,可以序列化一个函数
    import pickle
    def foo():
    print('ok')
    data=pickle.dumps(foo)
    f=open('pickle','wb')
    f.write(data)
    f.close()

    f=open('pickle','rb')
    data=f.read()
    data=pickle.loads(data)
    data()
    f.close()

    #dump和load
    import json
    dic={'name':'alex','age':'29'}
    f=open('jsontest','w')
    # data=json.dumps(dic)
    # f.write(data)
    # 两行代码相当于下面一句
    json.dump(dic,f)
    f.close()

    f=open('jsontest','r')
    # data=f.read()
    # data=json.loads(data)
    # 两行代码相当于下面一句
    data=json.load(f)
    print(data['name'])
    f.close()

    #pickle 的dump和load也和json功能相同

    #============================================================
    # shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,
    # 可读可写;key必须为字符串,而值可以是python所支持的数据类型
    import shelve
    f=shelve.open('shelve')
    f['info']={'name':'alex','age':'16'}
    f['shopping']={'name':'alex','price':'16'}
    data=f.get('info')
    data1=f.get('shopping')
    print(data,data1)

    #get() 方法
    d={'name':'alex','age':'16'}
    d['name']='abc'
    print(d.get('name'))

    print(d.get('sex','male')) #没有默认值,返回None,有值会返回存在的值

  • 相关阅读:
    JAVA | Guava EventBus 使用 发布/订阅模式
    Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata
    写了一个慢接口,年终妥妥的325
    理解C#中的ExecutionContext vs SynchronizationContext
    理解C#中的ConfigureAwait
    反直觉的三门问题
    连求最大公约数都不会,我怕不是上了个假大学
    「补课」进行时:设计模式(22)——桥梁模式
    抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题
    如何写好绩效考核中的年终总结?
  • 原文地址:https://www.cnblogs.com/cxli99/p/8466677.html
Copyright © 2011-2022 走看看