首页 > 其他分享 >条件语句和清晰代码风格

条件语句和清晰代码风格

时间:2023-11-28 20:13:38浏览次数:27  
标签:语句 case return point 代码 else print end 清晰

if语句

def f(x):
  print("A", end="")
  if x == 0:
      print("B", end="")
      print("C", end="")
  print("D")
f(1)
AD

//

def abs1(n):
  if n < 0:
      n = -n
  return n

写在一行

def abs2(n):
  if n < 0: n = -n
  return n

除非有特殊原因,否则强烈建议不要这样写

多个返回语句

def abs4(n):
  return (n < 0)*(-n) + (n>=0)*(n) # 这家伙长得太奇怪了

最好不要这样写

验证结果正确性

print("abs1(5) =", abs1(5), "and abs1(-5) =", abs1(-5))
print("abs2(5) =", abs2(5), "and abs2(-5) =", abs2(-5))
print("abs3(5) =", abs3(5), "and abs3(-5) =", abs3(-5))
print("abs4(5) =", abs4(5), "and abs4(-5) =", abs4(-5))
abs1(5) = 5 and abs1(-5) = 5
abs2(5) = 5 and abs2(-5) = 5
abs3(5) = 5 and abs3(-5) = 5
abs4(5) = 5 and abs4(-5) = 5

if-else 语句 if-else statement

x = input("x=")
x = float(x)
print("hello")
if x < 10:
  print("wahoo!")
print("goodbye")
x=9
hello
wahoo!
goodbye

if-elif-else 语句

ef f(x):
  print("A", end="")
  if x == 0:
      print("B", end="")
      print("C", end="")
  elif x == 1:
      print("D", end="")
  else:
      print("E", end="")
      if x == 2:
          print("F", end="")
      else:
          print("G", end="")
  print("H")

if-else 推导式 if-else expression

def abs7(n):
  return n if (n >= 0) else -n
print("abs7(5) =", abs7(5), "and abs7(-5) =", abs7(-5))
abs7(5) = 5 and abs7(-5) = 5

这个函数的作用是计算一个数的绝对值。在Python中,可以使用条件表达式(也称为三元运算符)来实现这个功能。条件表达式的语法是:

value_if_true if condition else value_if_false

在这个例子中,value_if_truen本身,conditionn >= 0value_if_false-n。当n >= 0成立时,条件表达式的值为n;否则,条件表达式的值为-n

//

match-case 语句

简单解释

match subject: case <pattern_1>: <action_1> case <pattern_2>: <action_2> case <pattern_3>: <action_3> case _: <action_wildcard>

简单模式:匹配一个字面值

让我们把这个例子看作是模式匹配的最简单形式:一个值,即主词,被匹配到几个字面值,即模式。在下面的例子中,status 是匹配语句的主词。模式是每个 case 语句,字面值代表请求状态代码。匹配后,将执行与该 case 相关的动作:

def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" case _: return "Something's wrong with the internet"如果传给上述函数的 status 为 418,则会返回 "I'm a teapot"。 如果传给上述函数的 status 为 500,则带有 _ 的 case 语句将作为通配符匹配,并会返回 "Something's wrong with the internet"。 请注意最后一个代码块:变量名 _ 将作为 通配符 并确保目标将总是被匹配。 _ 的使用是可选的。

你可以使用 | (“ or ”)在一个模式中组合几个字面值:

case 401 | 403 | 404: return "Not allowed"

无通配符的行为

如果我们修改上面的例子,去掉最后一个 case 块,这个例子就变成:

def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" 如果不在 case 语句中使用 _,可能会出现不存在匹配的情况。如果不存在匹配,则行为是一个 no-op。例如,如果传入了值为 500 的 status ,就会发生 no-op。

带有字面值和变量的模式

模式可以看起来像解包形式,而且模式可以用来绑定变量。在这个例子中,一个数据点可以被解包为它的 x 坐标和 y 坐标:

point is an (x, y) tuple

match point: case (0, 0): print("Origin") case (0, y): print(f"Y={y}") case (x, 0): print(f"X={x}") case (x, y): print(f"X={x}, Y={y}") case _: raise ValueError("Not a point") 第一个模式有两个字面值 (0, 0) ,可以看作是上面所示字面值模式的扩展。接下来的两个模式结合了一个字面值和一个变量,而变量 绑定 了一个来自主词的值(point)。 第四种模式捕获了两个值,这使得它在概念上类似于解包赋值 (x, y) = point 带有字面值和变量的模式

模式可以看起来像解包形式,而且模式可以用来绑定变量。在这个例子中,一个数据点可以被解包为它的 x 坐标和 y 坐标:

point is an (x, y) tuple

match point: case (0, 0): print("Origin") case (0, y): print(f"Y={y}") case (x, 0): print(f"X={x}") case (x, y): print(f"X={x}, Y={y}") case _: raise ValueError("Not a point") 第一个模式有两个字面值 (0, 0) ,可以看作是上面所示字面值模式的扩展。接下来的两个模式结合了一个字面值和一个变量,而变量 绑定 了一个来自主词的值(point)。 第四种模式捕获了两个值,这使得它在概念上类似于解包赋值 (x, y) = point

更多内容见原文链接:https://blog.csdn.net/Datapad/article/details/123205558

清晰的代码风格 Clarity and style

请注意: 本节讨论的内容主要针对样式而非正确性,这里的所有例子都“正确的”,但有些例子比其他例子更巧妙,我们希望大家形成一个好的代码习惯。

否定条件(带有 else 部分)

