详解Python变量与注释高级用法

作者:Bruce小鬼 时间:2022-08-06 08:17:08 

Python变量与注释高级用法

1.概述

好的变量和注释并非为计算机而写,而是为每个阅读代码的人而写。变量与注释是表达作者思想的基础,他们对代码质量的贡献母庸质疑。

2.变量

2.1.变量解包

1.什么是变量解包

把一个可迭代对象的所有成员,一次性的赋值给多个变量的过程就是变量解包。

2.变量解包语法

# 变量解包
username = ['zhangsan', '18']
name, age = username
print('name:{}, age:{} '.format(name, age))

# 嵌套类型变量解包
username = [1, ['zhangsan', 18]]
number, (name, age) = username
print('number:{}, name:{}, age:{}'.format(number, name, age))

# 匹配模式解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, *fruits, score = data
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))

# 切片解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, fruits, score = data[0], data[1:-1], data[-1]
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))

# 变量解包用到for循环
for name, age in [('zhangsan', 15), ('lisi', 18)]:
   print('name:{}, age:{}'.format(name, age))

# 单下划线变量名
username = ['zhangsan', 19]
name, _ = username
print(name, _)

2.2.给变量注明类型

1.变量注明类型介绍

python给变量注明类型,与java变量类型不同,python的变量类型只是一种提示功能,不提供任何校验功能。
因此传入的变量类型与校验类型不一致也不会报错。

变量注明类型语法非常简单,在变量名称后面用冒号分隔表名类型即可。

2.变量注明类型示例

# list表示参数为列表类型,int表示里面的成员是整形
def remove_invalid(item: list[int]):
   print(item)
# 传入符合变量类型参数
remove_invalid([1, 2, 3])
# 传入不符合变量类型参数,不影响函数执行结果。
remove_invalid(1)

# 类型注解使用demo
class Duck:
   def __init__(self, color:str):
       self.color = color
   # 为quack方法注明返回值类型为None
   def quack(self) -> None:
       print(f"Hi, I'm a {self.color} duck")

# -> List[Duck]:用typing模块的List对象为函数返回值标注具体类型
def create_random_ducks(number:int) -> List[Duck]:
   # 为变量加上类型声明
   ducks: List[Duck] = []

for _ in number:
       color = random.choice(['yellow', 'white', 'gray'])
       ducks.append(Duck(color=color))
   return ducks
ducks = create_random_ducks((1,2,3))
for duck in ducks:
   duck.quack()

2.3.变量命名原则

给变量起名主要有两种流派:一是通过大小写界定单词的驼峰命名,例如Java语言。二是通过下划线连接的蛇形命名,例如python语言。

  • 遵循PEP8原则

  • 描述性要强

  • 长度尽量短

  • 变量注明类型

  • 超短命名

1.遵循PEP8原则

PEP8原名《Python Enhacement Proposal #8》译为《8 号 Python 增强规范》为代码编写风格提供了指南,变量命名部分规范如下。

  • 普通变量,使用蛇形命名法,比如max_value

  • 常量,采用全部大写字母,使用下划线连接,比如 MAX_VALUE

  • 仅内部使用变量,在变量前增加下划线前缀,比如 _local_var

  • 变量名称与python关键字冲突时,在变量末尾追加下划线,比如 class_

2.描述性要强

写作过程中一项重要的工作就是为句子斟酌恰当的词语,不同的词语描述性的强弱是不同的。比如”冬天傲骨的梅花“ 就比 ”花“ 描述性要强。为变量命名和词语一样,同样有描述性强弱之分。
下面是描述性强弱不同的变量,对比可以感受到描述性强的变量名称使代码更易读。

# 描述性弱的变量名称:看不出它在描述什么
vlaue = process(s.strip())

# 描述性强的变量名称:从用户输入参数中解析出用户名称,并剔除参数中的空格。
username = extract_username(input_string.strip())

3.长度尽量短

假如一个特别长的重复出现,读者不会觉得它精确,反而是啰嗦难读。在保证描述性清晰前提下,尽量让名字简短易读,通常控制在4个单词内。

4.变量注明类型

虽然python的变量不需要声明类型,但是为了提升可读性,我们可以为变量注明类型。
除了为变量注明类型外,还有约定俗称的变量名称与类型建立匹配关系,下面是一些变量名称和类型匹配的例子。

