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

 更新时间:2022年08月06日 09:55:10   作者:Bruce小鬼  
变量与注释是表达作者思想的基础,他们对代码质量的贡献母庸质疑,这篇文章主要介绍了Python变量与注释高级用法,需要的朋友可以参考下

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.弄错接口注释的受众

到此这篇关于Python变量与注释高级用法的文章就介绍到这了,更多相关Python变量与注释内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决keras加入lambda层时shape的问题

    解决keras加入lambda层时shape的问题

    这篇文章主要介绍了解决keras加入lambda层时shape的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 如何在Python中实现goto语句的方法

    如何在Python中实现goto语句的方法

    这篇文章主要介绍了如何在Python中实现goto语句的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python中8种运算符介绍以及示例

    Python中8种运算符介绍以及示例

    在Python编程中运算符是用于执行各种操作的特殊符号或关键字,下面这篇文章主要给大家介绍了关于Python中8种运算符介绍以及示例的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • python:print格式化输出到文件的实例

    python:print格式化输出到文件的实例

    今天小编就为大家分享一篇python:print格式化输出到文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python实现简单神经网络算法

    python实现简单神经网络算法

    这篇文章主要为大家详细介绍了python实现简单神经网络算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • OpenCV指纹识别实现代码实例

    OpenCV指纹识别实现代码实例

    使用OpenCV进行指纹识别涵盖特征提取与匹配,通过SIFT和FLANN实现匹配点计算,进而识别指纹ID和姓名,尽管OpenCV具备强大的图像处理功能,指纹识别依旧面临挑战,需要的朋友可以参考下
    2024-10-10
  • python从内存地址上加载python对象过程详解

    python从内存地址上加载python对象过程详解

    这篇文章主要介绍了python从内存地址上加载pythn对象过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Jupyter中markdown的操作方法

    Jupyter中markdown的操作方法

    Jupyter Notebook是基于网页的用于交互计算的应用程序,Jupyter notebook,作为Python广受欢迎的一款IDLE,其直观性、简易性、易于阅读等优点广受许多Python用户所推荐,这篇文章介绍Jupyter中markdown的操作,感兴趣的朋友一起看看吧
    2024-01-01
  • 运行python脚本更改Windows背景

    运行python脚本更改Windows背景

    这篇文章主要介绍了运行python脚本更改Windows背景,使用常用的命令更改桌面背景,以更改ctype中的系统参数,下面来看看具体得更改过程吧
    2022-01-01
  • Python 使用类写装饰器的小技巧

    Python 使用类写装饰器的小技巧

    装饰器是一个返回函数的函数。写一个装饰器,除了最常见的在函数中定义函数以外,Python还允许使用类来定义一个装饰器。这篇文章给大家分享Python 使用类写装饰器的小技巧,一起看看吧
    2018-09-09

最新评论