金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 结构体的使用,Python数据结构

结构体的使用,Python数据结构

发布时间:2019-11-06 10:00编辑:编程浏览(143)

    Swift 结构体是构建代码所用的一种通用且灵活的构造体。

    • 集合的定义

    目录:

    我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。

     使用大括号,并且里面必须有初始值,否则是dict字典类型

      一、什么是异常?

    与 C 和 Objective C 不同的是:

    • 集合的特征

      二、异常的总结

    • 结构体不需要包含实现文件和接口。

    • 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。

    集合内部的元素无序,所以不能使用索引、切片等操作

      三、课时32课后习题及答案

    结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。

    集合内部的元素具有唯一性,不允许元素重复出现

     

     

    集合内部的元素,只能存放int, float, str, tuple等必须是可哈希的数据,set类型本身不可哈希

    *******************

    语法

    我们通过关键字 struct 来定义结构体:

    struct nameStruct { 
       Definition 1
       Definition 2
       ……
       Definition N
    }
    

     

    s1 = {1,2,3,'a','b','c',7,8,9}
    s2 = {}
    
    print(type(s1)) #输出<class 'set'>
    print(type(s2)) #输出<class 'dict'>
    
    for i in s1:
        print(i,end=' ') #输出1 2 3 b 7 8 9 a c,可见set是无序的
    

    一、什么是异常?

    实例

    我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:

    struct MarkStruct{
       var mark1: Int
       var mark2: Int
       var mark3: Int
    }
    

    我们可以通过结构体名来访问结构体成员。

    结构体实例化使用 let 关键字:

    struct studentMarks {
       var mark1 = 100
       var mark2 = 78
       var mark3 = 98
    }
    let marks = studentMarks()
    print("Mark1 是 (marks.mark1)")
    print("Mark2 是 (marks.mark2)")
    print("Mark3 是 (marks.mark3)")
    

    我们通过结构体名 'studentMarks' 访问学生的成绩。结构体成员初始化为mark1, mark2, mark3,数据类型为整型。

    然后我们通过使用 let 关键字将结构体 studentMarks() 实例化并传递给 marks。

    最后我们就通过 . 号来访问结构体成员的值。

    以下实例化通过结构体实例化时传值并克隆一个结构体:

    struct MarksStruct {
       var mark: Int
    
       init(mark: Int) {
          self.mark = mark
       }
    }
    var aStruct = MarksStruct(mark: 98)
    var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
    bStruct.mark = 97
    print(aStruct.mark) // 98
    print(bStruct.mark) // 97
    
    •  多循环的集合内涵

      s1 = {1,2,3} s2 = {'i', 'love', 'you'}

      s3 = {m * n for m in s2 for n in s1} #相当于把s2中的每个元素乘以1/2/3 print(s3) #输出{'iii', 'lovelove', 'you', 'youyou', 'i', 'youyouyou', 'ii', 'love', 'lovelovelove'}

    •  删除元素

      s = {'a','b','c','d','e','f'} # s.remove('k') #remove删除不存在的元素报错keyerror s.discard('k') #discard删除不存在的元素不报错,只是删除失败而已

    • 交叉并补

    *******************

    结构体应用

    在你的代码中,你可以使用结构体来定义你的自定义数据类型。

    结构体实例总是通过值传递来定义你的自定义数据类型。

    按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

    • 结构体的主要目的是用来封装少量相关简单数据值。
    • 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
    • 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
    • 结构体不需要去继承另一个已存在类型的属性或者行为。

    举例来说,以下情境中适合使用结构体:

    • 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
    • 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
    • 三维坐标系内一点,封装xyz属性,三者均为Double类型。

    结构体实例是通过值传递而不是通过引用传递。

    struct markStruct{
        var mark1: Int
        var mark2: Int
        var mark3: Int
    
        init(mark1: Int, mark2: Int, mark3: Int){
            self.mark1 = mark1
            self.mark2 = mark2
            self.mark3 = mark3
        }
    }
    
    print("优异成绩:")
    var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
    print(marks.mark1)
    print(marks.mark2)
    print(marks.mark3)
    
    print("糟糕成绩:")
    var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
    print(fail.mark1)
    print(fail.mark2)
    print(fail.mark3)
    

     

    交集intersection

    程序出现逻辑错误或者用户输入不合法都会引起异常,但这些异常并不是致命的,不会导致程序崩溃死掉。可以利用Python提供的异常处理机制,在异常出现的时候及时捕获,并从内部消化掉。

    差集difference

    那么什么是异常呢?举个例子:

    并集union

    file_name = input("请输入要打开的文件名:")
    f = open(file_name,'r')
    print("文件的内容是:")
    
    for each_line in f:
          print(each_line)
    

    子集issubset:检查一个集合是否为另一个集合的子集

    这里当然假设用户输入的是正确的,但只要用户输入一个不存在的文件名,那么上面的代码就不堪一击:

    超集issuperset:检查一个集合是否为另一个集合的超集(如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集)

    请输入要打开的文件名:我为什么是一个文档.txt
    Traceback (most recent call last):
      File "C:Users14158Desktoplalallalalal.py", line 2, in <module>
        f = open(file_name,'r')
    FileNotFoundError: [Errno 2] No such file or directory: '我为什么是一个文档.txt'
    
    s1 = {1,2,3,4,5,6}
    s2 = {5,6,7,8,9,0}
    
    s3 = s1.intersection(s2) #s1与s2的交集
    print(s3) #输出{5, 6}
    
    s4 = s1.difference(s2) #s1与s2的差集,相当于s1-s2
    print(s4) #输出{1, 2, 3, 4}
    
    s5 = s1.union(s2) #s1与s2的并集
    print(s5) #输出{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    
    i1 = s1.issubset(s2) #判断s2是否为s1的子集,i1为False
    i2 = s1.issuperset(s2) #判断s2是否为s1的超集,i2为False
    

     上面的例子就抛出了一个FileNotFoundError的异常,那么Python通常还可以抛出哪些异常呢?这里给大家做总结,今后遇到这些异常就不会陌生了。

    •  冰冻集合

     

    不可以进行任何修改操作的集合,其他属性与集合完全一致。

    ******************

    s = {1,2,3}
    s = frozenset(s)
    print(s) #输出frozenset({1, 2, 3})
    

    二、异常的总结

     

    ******************

     1、AssertionError:断言语句(assert)失败

    大家还记得断言语句吧?在关于分支和循环的章节里讲过。当assert这个关键字后边的条件为假的时候,程序将停止并抛出AssertionError异常。assert语句一般是在测试程序的时候用于在代码中置入检查点:

    本文由金沙国际官网发布于编程,转载请注明出处:结构体的使用,Python数据结构

    关键词: