zoukankan      html  css  js  c++  java
  • python基础之模块,面向对象

    hash

    什么是hash?

             hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值

    为何用hash?

             hash值有三大特性:

             1.只要传入的内容一样,得到的hash值必然一样

             2.只要使用的hash算法固定,无论传入的内容多大,得到的hash值的长度是固定的

             3.不可以用hash值逆推出来的内容

             基于1.2可以用于下载文件时做一致性校验等

             基于2.3可以用于密码的加密等

    如何使用hash

             import hashlib

             m = hashlib.md5()  # 相当于造工厂

             m.update(‘hello’.encode(‘utf-8’))  # 相当于送原料

             m.hexdigest()  # 相当于产出产品

    shelve

    import shelve  # 序列化,将内容以字典的形式存入文件
    f=shelve.open(r'sheve.txt')
    # f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
    # f['stu2_info']={'name':'gangdan','age':53}
    # f['school_info']={'website':'http://www.pypy.org','city':'beijing'}
    print(f['stu1_info']['hobby'])
    f.close()
    

    xml

    <?xml version="1.0"?>
    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>
    xml源码

    python中操作

    import xml.etree.ElementTree as ET
     
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
    print(root.tag)
     
    #遍历xml文档
    for child in root:
        print('========>',child.tag,child.attrib,child.attrib['name'])
        for i in child:
            print(i.tag,i.attrib,i.text)
     
    #只遍历year 节点
    for node in root.iter('year'):
        print(node.tag,node.text)
    #---------------------------------------
    
    import xml.etree.ElementTree as ET
     
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
     
    #修改
    for node in root.iter('year'):
        new_year=int(node.text)+1
        node.text=str(new_year)
        node.set('updated','yes')
        node.set('version','1.0')
    tree.write('test.xml')
     
     
    #删除node
    for country in root.findall('country'):
       rank = int(country.find('rank').text)
       if rank > 50:
         root.remove(country)
     
    tree.write('output.xml')

    configparser

    [section1]
    k1 = v1
    k2:v2
    user=egon
    age=18
    is_admin=true
    salary=31
    
    [section2]
    k1 = v1
    ini文件

    python中读取

    import configparser
    
    config=configparser.ConfigParser()
    config.read('a.cfg')
    
    #查看所有的标题
    res=config.sections() #['section1', 'section2']
    print(res)
    
    #查看标题section1下所有key=value的key
    options=config.options('section1')
    print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
    
    #查看标题section1下所有key=value的(key,value)格式
    item_list=config.items('section1')
    print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
    
    #查看标题section1下user的值=>字符串格式
    val=config.get('section1','user')
    print(val) #egon
    
    #查看标题section1下age的值=>整数格式
    val1=config.getint('section1','age')
    print(val1) #18
    
    #查看标题section1下is_admin的值=>布尔值格式
    val2=config.getboolean('section1','is_admin')
    print(val2) #True
    
    #查看标题section1下salary的值=>浮点型格式
    val3=config.getfloat('section1','salary')
    print(val3) #31.0
    
    改写
    import configparser
    
    config=configparser.ConfigParser()
    config.read('a.cfg',encoding='utf-8')
    
    
    #删除整个标题section2
    config.remove_section('section2')
    
    #删除标题section1下的某个k1和k2
    config.remove_option('section1','k1')
    config.remove_option('section1','k2')
    
    #判断是否存在某个标题
    print(config.has_section('section1'))
    
    #判断标题section1下是否有user
    print(config.has_option('section1',''))
    
    
    #添加一个标题
    config.add_section('egon')
    
    #在标题egon下添加name=egon,age=18的配置
    config.set('egon','name','egon')
    config.set('egon','age',18) #报错,必须是字符串
    
    #最后将修改的内容写入文件,完成最终的修改
    config.write(open('a.cfg','w'))

    面向对象编程

    面向对象编程的核心是对象二字,对象是特征与技能的结合体。

    优点:扩展性强

    缺点:复杂程度要高于面向过程

    应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

    类:种类,分类,类别

    对象是特征与技能的结合体,类是一系列对象相似的特征与技能的结合体

    强调:站的角度不同,总结出的类截然不同

    现实中:先有对象,再有类

    程序中:必须先定义类,后调用类来产生对象

    定义:类体代码会在定义阶段立刻执行,产生类名称空间

    class OldboyStudent:
        school='oldboy'
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
        def learn(self):
            print('%s is learning' %self.name) #新增self.name
        def eat(self):
            print('%s is eating' %self.name)
        def sleep(self):
            print('%s is sleeping' %self.name)
    s1=OldboyStudent('李坦克','',18)
    s2=OldboyStudent('王大炮','',38)
    s3=OldboyStudent('牛榴弹','',78)

    调用类产生对象,调用类的过程,又称为实例化,结果称为对象/实例

  • 相关阅读:
    27.TreeMap
    26.HashCode
    25.HashTable
    myeclipse快捷键
    spring 配置
    jdbcType和javaType对应关系
    Ajax表单提交
    ajax
    JQuery及Form插件使用
    jsp标准数据库
  • 原文地址:https://www.cnblogs.com/luck-L/p/9224209.html
Copyright © 2011-2022 走看看