首页 > 其他分享 >理解coalpress(其一)

理解coalpress(其一)

时间:2023-07-29 17:33:45浏览次数:34  
标签:其一 Gzm Zj Zk self coalpress 理解 Ex str

分析一个Django,从视图开始

整体项目结构如图示

image-20230729145731813
  1. get_json_values:
def get_json_values(request):
    Gzm_s = ''
    Zk_s = ''
    Zj_s = ''
    
    Ex_Guid = TGuid_StopeClass()  # 创建一个实例

get_json_values函数中,将空字符串分配给三个变量:Gzm_sZk_sZj_s。然后创建 TGuid_StopeClass 类的实例,并将其赋值给变量 Ex_Guid

什么叫“类的实例”:

通过实例化(即创建)一个类来得到的对象。用于描述对象的属性和行为。而类的实例则是基于这个类创建的具体对象,它具有类所定义的属性和行为。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

# 创建类的实例
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

定义了一个名为 Person 的类,它有两个属性 nameage,以及一个方法 say_hello。然后我们通过类来实例化两个对象,person1person2。每个实例都有自己的 nameage 属性,并且可以调用 say_hello 方法。

例如,

print(person1.name)  # 输出: Alice
print(person2.age)   # 输出: 25

person1.say_hello()  # 输出: Hello, my name is Alice and I am 30 years old.
person2.say_hello()  # 输出: Hello, my name is Bob and I am 25 years old.

继续看views:

	# 从前端获取数据
    if Ex_Guid.Ex_InitModel(Gzm_s, Zk_s, Zj_s):
        result_dict = Ex_Guid.Output_str("ZK")
    else:
        result_dict = Ex_Guid.warning

​ 这部分代码检查 Ex_Guid 实例的 Ex_InitModel 方法是否返回 TrueEx_InitModel 用来初始化 Gzm_sZk_sZj_s 这三个变量。

​ 初始化之后使用参数 "ZK" 调用 Ex_Guid 实例的 Output_str 方法,结果赋给变量 result_dict。否则,它将 Ex_Guid.warning(一条警告消息)赋值给 result_dict

	return JsonResponse(result_dict, safe=False)

最后,该视图返回一个JSON响应。

接下来进入Ex_InitModel的函数:

def Ex_InitModel(self, Gzm_str, Zk_str, Zj_str):
    Gzm_bool = self.Ini_Gzm(Gzm_str)
    Zk_bool = self.Ini_Zk(Zk_str)
    Zj_bool = self.Ini_Zj(Zj_str)

Ex_InitModel 接收四个参数:self(指向类实例自身的引用)、Gzm_strZk_strZj_str。这里的 self习惯用法

接下来调用三个方法:Ini_GzmIni_ZkIni_Zj,并传递相应的参数 Gzm_strZk_strZj_str 进去。

	self.successed = True if (Gzm_bool and Zk_bool and Zj_bool) else False
   	return self.successed

使用 and 运算来判断三个方法的返回值是否全部为 True,然后将结果赋值给实例的属性 self.successed。如果三个方法的返回值都为 True,那么 self.successed 将被赋值为 True,否则将被赋值为 False

最后,方法返回 self.successed;(这意味着调用这个方法后,可以通过得到的返回值来判断整个初始化过程是否成功)

image-20230729151748231

先以Gzm为例,

def Ini_Gzm(self, str):
    if str == '':
        str2_1 = "GZM:16,12011工作面,二煤,4.5,综采,0,3.4,600,214,1640,100,1,25,20000,0.3,2,3"
        str2_2 = "GZM_D:5,2902工作面,4,2.6,综采,2.4,12,5,470,550,510,300,650,3,1,2,1,1,1,1,1,2,2,0,0,0,0,100"
        
        str = str2_1

先检查传入的参数 str 是否为空字符串。如果是空字符串,则将两个字符串 str2_1str2_2 分别赋值给 str2_1str2_2 变量。然后将 str2_1 的值赋值给参数 str,即方法中的 str 变量,后面再使用。

    if str.startswith("{") and str.endswith("}"):
        # 第一种,json输入方法
        if not self.Ex_Gzm.Base_Input(str): sys.exit()

        if self.Ex_Gzm.Keyword == 'GZM':
            self.Ex_Gzm.S_Input(str)
            return True
        elif self.Ex_Gzm.Keyword == 'GZM_D':
            self.Ex_Gzm.ES_Input(str)
            return True
        else:
            self.warning.append('GZM拼写错误或缺失;')
            return False

接下来,代码检查 str 是否以 { 开头且以 } 结尾。如果满足这个条件,那么执行 if 语句块中的代码。

