@和-> 代表什么?

Python装饰器与类型注解

在def定义函数的时候, @和-> 代表什么?

@property

def attrs(self) -> _Attrs:

    pass

 @property是一个装饰器,它能够使得类把一个方法变成属性调用的。

 

关于 -> _Attrs

->常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型,从而方便开发人员使用。比如:

def add(x, y) -> int:

  return x+y

这里面,元数据表明了函数的返回值为int类型。
至于楼主问题中的,-> _Attr则表明函数返回的是一个外部可访问的类的私有变量。

 

 

class Student(object):

    def get_score(self):

         return self._score

 

    def set_score(self, value):

        if not isinstance(value, int):

            raise ValueError('score must be an integer!')

        if value < 0 or value > 100:

            raise ValueError('score must between 0 ~ 100!')

        self._score = value

 

 

不过,这样看起来有些麻烦,实际上python获取、设置类的变量(非私有变量)可以直接通过如下方式:

 

class Student(object):

    pass

 

s = Student()

s.score = 90

print(s.score) # 90

 

这样看起来是不是很简单?但是也有危险,这样对于类的变量的赋值的类型是不可确定的,无法对变量赋值类型进行检查限制,比如可以赋值为整数、字符串、boolean变量等。想要实现这样获取值、赋值,也不是不行,通过@property就可以实现:

 

class Student(object):

    @property

    def get_score(self):

         return self._score

    @property

    def set_score(self, value):

        if not isinstance(value, int):

            raise ValueError('score must be an integer!')

        if value < 0 or value > 100:

            raise ValueError('score must between 0 ~ 100!')

        self._score = value

 

s = Student()

s.score = 90

print(s.score) # 90

s.score = '100' #报错

 

 

 

 

 

 

 

 