# 可能不清晰的:
b = True
if not b:
  print('no')
else:
  print('yes')
yes
# 清晰的:
b = True
if b:
  print('yes')
else:
  print('no')
yes

空白的 if 部分

# 不清晰的:
b = False
if b:
  pass
else:
  print('no')
no
# 清晰的:
b = False
if not b:
  print('no')
no

用嵌套的 if 而不是 and 来判断

# 混乱的:
b1 = True
b2 = True
if b1:
  if b2:
      print('both!')
both!
# 清晰的:
b1 = True
b2 = True
if b1 and b2:
  print('both!')
both!

使用 if 而不是 else 来控制

# 可能会引入 bug:
b = True
if b:
  print('yes')
if not b:
  print('no')
yes
# 更好的做法:
b = True
if b:
  print('yes')
else:
  print('no')
yes

另外一个例子

# 又混乱又有产生 bug 的风险:
x = 10
if x < 5:
  print('small')
if (x >= 5) and (x < 10):
  print('medium')
if (x >= 10) and (x < 15):
  print('large')
if x >= 15:
  print('extra large')
large
# 更好的做法:
x = 10
if x < 5:
  print('small')
elif x < 10:
  print('medium')
elif x < 15:
  print('large')
else:
  print('extra large')
large

再来一个例子

# 又混乱又有产生 bug 的风险:
c = 'a'
if (c >= 'A') and (c <= 'Z'):
  print('Uppercase!')
if (c >= 'a') and (c <= 'z'):
  print('lowercase!')
if (c < 'A') or ((c > 'Z') and (c < 'a')) or (c > 'z'):
  print ('not a letter!')
lowercase!
# 更好的做法:
c = 'a'
if (c >= 'A') and (c <= 'Z'):
  print('Uppercase!')
elif (c >= 'a') and (c <= 'z'):
  print('lowercase!')
else:
  print('not a letter!')

使用一些 trick(如用算数逻辑来代替布尔逻辑)

# 不清晰的:
x = 42
y = ((x > 0) and 9)
# 清晰的:
x = 42
if x > 0:
  y = 99
 

标签:语句,case,return,point,代码,else,print,end,清晰
From: https://www.cnblogs.com/Shun-shun/p/17862879.html

相关文章

  • 4. Shell 循环语句
     重点:条件测试。read。Shell环境配置。case。for。find。xargs。gzip,bzip2,xz。tar。sed。1)循环1.1)循环执行介绍将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件。 重复运行次数循环次数事先已知循环次数事先未知 常见的循环的命令for......
  • 【Python爬虫】第11篇:Mongodb数据库进阶使用。从0到scrapy高手笔记(附代码,可自取)
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。全套笔记和代码自取地址:请移步这里感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~共8章,37子模块Mongodb数......
  • 【Python进阶】第7篇:TCP和socket客户端程序开发。总结md文档集合(已分享,附代码)
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。全套笔记和代码自取地址:请移步这里感......
  • emscripten 中c 代码引用外部js 函数
    主要是一个简单的学习,webassebly支持通过import调用环境的函数(比如调用浏览器或者nodejs中的一些方法)简单说明方法很多,包含了emscripten提供的调用js的宏,但是以下使用了一个emscripten提供的--js-library功能--js-library简单说明--js-library主要是实现emcc在编......
  • 一行代码——计算PI后15,000位
    先上代码a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",e+d/f))for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}运行的时候可能会有警告,像这样。但是不用管,直接运行就行了注意,一定要用\(C\)语言,不能用\(C++\)语言然后是优化版#inc......
  • 程序员如何做点属于自己的东西?做一个自己认为有价值的小项目?分享我的一个个人项目:代
     工作中经常会遇到很多小的知识点,或者突然有点想法,想记下来方面以后查找。网上搜索问题遇到好的回答希望保存下来,或做下修改成为自己知识。突然想写一点代码验证一点想法,这时不想开启电脑上的软件新建文本,就希望直接可以写代码,然后运行看效果。以上这些需求就是我想自己开发......
  • TruFor笔记和代码复现
    title:TruFor笔记和代码复现banner_img:https://cdn.studyinglover.com/pic/2023/11/35a3ffa0a81b1791e692c591a92b9256.pngdate:2023-11-2817:38:00tags:-图像伪造检测和定位TruFor笔记和代码复现最近有个新闻很火,说谷歌AI技术曾判定美国登月任务的照片存在虚假内......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范
    项目代码同步至码云weiz-vue3-template要求代码规范,主要是为了提高多人协同和代码维护效率,结合到此项目,具体工作就是为项目配置eslint和prettier。editorconfig安装EditorConfigforVSCode插件,根目录下新建.editorconfig文件,增加以下配置[*.{js,jsx,ts,tsx,vue}]......
  • 仅需三行代码! C# 快速实现PDF转PPT
    一般在会议、教学或培训活动中,我们都会选择PPT文档来进行内容展示。与PDF文档相比,PPT文档具有较强的可编辑性,可以随时增删元素,并且还可以设置丰富多样的动画效果来吸引观众注意。那么如何通过C#将PDF文档转为PPT文档呢?本文将教大家仅使用3行代码就实现这一功能。PDF转PPT所需工具......
  • 流程控制语句
    流程控制语句(if-elif-else)1.单分支语句(if)单分支结构指的是程序根据条件的成立与否常见的单分支结构语法是if语句if条件: #条件成立,执行此处代码#示例age=20ifage>=18:print("你成年了")2.双分支语句(if-else)双分支结构也是根据条件的成立与否,选......