记录-编程素养

本文围绕Python编程展开,介绍了编程风格原则,如以人为本、低耦合高复用等。详细阐述了PEP8规则,包括缩进、行长度、空行、注释、命名约定等方面的规范,还给出了编程建议,如避免依赖特定实现、正确比较单例对象等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.人为本(一个人的代码风格统一)
2.黑盒子(低耦合,简单接口,高复用,即功能简单,能多次反复使用最好)
3.简洁
4.所见即所用(不要总是提前定义变量)
5.剃刀原则(如无必要勿增实体)
可以损失一定的便利性来换取一定的可读性

遵循各语言的编程风格
1.一行不能太长,弯弯拐拐
2.PEP8编程风格
3.不要写死(特别是如路径之类的)

附PEP8规则(python)转自吴意外
比较需要注意的:

缩进

每一级缩进使用4个空格。
续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。
推荐:

#与左括号对齐
foo = long_function_name(var_one, var_two,

                        var_three, var_four)
                        
#用更多的缩进来与其他行区分
    def long_function_name(

        var_one, var_two, var_three,

        var_four):

    print(var_one)
    
#挂行缩进应该再换一行
foo = long_function_name(

    var_one, var_two,
    
    var_three, var_four)

不推荐:

#没有使用垂直对齐时,禁止把参数放在第一行
    foo = long_function_name(var_one, var_two,

    var_three, var_four)

#当缩进没有与其他行区分时,要增加缩进
    def long_function_name(

    var_one, var_two, var_three,

    var_four):

    print(var_one)

行的最大长度

所有行限制的最大字符数为79。
没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72。

空行

顶层函数和类的定义,前后用两个空行隔开。
类里的方法定义用一个空行隔开。
Imports 导入

导入通常在分开的行,例如:

推荐: import os

    import sys

不推荐:  import sys, os

也可以:

from subprocess import Popen, PIPE

导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。

导入应该按照以下顺序分组:

标准库导入
相关第三方库导入
本地应用/库特定导入
你应该在每一组导入之间加入空行。

推荐使用绝对路径导入,如果导入系统没有正确的配置(比如包里的一个目录在sys.path里的路径后),使用绝对路径会更加可读并且性能更好(至少能提供更好的错误信息):

Comments 注释

与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释!
注释应该是完整的句子。如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。
如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。
在句尾结束的时候应该使用两个空格。
当用英文书写时,遵循Strunk and White (译注:《Strunk and White, The Elements of Style》)的书写风格。
在非英语国家的Python程序员,请使用英文写注释,除非你120%的确信你的代码不会被使用其他语言的人阅读。

Block Comments 块注释

块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别。块注释的每一行开头使用一个#和一个空格(除非块注释内部缩进文本)。
块注释内部的段落通过只有一个#的空行分隔。

Inline Comments 行内注释

1.有节制地使用行内注释。
2.行内注释是与代码语句同行的注释。行内注释和代码至少要有两个空格分隔。注释由#和一个空格开始。

事实上,如果状态明显的话,行内注释是不必要的,反而会分散注意力。比如说下面这样就不需要:x = x + 1 # Increment x

但有时,这样做很有用:x = x + 1 # Compensate for border

Documentation Strings 文档字符串

要为所有的公共模块,函数,类以及方法编写文档说明。
非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。
PEP 257描述了写出好的文档说明相关的约定。特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行,例如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

对于单行的文档说明,尾部的三引号应该和文档在同一行。

约定俗成的命名约定
Names to Avoid 应避免的名字

永远不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。
在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替。

Class Names 类名

类名一般使用首字母大写的约定。
在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。
注意,对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。

Function Names 函数名

函数名应该小写,如果想提高可读性可以用下划线分隔。
大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用(比如 threading.py),保持向后兼容性。

Function and method arguments 函数和方法参数

始终要将 self 作为实例方法的的第一个参数。
始终要将 cls 作为类静态方法的第一个参数。
如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此 class_ 比 clss 更好。(也许最好用同义词来避免这种冲突)

Programming Recommendations 编程建议

代码应该用不损害其他Python实现的方式去编写(PyPy,Jython,IronPython,Cython,Psyco 等)。 比如,不要依赖于在CPython中高效的内置字符连接语句 a += b 或者 a = a + b。这种优化甚至在CPython中都是脆弱的(它只适用于某些类型)并且没有出现在不使用引用计数的实现中。在性能要求比较高的库中,可以种 ”.join() 代替。这可以确保字符关联在不同的实现中都可以以线性时间发生。
和像None这样的单例对象进行比较的时候应该始终用 is 或者 is not,永远不要用等号运算符。

另外,如果你在写 if x 的时候,请注意你是否表达的意思是 if x is not None。举个例子,当测试一个默认值为None的变量或者参数是否被设置为其他值的时候。这个其他值应该是在上下文中能成为bool类型false的值。

使用 is not 运算符,而不是 not … is 。虽然这两种表达式在功能上完全相同,但前者更易于阅读,所以优先考虑。

推荐:if foo is not None
不推荐:if not foo is None:

### 关于信息素养大赛中的图形化编程题目 在全国青少年信息素养大赛中,图形化编程部分通常涉及通过拖拽模块完成特定任务或解决给定问题。这类题目旨在考察参赛者对于逻辑思维、算法设计以及基本编程概念的理解。 #### 示例题目分析 考虑一道具体的图形化编程题目[^1]: **题目描述** 下图是由多个正方形组合绘制而成的图案。为了实现这一效果,在所提供的程序框架内存在若干待填充区域。具体而言,参与者需确定这些位置应填入何种指令才能使最终输出符合预期目标——即构建出由一系列相连的小方格构成的大矩形结构。 ![示意图](https://example.com/image.png) **解答思路** 针对上述情况,假设已知条件为每个小单元格边长固定不变,则可通过循环语句控制重复执行画线动作;同时利用变量记录当前坐标变化规律,从而确保每次迭代都能准确无误地定位下一个顶点的位置并连接起来形成封闭轮廓。此外还需注意方向调整机制的设计,以便能够灵活应对不同朝向的需求。 ```scratch when green flag clicked set pen color to [black v] repeat (number of squares horizontally) repeat (number of squares vertically) move (side length) steps turn cw (90) degrees ... end turn ccw (90) degrees move (-total width) steps pen up move (distance between rows) steps pen down ``` 此段伪代码展示了如何运用嵌套循环来创建多行多列布局下的矩形单元阵列。其中省略号代表了内部还需要补充完整的绘图命令序列,比如转向操作或是抬笔/落笔切换等细节处理措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔兔包点吃机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值