条件控制循环和调试与PEP8规范的学习感想
在上一次python的基础语法的一轮学习之后我进一步学习了python的条件控制和循环语句。什么是条件语句呢它是通过一条或多条语句的执行结果True 或者 False来决定执行的代码块。通过下图我们可以更加直观地看出条件控制的实现什么是循环语句呢用概念性的话来说循环就是让计算机重复执行某一段代码直到满足特定条件才停止。同样上一段图帮助理解接下来就是详细梳理一下条件控制和循环语句的使用。一、条件控制1、if语句1.1、常用代码在运行代码之前让我们看看if语句的一些常用代码关键字 / 函数说明示例if条件判断语句当条件为 True 时执行代码块if x 0:elif多条件判断分支else ifelif x 0:else所有条件不满足时执行else:1.2、常用举例讲解让我们看一段代码x int(input请输入数字)if x 0:print (x)elif: x 0x 1print(x)else:x x -1print(x)那么运行的时候我们假设输入了一个3进行条件判断3 0满足第一个如果大于0的条件判断打印出3并结束进程输入一个-3进行条件判断-3 0不满足第一个大于0的条件往下判断满足第二个elif的条件打印出-2并结束进程。那么同样的当两者都不满足条件即为0时则判断的是else的条件打印出-1并结束进程。条件语句也有它的注意事项1、每个条件后面要使用冒号 :表示接下来是满足条件后要执行的语句块。2、使用缩进来划分语句块相同缩进数的语句在一起组成一个语句块。1.3、if语句常用运算符操作符描述小于小于或等于大于大于或等于等于比较两个值是否相等!不等于1.4、if嵌套在嵌套 if 语句中可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中例如if 表达式1: 语句 if 表达式2: 语句 elif 表达式3: 语句 else: 语句 elif 表达式4: 语句 else: 语句在输入数字后和之前一样会从上到下进行层级判定来打印结果。程序从外到内逐层判断只有外层条件成立才会进入内层继续判断外层不成立时内层语句根本不会被执行。2、循环语句2.1、while循环先让我们看看while循环的一般形式while 判断条件(condition)执行语句(statements)……再拿简单一点的代码示例来看看a 1while a 10a 1print(a)只要a一直小于10这个数字那么他就会一直循环下去直到不能满足循环条件为止。所以上方的打印结果会是从2到9的结果。2.2、无限循环while True当while循环中的条件表达式恒为真时会进入无限循环模式。当你使用while True时系统会默认你的条件恒为真于是直接进入无限循环。看一串代码while True:user_input input(请输入内容输入 q 退出)if user_input q:breakprint(你输入了, user_input)print(程序结束)运行结果请输入内容输入 q 退出hello你输入了 hello请输入内容输入 q 退出q程序结束如果我们不输入q使循环条件为假那他将一直循环下去while True:# 1. 做事# 2. 判断是否该退出if 退出条件:break2.3、for循环for 循环可以遍历任何可迭代对象如一个列表或者一个字符串。for循环的一般格式如下for variable in sequence:statementselse:statements代码示例sites [1,2,3,4]for site in sites:print(site)运行结果1234当列表没有元素时循环自动退出2.4、for与while的区别对比项for循环while循环循环次数固定/可数遍历某个序列列表、字符串、range等不确定只要条件成立就一直循环条件依赖依赖还有没有下一个元素依赖条件是否为真是否必须手动更新不需要自动取下一个必须在循环体里手动改变条件变量否则死循环适用场景我要循环N次 或 遍历每个元素我要循环直到某个条件不再成立何时进循环进入时就知道要循环多少次每次执行前才判断条件二、PEP8规范1. 代码布局Code Layout1.1、缩进使用4 个空格进行缩进禁用 Tab。续行应对齐或使用悬挂缩进正确 - 对齐 foo long_function_name(var_one, var_two, var_three, var_four) 正确 - 悬挂缩进 foo long_function_name( var_one, var_two, var_three, var_four) 错误 foo long_function_name(var_one, var_two, var_three, var_four)1.2、每行最大长度限制79 字符代码文档字符串/注释 72 字符。长行可通过括号隐式续行或换行连接。1.3、空行顶层函数和类之间用2 个空行。类内方法之间用1 个空行。函数内可适当用空行分隔逻辑块。1.4、import 导入每个 import 单独一行按顺序分组标准库第三方库本地应用/库import os import sys import requests from mypackage import module2. 空白与运算符在运算符两侧、逗号/冒号后加空格但函数括号内不加x 1 2 y (a b) * (c d) spam(ham[1], {eggs: 2}) x12 spam( ham[1], { eggs: 2 } )默认参数、关键字参数赋值处两边不加空格除非带类型注解def foo(a, b5): # ✅ def foo(a, b5) - int: # ✅ 有注解可以 def foo(a:int5): # ✅切片中冒号两侧不建议加空格。3. 命名规范Naming Conventions场景风格示例变量、函数、方法小写下划线my_var,do_work()常量大写加下划线MAX_WORKERS类名驼峰CapWordsMyClass模块、包简短小写utils.py私有用例模块内部单下划线前缀_privatename mangling类内私有双下划线前缀__private特殊方法双下划线两端__init__,__str__避免与内置冲突用list_代替list4. 表达式与语句一行只写一条语句。比较时应把较长的操作数放左边、较短的放右边提高可读性。4.1、错误写法对比# 应避免 if not x in lst: if x is not None and x 5:4.2、函数返回函数要么显式返回有意义的值要么统一return None不要混用。def foo(): return # 隐式返回 None不推荐混用带值返回5. 函数与类内部5.1、类定义方法参数第一个命名实例方法用self类方法用cls。5.2、类型注解def add(a: int, b: int) - int: return a b5.3、变量命名建议变量名要做到见名知意elapsed_time优于t。不要用l、O、I易混淆 1/0。6. 注释与文档字符串注释用#并留一个空格与代码同行时至少间隔两个空格。注释应为完整句子以句号结束。# 这是说明性注释 x 5 # 这是行内注释6.1、Docstring 规范每个模块、类、公开方法都应写 docstring。用三引号...结尾引号单独成行。def add(a: int, b: int) - int: 返回两个整数之和。 return a b7. 其他注意事项空函数体使用pass或写 docstring 占位。尾随空格不要残留Trailing Whitespace。编码Python 3 默认 UTF-8无需额外声明。运算符换行Python 3 建议运算符放在行首。# Python 3 推荐 total (a b c)三、学习总结这一轮学习围绕 Python 的条件控制和循环语句展开并在最后补充了PEP8 编码规范。整体下来我对“程序如何做判断、如何重复做事、如何把代码写得更规范”这三件事有了比较完整的认识。1、条件控制让程序学会做选择if / elif / else 是条件控制的核心结构程序从上到下依次判断一旦某个条件成立就执行对应代码块并跳过其余分支。冒号和缩进是语法的一部分每个条件后面必须跟冒号语句块靠缩进划分相同缩进的语句属于同一个块缩进错了逻辑就错了。常用运算符要记牢、、、、、!其中判断相等要用不能用。if 嵌套是逐层判断只有外层条件成立才会进入内层继续判断外层不成立时内层语句根本不会被执行。2、循环语句让程序学会重复while 循环依赖条件条件为真就一直执行因此循环体里必须手动改变条件变量否则容易变成死循环。while True 是常见的无限循环写法通常配合if 退出条件: break使用例如输入q就退出这种“先做事、再判断是否退出”的模式在实际开发中很常用。for 循环用于遍历可迭代对象列表、字符串、range等都可以遍历元素取完循环自动结束不需要手动维护计数器。for 与 while 的选择循环次数固定或需要遍历元素时用 for循环次数不确定、只依赖某个条件是否成立时用 while。3、PEP8 规范让代码更易读代码布局用 4 个空格缩进、禁用 Tab代码行不超过 79 字符顶层函数和类之间空 2 行类内方法之间空 1 行import 分行并按标准库、第三方库、本地库分组。空白与运算符运算符两侧、逗号冒号后加空格但函数括号内不加默认参数赋值处两边不加空格切片冒号两侧不加空格。命名规范变量和函数用小写下划线常量用大写加下划线类名用驼峰模块名简短小写私有成员用单下划线或双下划线前缀。表达式与语句一行只写一条语句函数要么显式返回有意义的值要么统一返回None不要混用。注释与文档字符串注释用#并留一个空格写成完整句子模块、类、公开方法都应写 docstring用三引号包裹。4、学习中的问题与改进方向代码示例要写成规范代码块之前记录示例时把代码拆成了多个段落既不方便复制运行也不符合 PEP8 的排版要求后续应统一用代码块呈现。注意细节写法例如input()的括号、elif x 0:的冒号位置、中文冒号与英文冒号的区别这些细节一旦写错程序就无法运行。养成边写边检查的习惯缩进、空格、命名这些看似琐碎的地方恰恰是 PEP8 最强调的部分也是代码可读性的基础。5、下一步计划接下来准备在掌握条件控制和循环的基础上继续学习函数与数据结构列表、字典、元组、集合并尝试把 PEP8 规范落实到每一次练习中做到“能跑通”和“写得好”同时兼顾。