<think>我们根据用户的问题引用的内容,来回答流程图中表示开始、处理、判断、循环结束的标准方框类型。 根据引用[1]:流程图使用一些标准符号,如决策用菱形框表示,具体活动用方框表示。 引用[2]中也有说明:应该只有1条连接线输入一个判定符号,但是有2到3根连接线输出判定符号,每根代表1个可能的决策。仅有一根连接线用于连接结束符号。 结合标准流程图规范,我们总结如下: 1. **开始/结束**:使用**圆角矩形**(或椭圆形)表示。开始符号通常只有一个输出箭头,结束符号只有一个输入箭头。 2. **处理步骤**(具体操作):使用**矩形**表示。 3. **判断**(决策):使用**菱形**表示。它有一个输入箭头,但输出箭头通常有两个(是/否)或多个(根据决策条件)。 4. **循环**:在流程图中,循环通常通过判断流程线的回溯来表示,因此循环结构本身没有特定的符号,而是由判断菱形流程线组成。但有时也会使用专门的循环结构符号(如两个嵌套的矩形,中间有循环条件),不过标准流程图中更常用菱形箭头来表示循环条件。 5. **输入/输出**:使用**平行四边形**表示。但用户问题中没有提到,这里补充说明。 另外,用户提供的流程图中还出现了: - 条件分支(如“有运动”):使用菱形(判断)后接条件分支的箭头,并在箭头上标注条件。 - 循环:主循环(C)通过从多个步骤返回到主循环的箭头来表示。 因此,针对用户的问题,我们回答: 标准方框类型: - 开始/结束:圆角矩形 - 处理步骤:矩形 - 判断:菱形 - 循环:在标准流程图中,循环结构由判断菱形流程线(箭头)构成,没有单独的循环方框。 - 结束:圆角矩形(同开始) 注意:用户提供的流程图中,主循环(C)使用了一个矩形(标注为“主循环”),但实际上循环结构是通过流程线返回来表示的。在流程图中,我们通常不会用一个单独的符号表示循环,而是用判断流程线来构建循环。 下面我们按照用户流程图中的步骤,标注每个步骤应该使用的符号: A[开始] -> 圆角矩形 B[初始化硬件] -> 矩形 C{主循环} -> 这里用菱形?但通常主循环是一个持续的过程,在流程图中,我们通常用一个矩形表示循环体(即主循环内的操作),而循环的持续则通过流程线从循环体末尾返回到循环开始来表示。但用户这里用了一个花括号,实际上在标准流程图中,循环结构没有特定的符号,而是用流程线表示循环。因此,C步骤可以视为一个处理步骤(矩形),然后通过从后面的步骤(如H的“否”分支)返回到C来表示循环。 然而,观察用户流程图,C被表示为菱形(花括号在流程图中通常不用,而是用菱形或矩形)。实际上,在流程图中,我们通常用判断来表示循环条件,但这里的主循环是一个无限循环(直到CTRL+C退出),所以我们可以这样表示: C -> 可以是一个矩形(表示进入主循环),然后主循环内的步骤按顺序执行,并在最后通过流程线返回C(即循环开始)。但用户将C表示为菱形,可能是想表示一个循环条件(是否继续循环),但用户没有在C上写条件,而是直接分支到不同的检测步骤。 因此,建议将C改为矩形(处理步骤),因为它代表的是“执行主循环”这个动作,而循环的持续通过流程线返回来表示。 但是,引用[2]指出:流程图应该清晰、工整、易于理解。不要有含糊的地方。所以,我们按照标准符号重新绘制: 开始(圆角矩形)-> 初始化硬件(矩形)-> 主循环(矩形)-> 检测红外信号(矩形)-> ... 然后,在流程的最后(比如处理完报警声后)用流程线返回到主循环(矩形)的前面。 但是,用户流程图中,主循环(C)后面有两个分支:检测红外信号检测运动传感器,这实际上是一个并行的检测?在单线程程序中,这通常表示顺序执行,但流程图画成了分支。实际上,我们应该按顺序执行:先检测红外信号,然后检测运动传感器,然后再回到主循环开始?或者根据某种调度?这里用户流程图使用了分支,可能是表示两个独立的检测,但程序可能是顺序执行或者通过中断等机制。为了清晰,我们通常按顺序执行来画。 然而,用户流程图的结构是: C(主循环)同时分支到D(检测红外信号)F(检测运动传感器),然后各自处理。这在实际流程中是不可能的,除非是并行处理。所以,这里可能应该画成顺序执行:先D后F,或者先F后D,然后回到C。 但用户流程图的结构可能是想表达:在主循环中,会检测两个独立的事件(红外信号运动传感器),这两个事件是独立的,所以用分支表示。在标准流程图中,我们可以用两个并行的处理步骤,但通常流程图是顺序的,所以更合理的画法是: 主循环内: 步骤1:检测红外信号 步骤2:检测运动传感器 或者,如果两个检测是条件触发的,则应该用判断(菱形)分别判断是否有红外信号是否有运动。 不过,用户的问题主要是符号的使用,所以我们重点放在符号上。 综上所述,我们给出用户流程图中每一步的标准符号: A: 开始 -> 圆角矩形 B: 初始化硬件 -> 矩形 C: 主循环 -> 这里实际上是一个处理步骤(矩形)?但循环通常是通过流程线返回来表示的,所以C可以作为一个矩形(表示主循环开始),然后后面跟着循环体内的步骤。 但是,用户将C表示为花括号(在文本流程图中),并分支到两个步骤,这并不标准。在标准流程图中,我们通常不会用一个符号表示整个循环,而是用流程线返回来表示循环。 因此,我们建议将C改为一个矩形,标注为“主循环开始”或类似,然后后面的步骤都是循环体内的步骤,并在循环体最后用流程线返回到C(主循环开始)之前。 但是,用户流程图中,C后面有两个分支,并且每个分支都会回到C(通过流程线),所以C实际上是一个汇聚点(多个流程线指向它)。在标准流程图中,我们可以使用一个连接点(圆形)来表示循环的起点,但更常见的做法是直接用流程线返回到前面的一个步骤(比如在循环体最后画一个箭头指向循环体开始)。 由于用户的问题集中在方框类型,我们按照标准符号重新定义: 开始:圆角矩形 初始化硬件:矩形 主循环:这里不需要一个单独的符号,而是通过流程线形成循环。所以,我们可以将“主循环”作为一个注释,或者用一个矩形表示循环体的开始(但实际作用不大)。通常,循环体由多个步骤组成,循环条件由判断步骤决定。 在用户流程图中,循环条件实际上是隐含的(一直循环直到退出),所以我们可以这样画: 开始 -> 初始化硬件 -> 进入循环体(这里可以不用符号,直接开始循环体内的步骤)-> 检测红外信号 -> ... -> 最后一步(比如报警声结束后)用箭头指回“检测红外信号”之前(即循环体开始)。 但是,用户流程图中有一个退出条件(CTRL+C),所以应该在主循环中有一个判断是否收到CTRL+C信号。所以,我们可以在循环体内增加一个判断步骤(菱形)来检测退出信号。 因此,根据标准,我们调整后的流程图符号: A: 圆角矩形(开始) B: 矩形(初始化硬件) C: 这里我们改为一个判断步骤(菱形),判断是否收到CTRL+C信号。如果是,则执行退出;否则,执行循环体内的步骤。 但是,用户原流程图中,C是主循环,然后有两个分支(DF),所以C可能不是判断,而是循环体的开始。因此,我们可以在循环体开始处加一个判断(用于退出),然后再执行其他步骤。 由于用户原图已经存在,我们按照原图步骤对应的符号: D: 检测红外信号 -> 矩形(处理步骤) E: 处理遥控指令 -> 矩形 F: 检测运动传感器 -> 矩形 G: 设置倒计时标志 -> 矩形 H: 倒计时标志? -> 菱形(判断) I: 执行倒计时显示 -> 矩形 J: 倒计时结束? -> 菱形 K: 设置蜂鸣器标志 -> 矩形 L: 蜂鸣器标志? -> 菱形 M: 发出报警声 -> 矩形 N: 清理资源退出 -> 圆角矩形(结束) 而C(主循环)在用户流程图中用花括号表示,但实际在流程图中,我们可以用一个矩形(或省略,直接用流程线连接循环体内的步骤)。但用户流程图中,C有多个输入(来自B、H的“否”、M)多个输出(到D、F、N),这不符合标准(一个处理步骤通常只有一个输入一个输出)。因此,C应该是一个连接点(多个流程线进入,然后分发到循环体内的步骤)。在标准流程图中,我们可以用连接符(圆形)或者直接将多个流程线指向循环体内的第一个步骤。 所以,我们建议将C改为一个连接点(圆形),表示循环的入口点,然后从该连接点分支到循环体内的各个检测步骤(DF)。但这样画会使得流程图复杂。 另一种方式是:将C视为一个并行开始(但标准流程图不支持并行),所以更合理的做法是顺序执行:先检测红外信号,再检测运动传感器,然后回到循环开始(即C点)。这样,C点就可以省略,而用流程线从循环体最后一步返回到循环体第一步(检测红外信号)之前。 因此,我们重新绘制流程图(用标准符号): 开始(圆角矩形)-> 初始化硬件(矩形)-> 循环开始点(连接点,圆形,可选)-> 检测红外信号(矩形)-> 处理遥控指令(矩形)-> 检测运动传感器(矩形)-> 有运动?->(菱形)是->设置倒计时标志(矩形)-> 倒计时标志?(菱形)->是->执行倒计时显示(矩形)->倒计时结束?(菱形)->是->设置蜂鸣器标志(矩形)->蜂鸣器标志?(菱形)->是->发出报警声(矩形)-> 然后,从报警声后(以及各个判断的“否”分支)返回到循环开始点(即检测红外信号之前)。 另外,在循环体内,需要增加一个判断是否收到CTRL+C信号(菱形),如果有,则退出到清理资源退出(结束)。 这样,循环体包括:红外检测、运动检测以及后续可能的倒计时报警。并且在每一步后都要判断是否有CTRL+C(为了及时退出),或者将CTRL+C的判断放在循环体的开始或结束。 综上所述,用户原流程图中的C(主循环)在标准流程图中并不对应一个特定的符号,而是通过流程线的返回来表示循环。因此,在绘制时,我们应避免使用一个单独的方框来表示整个循环,而是将循环体内的步骤按顺序排列,并在最后用流程线返回到循环体开始。 因此,回答用户的问题: 标准方框类型: - 开始/结束:圆角矩形 - 处理步骤(包括初始化、检测、设置标志、执行显示、发出报警声等):矩形 - 判断(条件分支,如是否检测到运动、倒计时标志、倒计时结束、蜂鸣器标志、CTRL+C等):菱形 - 循环:没有单独的符号,由流程线返回判断菱形构成 - 连接点(当流程图跨页或需要减少交叉时):圆形 另外,用户流程图中出现的条件分支(如F-->|有运动|G)中的“有运动”应写在流程线上(靠近箭头),而不是在符号内。 最后,我们按照标准符号规范,将用户提供的文本流程图转换为标准流程图(使用正确的符号): A: 圆角矩形(开始) B: 矩形(初始化硬件) (循环开始)-> 这里不需要符号,但可以用一个圆形连接点(可选) D: 矩形(检测红外信号) E: 矩形(处理遥控指令) # 注意:这里E之后应该继续到F,而不是回到C F: 矩形(检测运动传感器) F->G: 流程线上标注“有运动” G: 矩形(设置倒计时标志) H: 菱形(倒计时标志?) H->I: 是 I: 矩形(执行倒计时显示) J: 菱形(倒计时结束?) J->K: 是 K: 矩形(设置蜂鸣器标志) H->循环开始: 否(直接回到循环开始,即D之前) L: 菱形(蜂鸣器标志?) # 注意:这里K之后应该到L L->M: 是 M: 矩形(发出报警声)-> 然后回到循环开始(D之前) 同时,在循环体内的任何位置,如果检测到CTRL+C(用一个判断菱形,可以放在循环开始处),则跳转到N。 N: 圆角矩形(清理资源退出) 注意:由于用户原图在C处有CTRL+C分支,我们可以在循环开始处(D之前)加一个判断菱形,判断是否按下CTRL+C,如果是则到N,否则执行D。 因此,我们添加一个步骤: C: 菱形(判断是否按下CTRL+C?)-> 是:N;否:D 这样,整个流程图就符合标准了。 总结:用户流程图中各步骤应使用的符号: A: 圆角矩形 B: 矩形 C: 菱形(我们添加的CTRL+C判断) D: 矩形 E: 矩形 F: 矩形 G: 矩形 H: 菱形 I: 矩形 J: 菱形 K: 矩形 L: 菱形 M: 矩形 N: 圆角矩形 循环通过从M(报警声后)H的“否”分支等返回到C(CTRL+C判断)之前来表示。 由于用户原图没有明确CTRL+C的判断位置,我们将其放在循环体开始处(每次循环都先判断是否退出)。 以上回答基于流程图标准符号规范[^1][^2]。</think>根据流程图标准符号规范(ISO 5807/ANSI X3.5)引用内容,流程图中不同步骤应使用以下标准方框类型: ### 标准符号规范 1. **开始/结束步骤** 📌 **圆角矩形** - 表示流程起点或终点 - 示例: ``` ╭──────────╮ │ 开始 │ ╰──────────╯ ``` - 对应流程图中: `A[开始]` `N[清理资源退出]`[^1][^2] 2. **处理步骤(操作)** 📌 **标准矩形** - 表示具体操作或计算 - 示例: ``` ┌───────────┐ │ 初始化硬件 │ └───────────┘ ``` - 对应流程图中: `B[初始化硬件]`, `E[处理遥控指令]`, `G[设置倒计时标志]`, `I[执行倒计时显示]`, `K[设置蜂鸣器标志]`, `M[发出报警声]`[^1][^2] 3. **判断步骤(决策)** 📌 **菱形** - 表示条件分支,必须有 ≥2 个出口 - 出口需标注条件(是/否) - 示例: ``` ┌──────────┐ │ 条件成立? │ └───┬──┬───┘ 是↓ ↓否 ``` - 对应流程图中: `H{倒计时标志?}`, `J{倒计时结束?}`, `L{蜂鸣器标志?}`[^1][^2][^3] 4. **循环结构** 📌 **组合实现**(无独立符号) - 通过 **判断菱形 + 流程线返回** 表示 - 示例: ``` ┌───────┐ │ 条件? ├─是─→ 操作 └───┬───┘ ↓否 ←───┘ ``` - 对应流程图中: `C{主循环}` 通过 `H -->|否| C` `M --> C` 形成循环[^2][^3] 5. **输入/输出**(图中未出现) 📌 **平行四边形** - 表示数据输入/输出 - 示例: ``` ╭────────────╮ │ 读取传感器值 │ ╰────────────╯ ``` ### 用户流程图符号修正建议 | 原步骤 | 标准符号 | 说明 | |---------------|--------------|----------------------------------------------------------------------| | `C{主循环}` | **矩形** | 应改为操作步骤(如`[进入主循环]`),循环通过后续返回箭头实现[^2] | | `F -->|有运动| G` | **菱形+箭头** | `F`应为矩形,条件"有运动"标注在流程线上(非独立符号)[^2] | | `D[检测...]` | **矩形** | 正确,属于操作步骤 | | `C -->|CTRL+C| N` | **菱形** | 需增加判断步骤:`C --> P{CTRL+C?} -->|是| N`[^2] | ### 流程图绘制关键原则 1. 判断符号必须有 ≥2 个出口,且明确标注条件(是/否)[^2] 2. 流程方向推荐从上到下或从左到右[^2] 3. 避免连接线交叉,复杂流程使用连接点(圆形符号)[^2] 4. 循环结构通过 **判断+返回箭头** 实现,无独立循环符号[^3] 5. 每个符号内描述需简洁,必要时用注释框补充[^2] > 示例修正片段: > ``` > C[进入主循环] --> P{CTRL+C?} > P -->|是| N[清理资源退出] > P -->|否| D[检测红外信号] > D --> E[处理遥控指令] > ... > M[发出报警声] --> C ⬅️ 循环返回 > ``` 通过标准符号规范可确保流程图逻辑清晰、易于理解[^1][^2][^3]。 --- **相关问题** 1. 流程图中的决策步骤是否必须有两个出口? 2. 如何表示流程图中的并行处理过程? 3. 流程图与UML活动图的主要区别是什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值