【基础】python中OrderedDict有序字典的用法和python面向对象的代码使用

最近从传统图像处理转到深度学习,c++换python,虽然有一点代码基础,但是python的语言风格和数据类型定义还是有很大区别的,直接看一些经典模型的代码看不太懂,所以还需要补一补python的基础。

一、python语法

1.1 OrderedDict

  • 官方介绍

    按照有序插入顺序存储的有序字典

    class OrderedDict(dict):
        'Dictionary that remembers insertion order'
    
  • 基础用法

    from collections import OrderedDict
    
    if __name__ == '__main__':
        ordDic = OrderedDict()
        ordDic["name"] = "小明"
        ordDic["age"] = "18"
        ordDic["three"] = "3"
        ordDic["four"] = "4"
        ordDic["five"] = "5"
    
        for key in ordDic:
            print(key)
            
     #------------------------------#
    输出:
    name
    age
    three
    four
    five
    # 按照插入的顺序依次输出
    
  • 常用函数

    import collections
    dic = collections.OrderedDict()
     
    # clear(清空有序字典)
    dic.clear()
     
    # copy(拷贝)
    new_dic = dic.copy()
     
    # items(返回由“键值对组成元素“的列表)
    dic.items()
     
    # keys(获取字典所有的key)
    dic.keys()
     
    # values(获取字典所有的value,返回一个列表)
    dic.value()
     
    # pop(获取指定key的value,并在字典中删除)
    dic.pop("name")           # 删除name, 注意必须指定关键字key
     
    # popitem(按照后进先出原则,删除最后加入的元素,返回key-value)
    dic.popitem()            # 删除最后加入的
    dic.popitem(last=False)  # 删除第一个加入的
    

二、python面向对象

2.1 python类的方法中的 冒号(:)和箭头(->)

​ 冒号表示希望传入实参的类型

​ 箭头表示希望返回什么类型

class Employee:
    '所有员工的基类'
    empCount = 0

    # 函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型。函数后面跟着的箭头是函数返回值的类型建议符,用来说明该函数返回的值是什么类型。
    # 值得注意的是,类型建议符并非强制规定和检查,也就是说即使传入的实际参数与建议参数不符,也不会报错

    def __init__(self, name: int = "morenzhi", salary: int = "10"):
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    # 这里输出一下self,self 代表的是类的实例,代表当前对象的地址
    # 此外,self也可以换成别的
    def printSelf(ddd) -> int:
        print(ddd)
        return "jiantoufanhui"

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)


def testClass():
    emp1 = Employee()
    emp2 = Employee("emp1", 200)
    emp3 = Employee("emp1", 300)
    # 输出一串地址
    print(emp1.printSelf())
    print(emp1.name)
    print(emp2.name)


if __name__ == '__main__':
    testClass()

2.2 python中类的继承

  • 继承的定义还是很简单的。这里先自己定义一个 ConvBNActivation 类,在后面括号中写入 nn.Sequential,表示继承这个类

    # ConvBNActivation继承nn.Sequential
    # 卷积BN以及激活函数
    class ConvBNActivation(nn.Sequential):
        def __init__(self,
                     ....................
                     ....................)
        print("ConvBNActivationInit")
        print(nn.Sequential)
    
  • 我们在Sequential(父类)中新加一个打印,测试一下父子类运行的顺序

    class Sequential(Module):
        print("SequentialInit")
    
  • 在主函数中运行(实例化)一下ConvBNActivation

    if __name__ == '__main__':
        ConvBNActivation(10,10)
    
  • 输出

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjZc3zR5-1678582986363)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230312085534195.png)]

    所以,运行顺序是先运行父类,后运行子类

    此外,可以在需要的位置使用super().父类方法 来调用父类方法的执行,这个点比较简单,就不做测试了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值