当前位置: 首页 > java >正文

Python 基础之函数命名

几个问题

  • 使用描述性蛇形命名法(snake_case)
  • Python函数名应使用什么大小写格式?
  • 为什么函数名要具有描述性?
  • 方法的命名规范是什么?
  • 函数、变量和类的命名有何区别?

Python函数的命名有一些不可违背的硬性规则,还有一些虽不报错但影响代码Python风格的重要约定。恰当的命名能提升代码可读性、便于维护,还能减少错误。


使用描述性蛇形命名法(snake_case)

Python中,对象的标识符称为名称(names)。函数名通过def关键字定义。命名时可使用大小写字母、数字(不能开头)和下划线(_)。虽然Unicode字符也可用,但建议仅使用ASCII字符以保证通用性。

有效与无效名称示例

名称有效性说明
number有效
first_name有效
first name无效不能含空格
first_10_numbers有效
10_numbers无效不能以数字开头
_name有效
greeting!无效仅允许下划线作为标点
café有效但不推荐

根据PEP 8风格指南,函数名应使用小写字母+下划线分隔(蛇形命名法)。例如:calculate_total()优于total()


函数名应使用什么大小写格式?

不同编程语言偏好不同格式(如蛇形、驼峰)。Python函数推荐使用蛇形命名法(全小写+下划线分隔),例如:

find_winner()  
save()  

特殊前缀/后缀规则

  • 单前导下划线(如_internal()):表示内部使用,非强制私有。
  • 单后缀下划线(如import_()):避免与关键字冲突。
  • 双前导下划线(如__private()):触发名称改写(name mangling),用于类属性。

虽然蛇形命名是标准,但偶尔会见到驼峰式(如findWinner()),通常因历史遗留或跨语言习惯。除非维护旧代码库,否则应避免。


为什么函数名要具有描述性?

可读性是现代编程的核心原则。对比以下两段代码:

# 不清晰的命名  
def init(n):  return " ".join(f"{i[0]}." for i in n.split())  # 清晰的命名  
def get_initials(full_name):  return " ".join(f"{name[0]}." for name in full_name.split())  

后者通过函数名get_initials和参数名full_name直接表明用途,调用示例:

>>> get_initials("James Clerk Maxwell")  
"J. C. M."  

命名平衡

  • 避免过长(如find_number_of_vowels()可简化为find_num_vowels())。
  • 早期编程受限于硬件需简短命名,如今更强调可读性。

方法的命名规范是什么?

方法(类中的函数)命名规则与普通函数相同,但需注意:

  • 特殊方法(如__init__()):双下划线包裹,由Python调用。
  • 非公共方法:单前导下划线(如_verify_funds()),提示内部使用。

示例:银行账户类

class BankAccount:  def __init__(self, account_number, balance):  self.account_number = account_number  self.balance = balance  def _verify_funds(self, amount):  # 内部方法  return self.balance >= amount  def withdraw(self, amount):       # 公共接口  if self._verify_funds(amount):  self.balance -= amount  return True  return False  

函数、变量和类的命名有何区别?

  • 变量:蛇形命名(如selling_price),常量全大写(如TIME_LIMIT)。
  • :首字母大写的驼峰式(如BankAccount),但内置类型(如list)例外。
  • 异常类:驼峰式+后缀Error(如SyntaxError)。

1. 函数名应使用什么大小写格式?

  • 小写蛇形命名法(snake_case):单词全小写,用下划线连接
    例如:calculate_total(), get_user_data()
  • 为什么?:这是Python标准约定,与其他命名形式(如类名)形成明确区分。

2. 为什么函数名要具有描述性?

  • 提高可读性:描述性名称能直接表达函数的功能(如 validate_email()check() 更清晰)。
  • 减少注释依赖:好的函数名可以替代部分注释,让代码更自解释。
  • 便于维护:清晰的命名能帮助其他开发者(或未来的你)快速理解代码逻辑。

3. 方法的命名规范是什么?

  • 与函数相同:实例方法、类方法、静态方法均使用 小写蛇形命名法(snake_case)。
    例如:class User: def get_name(self): ...
  • 特殊情况
    • 魔术方法(双下划线包围):__init__, __str__
    • 私有方法(单下划线开头):_internal_logic()(仅约定,非强制私有)

4. 函数、变量和类的命名区别

类型命名规范示例
函数小写蛇形(snake_case)process_data()
方法小写蛇形(snake_case)user.get_id()
变量小写蛇形(snake_case)max_count = 100
大驼峰(PascalCase)class DatabaseClient:
常量大写蛇形(SCREAMING_SNAKE_CASE)MAX_SIZE = 1024
  • 关键区别
    • 类名用大驼峰,其他(函数/方法/变量)用小写蛇形。
    • 常量通过全大写显式标识。

附:PEP 8命名原则

  • 一致性:项目内保持命名风格统一。
  • 避免歧义:如不要用l(小写L)、O(大写o)等易混淆字符。
  • 描述性 > 简洁calculate_monthly_revenue() 优于 calc_mrev()
http://www.xdnf.cn/news/6835.html

相关文章:

  • Redis持久化机制详解:保障数据安全的关键策略
  • MySQL表的约束(上)
  • LeetCode 第 45 题“跳跃游戏 II”
  • Spring之Bean的初始化 Bean的生命周期 全站式解析
  • PyTorch实现CrossEntropyLoss示例
  • AIGC在电商行业的应用:革新零售体验
  • 计算机网络(1)——概述
  • Docker入门指南:镜像、容器与仓库的核心概念解析
  • Redis的Hot Key自动发现与处理方案?Redis大Key(Big Key)的优化策略?Redis内存碎片率高的原因及解决方案?
  • STM32 | FreeRTOS 递归信号量
  • C# 深入理解类(静态函数成员)
  • golang中的反射示例
  • 大模型AI原生应用效果测试与评估视频课来啦
  • Python多进程编程执行任务
  • sudo apt update是什么意思呢?
  • (3)python爬虫--Xpath
  • 2022河南CCPC(前四题)
  • pip升级或者安装报错怎么办?
  • 致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)
  • 最小二乘法拟合直线,用线性回归法、梯度下降法实现
  • SLAM定位常用地图对比示例
  • 【深度学习新浪潮】大模型时代,我们还需要学习传统机器学习么?
  • 计算机视觉与深度学习 | Python实现EMD-VMD-LSTM时间序列预测(完整源码和数据)
  • React Flow 节点事件处理实战:鼠标 / 键盘事件全解析(含节点交互代码示例)
  • 跨国应用程序的数据存储方案常见的解决方案
  • R语言空间数据处理入门教程
  • Redis——过期删除策略和内存
  • golang读、写、复制、创建目录、删除、重命名,文件方法总结
  • AI517 AI本地部署 docker微调(失败)
  • Baklib知识中台构建企业智能服务新引擎