变量名含义说明
is_superuser是否是超级用户is 表示是或不是
has_errors有没有错hans 表示有或没有
allow_empty是否允许空值allow表示是否允许

5.超短命令

在变量命名中有一类名称比较特别,只有一两个字母,通常他们分为两类,一类是大家约定俗称的短名字,另一类是起别名。

约定俗称常用名称

  • 数组索引三剑客 i、j、k

  • 某个整数 n

  • 某个字符串 s

  • 某个异常 e

  • 文件对象 fp

长名称起别名

is_not_normal as l

3.注释

注释不会影响代码的行为,它会影响代码的可读性。

3.1.注释类型

python的注释分为两种,一种是代码内注释,一种是函数、类的注释也称为接口注释。

行内注释

# 使用strip()去掉空格的好处:
# 1.数据库保存数据时占用空间更小
# 2.不必因为用户多打了空格而要求用户重新输入。

username = extract_username(input_string.strip())

接口注释

class Person:
# 使用三个单引号或三个双引号就是接口注释。
'''人
:param name: 姓名
: param age: 年龄
: param favrite_color: 最喜欢的颜色
'''
def __init__(self, name, age, favrite_color):
self.name = name
self.age = age
self.favrite_color = color

3.2.错误使用注释案例

1.用注释屏蔽代码

在编程中会用注释屏蔽代码,如果这些代码不需要了可以直接删掉,如果需要用到这些代码可以从Git仓库中找到。临时注释掉的大段代码,对于阅读代码的人来说是一种干扰,没有任何意义。

2.用注释复述代码

# 调用strip()去掉空格
input_string = input_string.strip()

上面这样的注释完全是冗余的,因为读者从代码本身就能读到注释里的信息。好的注释应该是这样

# 如果将带有空格的参数传递到后端处理,可能会造成服务奔溃
# 因此使用strip()去掉收尾空格
input_string = input_string.strip()

注释作为代码之外的说明性文字,应该尽量提供那些读者无法从代码里读出的信息,描述代码为什么要这么做,而不是简单复述代码本身。

除了为什么的解释性注释外,还有一种注释也很常见:指引性注释
这种注释不复述代码,而是简明扼要概括代码功能,起到”代码导读“作用。
指引性注释并不提供代码里读不到东西——假如没有注释,耐心读完所有代码也能知道代码做了什么。指引性注释就是降低代码认知的成本,让我们更容易理解代码的意图。

指引性注释示例

# 初始化访问服务的client对象
token = token_service.get_token()
service_client = ServiceClient(token = token)
service_client.ready()

3.弄错接口注释的受众

来源:https://blog.csdn.net/m0_38039437/article/details/126182699

标签:Python,变量,注释
0
投稿

猜你喜欢

  • Python的组合模式与责任链模式编程示例

    2023-05-08 07:03:43
  • PHP+MYSQL不恶补十句话

    2009-12-02 10:09:00
  • 提一个懒人需求——找遥控器的电视

    2009-03-23 18:16:00
  • python实现远程控制电脑

    2022-12-07 21:00:16
  • Python学习笔记(二)基础语法

    2022-03-08 19:55:34
  • Python将字符串常量转化为变量方法总结

    2023-07-14 00:36:58
  • python练习之循环控制语句 break 与 continue

    2022-04-15 12:31:20
  • python实现同时给多个变量赋值的方法

    2021-10-09 07:02:50
  • Python虚拟环境库virtualenvwrapper安装及使用

    2023-12-28 22:11:53
  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    2012-08-21 10:21:40
  • python分数表示方式和写法

    2021-07-08 18:09:19
  • python双向链表原理与实现方法详解

    2021-03-06 05:29:39
  • python中文分词,使用结巴分词对python进行分词(实例讲解)

    2023-03-15 13:37:30
  • python中的装饰器详解

    2022-08-14 04:32:05
  • Django中select_related和prefetch_related的用法与区别详解

    2023-10-08 12:38:08
  • MySQL优化之数据表的处理

    2008-12-22 14:45:00
  • python实现简单的飞机大战

    2023-07-08 09:16:10
  • ASP 常见对象总结(熟悉一下利用以后的开发使用)

    2011-03-07 10:57:00
  • 显示你个性的鼠标指针

    2011-06-14 09:41:41
  • Python模块的加载讲解

    2023-04-05 08:42:01
  • asp之家 网络编程 m.aspxhome.com