在这里,代码使用了一个 self.Ex_Gzm 实例来调用三个不同的方法:Base_InputS_InputES_Input,并传递参数 str 给它们。

  • 如果 Base_Input 方法的返回值为 False,则调用 sys.exit() 来终止程序运行(退出程序)。
  • 如果 关键字是 'GZM',则调用 S_Input 方法,并返回 True
  • 如果关键字是 'GZM_D'(更长的那串),则调用 ES_Input 方法,并返回 True
  • 否则,将一条错误信息添加到 self.warning 列表,并返回 False
	else:
        # 第二种,字符串输入方法
        if str.startswith('GZM_D'):
            self.Ex_Gzm.Keyword = 'GZM_D'
            self.Ex_Gzm.ES2_Input(str)
            return True
        elif str.startswith('GZM'):
            self.Ex_Gzm.Keyword = 'GZM'
            self.Ex_Gzm.S2_Input(str)
            return True

        else:
            self.warning.append('GZM拼写错误;')
            return False

如果 str 不是以 { 开头或者不是以 } 结尾,那么执行 else 语句块中的代码。

先看是否以 'GZM_D' 开头或者以 'GZM' 开头。如果满足这些条件,那么执行相应的 if 语句块中的代码,其余原理同上;

接下来是ZK:

image-20230729152454410
  1. def Ini_Zk(self, str):

    Ini_Zk 的方法接收两个参数:selfstr,str 是方法的第二个参数;

  2. if str == '':

    ​ 检查传入的参数 str 是否为空。如果 str 是空字符串,那么执行 if

  3. 定义一个包含钻孔信息的字符串 str

    ​ 是默认的钻孔信息数据。如果传入的 str 为空,那么将使用这个默认的钻孔信息数据来初始化 str

  4. if str.startswith('ZK'):

    ​ 检查 str 是否以 'ZK' 开头。如果满足这个条件,那么执行 if

  5. self.Ex_Zk.Keyword = 'ZK'

    ​ 将类实例的属性 self.Ex_Zk.Keyword 的值设为 `'ZK';

  6. self.Ex_Zk.Zk_Input(str)

    ​ 调用类实例的 Ex_Zk 属性的方法 Zk_Input,并将参数 str 传递给它;

  7. return True

    ​ 最后返回 True,表示成功处理了 'ZK' 类型的数据;

    如果 str 不是以 'ZK' 开头,那么执行 else

    self.warning.append('ZK拼写错误;')'ZK拼写错误;'添加到类实例的 self.warning 列表;

    return False 最后返回 False,表示没有成功处理 'ZK'

最后来到output:

    def Output_str(self, Key):
        if Key == 'GZM':
            if self.Ex_Gzm.Keyword == 'GZM_D':
                return self.Ex_Gzm.ES_Output()
            elif self.Ex_Gzm.Keyword == 'GZM':
                return self.Ex_Gzm.S_Output()
        
        elif Key == 'ZK':
            return self.Ex_Zk.Zk_Output()
        elif Key == 'ZJ':
            return self.Ex_Zj.Zj_Output()
            """
            根据传入的 Key 参数,决定调用不同属性的不同方法,从而输出对应类型的数据。如果 Key 参数为 'GZM',那么会调用 Ex_Gzm 属性的 S_Output 或 ES_Output 方法输出 'GZM' 或 'GZM_D' 类型的数据; 如果 Key 参数为 'ZK',那么会调用 Ex_Zk 属性的 Zk_Output 方法输出 'ZK' 类型的数据; 如果为 'ZJ',那么会调用 Ex_Zj 属性的 Zj_Output 方法输出 'ZJ' 类型的数据。
            """

以ZJ为例:

image-20230729153629324
    # 接收 input_str,是一个 JSON 字符串,使用 json.loads() 将其解析为字典或列表;
    # 调用 self.value_Zj_Input(data) 方法,将解析后的数据传递给它,然后返回 True,表示成功处理了输入数据;
    def Zj_Input(self, input_str):
        data = json.loads(input_str)
        self.value_Zj_Input(data)
        return True
    # 接收一个参数 data(字典)检查 data 字典中是否包含特定键值来赋值。如果 data 字典中包含【键】 'Zj_Name',则将【值】赋给 self.Zj_Name;
    def value_Zj_Input(self, data):...
    
    # 第二种text解析方法
    # 接受的是文本字符串,先将 "ZJ:" 替换为空然后使用 split(',') 将剩余字符串按逗号分隔,并形成一个列表 Zj_info;
    # try 和 except 块将列表中的每个元素转换,转换失败(出现 ValueError)触发 except 调用 sys.exit() 来退出
    def Zj2_Input(self, input_str):
        Zj_info = input_str.replace('ZJ:', '').split(',')
        try:...
        except json.JSONDecodeError:
            sys.exit()

标签:其一,Gzm,Zj,Zk,self,coalpress,理解,Ex,str
From: https://www.cnblogs.com/yansz001216/p/17590166.html

相关文章

  • 洛谷 P3243 [HNOI2015] 菜肴制作 - toposort 需自己理解翻译题面
    P3243[HNOI2015]菜肴制作题目描述知名美食家小A被邀请至ATM大酒店,为其品评菜肴。ATM酒店为小A准备了\(n\)道菜肴,酒店按照为菜肴预估的质量从高到低给予\(1\)到\(n\)的顺序编号,预估质量最高的菜肴编号为\(1\)。由于菜肴之间口味搭配的问题,某些菜肴必须在另一些......
  • 重做 CF 295B Greg and Graph 以及理解 Floyd
    Floyd原理简析Floyd的原理其实是DP,定义\(\mathrm{dp}[S][i][j]\)表示在仅经过点集\(S\)里的点的条件下,从\(i\)到\(j\)的最短路距离初始状态\(S\)为空,\(\mathrm{dp}[\varnothing][i][j]\)就等于\(i,j\)间的边长,没有边就是正无穷转移方程,在加入一个新的点\(k\)......
  • kmp算法的个人理解
    最长前后缀:假设有一段字符串:"aabaa"则这段字符串的前缀有:aaaaabaaba后缀:aaabaaabaa求最长公共前后缀的方法:找到前缀和后缀中相同的字符串:aaa其中最长的字符串为aa则"aabaa"这个字符串的最长公共前后缀为aaaa其长度为2按照以上的方式逐个计算"aabaa"中的每个子字符串得到......
  • java中关于多态的理解
    多态:是同一个行为具有多个不同表现形式或形态的能力。在代码的运用中主要是关于子类中方法的重写,实现了同一个父类接口可以进行不同子类中重写的方法publicclassGeometricOject{//父类publicdoublefindArea(){return0.0;}}publicclassCircleext......
  • rtos 理解
    1:操作系统中挂起(suspend)和阻塞(pend/block)的区别如下:一:挂起是一种主动行为,因此恢复也应该要主动完成;而阻塞则是一种被动行为,是在等待事件或资源时任务的表现,你不知道他什么时候被阻塞(pend),也就不能确切知道他什么时候恢复阻塞。而且挂起队列在操作系统里可以看成一个,而阻塞队列则......
  • 阅读圣经丨测试上下文理解
    在《圣经2》中,关于上下文理解这一块,白茶看到两个有意思的小测试,决定分享给各位小伙伴。这是一份销售数据,将其导入到PowerBI中。结果如图。现在开始进行问题描述。问题一:为数据模型添加计算列,输入如下代码公式,结果是什么?销售额=SUM('示例'[销售价])A、[销售额]所在的每一行的数......
  • 深入理解Mysql索引
    在数据库中,最常用的SQL操作之一就是SELECT语句,它负责数据的检索。而在SELECT语句背后,与索引的交互密不可分。为了优化数据库性能和加快查询速度,开发者们往往优先考虑调整索引。让我们深入了解索引的背后故事。这篇文章将从什么是索引,索引的分类,索引的底层数据数据结构,跟大家一起......
  • 重学HTTP:理解同源策略和CORS
    ​每次遇到跨域、代理、CORS这几个词都懵懵的,我决定一次把他们都搞明白,以后遇到他们再也不用害怕了。一、什么是同源策略?同源策略是在1995年由Netscape公司引入到浏览器的,目前所有浏览器都支持,它是浏览器最重要的安全保障,目的是严格管理不同网站间相互的资源访问(严格来说是不同......
  • BufferCache的简单理解
    对于磁盘和文件系统来讲Buffer对应磁盘数据的缓存,用于读或写。Cache对应文件数据的页缓存,用于读或写。Buffer可以用来聚合多个写操作,Cache则可以理解为预读操作,文件系统通过这两种方式提升磁盘IO性能。对于网络协议来讲只有Buffer的概念,该Buffer对应数据的收发缓冲区。对于c......
  • 深入理解 Serverless 计算的并发度
    作者:西流背景2019年Berkeley预测Serverless将取代Serverful计算[1],成为云计算的计算新范式。Serverless为应用程序开发提供了一种全新的系统架构,其凭借着弹性伸缩省事省心,按需付费更低成本、聚焦业务降低OPS这三大核心价值,将开发人员从繁重的手动资源管理和性能成本优......