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

Python中的函数

一、函数参数与返回值基础知识

1、不要使用可变类型(list等)作为参数默认值,用None来代替。

参数默认值只会在函数定义阶段被创建一次,之后无论创建多少次,函数内拿到的默认值都是同一个对象,为规避这个问题,一般会用None来代替可变默认类型对象。

2、使用标记对象,可以严格区分函数调用时是否提供了某个参数。

所谓标记对象,是专门定义一个独一无二的变量类型,当用户调用函数确实没有传递某个参数时、默认值会变成这个标记对象,那么我们就可以知道服务到底有没有传这个变量了、而不是仅仅通过None来判断。

3、定义仅限关键字参数,可以强制要求调用方提供参数名,提升可读性。
4、函数应当拥有稳定的返回类型,不要返回多种类型。
5、适合返回None的情况——操作类函数、查询类型函数中表示意料之外的缺失值
6、在执行失败时,相比返回None,直接抛出异常更合适。
7、如果提前返回结果可以提升可读性,就提前返回,不要去追求所谓的“单一出口”。

二、代码可维护性技巧

1、不要编写太长的函数,虽然长度没有强制标准,但65行是一个危险的信号。
2、圈复杂度是评估函数复杂程度的常用指标,一般超过10的函数都需要重构。
3、抽象与分层思想可以帮助我们更好地构建与管理复杂的系统。
4、同一个函数内的代码应该处于同一抽象级别

简单来说,按照职能、数据流、业务流进行分级分类,逐一递进,然后做模块和函数的抽象与划分,不要一股脑都写在一起。
比方说通过页面查询后端数据,就可以分解成接口View层、请求处理与参数校验层,以及数据查询抽象Data层。

三、函数与状态

1、没有副作用的无状态纯函数比较易于理解、维护,但大多数时候“状态”不可避免。
2、避免使用全局变量给函数增加状态。
3、当函数状态较为简单时,可以使用闭包技巧

所谓闭包技巧,就是在函数内再定义一个函数,而后使用nonlocal来对外层函数的状态记录变量进行更新,举例:

def counter():value = 0def _counter():# nonlocal 用来标注变量来自上层作用域,如果不标明,内层函数将无法直接的修改外层函数变量nonlocal valuevalue += 1return valuereturn _counter> c = counter()
> c()
1
> c()
2
> c2 = counter()
> c2()
1

4、当函数需要较为复杂的状态管理时,建议定义类来管理状态。

四、语言机制对函数的影响

1、functools.partial()可以用来快速构建偏函数。
2、functools.lru_cache()可以用来给函数添加缓存。
3、比起mapfilter,列表推导式的可读性更强。
4、lambda函数知识一种语法糖,可以使用operator模块等方式来替代它。
5、Python语言里的递归限制较多,可以的话,请尽量使用循环来替代。

参考内容:《Python工匠——案例、技巧与工程实践》

相关文章:

Python中的函数

一、函数参数与返回值基础知识 1、不要使用可变类型(list等)作为参数默认值,用None来代替。 参数默认值只会在函数定义阶段被创建一次,之后无论创建多少次,函数内拿到的默认值都是同一个对象,为规避这个问…...

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具,手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后,开发的界面化操作软件,方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件,得到如下目录,双击打开 pngPackerGUI.…...

Docker快速安装Mariadb11.1

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 Mari…...

CuratorFrameworkFactory.builder()方法可配置属性

CuratorFrameworkFactory.builder()方法可以配置以下属性: 1. connectString:ZooKeeper服务器的连接字符串。 2. sessionTimeoutMs:ZooKeeper会话超时时间。 3. connectionTimeoutMs:ZooKeeper连接超时时间。 4. retryPolicy&…...

鸿蒙 ark ui 轮播图实现教程

前言: 各位同学有段时间没有见面 因为一直很忙所以就没有去更新博客。最近有在学习这个鸿蒙的ark ui开发 因为鸿蒙不是发布了一个鸿蒙next的测试版本 明年会启动纯血鸿蒙应用 所以我就想提前给大家写一些博客文章 效果图 具体实现 我们在鸿蒙的ark ui 里面列表使…...

看不惯AI版权作品被白嫖!Stability AI副总裁选择了辞职,曾领导开发Stable Audio

近日,OpenAI的各种大瓜真是让人吃麻了。 而就在Sam Altmam被开除前两天,可能没太多人注意到Stability AI副总裁Newton—Rex因看不惯StabilityAI在版权保护上的行为选择辞职一事。 大模型研究测试传送门 GPT-4传送门(免墙,可直接…...

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…...

leetcode 32最长有效括号 34在排序数组中查找元素的第一个和最后一个位置

32. 最长有效括号 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s "(()" 输出:2 解释:最长有效括号子串是 "()" 示例 2&a…...

【附代码】判断线段是否相交算法(Python,C++)

【附代码】判断线段是否相交算法(Python,C) 文章目录 【附代码】判断线段是否相交算法(Python,C)相关文献测试电脑配置基础向量旋转向量缩放向量投影推导 点乘定义推导几何意义 叉乘定义推导几何意义 判断线…...

PDF控件Spire.PDF for .NET【转换】演示:将 PDF 转换为 word、HTML、SVG、XPS

本文我们将演示如何通过调用 Spire.PDF 提供的方法 PdfDocument.SaveToStream() 将 PDF 页面转换为 HTML、Word、SVG、XPS、PDF 并将它们保存到流中。并且从Spire.PDF版本4.3开始,它新支持转换定义范围的PDF页面并将其保存到流中。 Spire.Doc 是一款专门对 Word 文…...

【FLink】水位线(Watermark)

目录 1、关于时间语义 1.1事件时间 1.2处理时间​编辑 2、什么是水位线 2.1 顺序流和乱序流 2.2乱序数据的处理 2.3 水位线的特性 3 、水位线的生成 3.1 生成水位线的总体原则 3.2 水位线生成策略 3.3 Flink内置水位线 3.3.1 有序流中内置水位线设置 3.4.2 断点式…...

github访问不了问题

git clone github上的项目的时候,不是访问不了,就是克隆过程被中断了 最近找到一个代理,从代理那里clone而不是github上 GitHub代理 – 初果编程...

【Java】认识String类

文章目录 一、String类的重要性二、String类中的常用方法1.字符串构造2.String对象的比较3.字符串查找4.转换5.字符串替换6.字符串拆分7.字符串截取8.其他操作方法9.字符串的不可变性10.字符串修改 三、StringBuilder和StringBuffer 一、String类的重要性 在C语言中已经涉及到…...

算法——滑动窗口(Sliding Window)

一、背景知识 滑动窗口算法(Sliding Window): 在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。题型一:固定长度题型二:不固定长度 二、例…...

Android异步之旅:探索AsyncTask

前言: 在Android应用程序开发中,异步操作是非常常见的需求。比如,我们可能需要在后台线程中执行网络请求、数据库操作或者其他耗时的任务,而不阻塞UI线程。为了实现这些异步操作,Android提供了多种方式,其…...

kibana 7安装

手动安装 下载 wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.15-linux-x86_64.tar.gz 解压 mv kibana-7.17.15-linux-x86_64.tar.gz /usr/local tar -zxvf kibana-7.17.15-linux-x86_64.tar.gz chown -R es:es kibana-7.17.15-linux-x86_64修改配置 s…...

为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案

在生产环境中我们会遇到一些问题,此文主要记录并复盘一下当时项目中的实际问题及解决过程。 背景简述 最初系统上线后都比较正常风平浪静的。在系统运行了一段时间后,业务量上升后,生产上发现java应用内存占用过高,服务器总共64…...

大模型变身双面人:虚假新闻制造机VS假新闻鉴别大师!

大家是怎样看待大型语言模型生成信息的可靠性呢? 尽管大语言模型生成的内容“像模像样”,但这些模型偶尔的失误揭示了一个关键问题:它们生成的内容并不总是真实可靠的。 那么,这种“不保真”特性能否被用来制造虚假信息呢&#x…...

WordPress网站如何修复数千个帖子的SEO错误

在本教程中,我们将向您展示如何解决您经常犯的SEO错误。 最好的是您不必花费太多时间,因为您不需要打开并编辑每个帖子。 相反,我们将向您展示如何使用 WordPress 内的电子表格来修复 WordPress 帖子的 SEO。 在这里,我们为您提…...

Mac如何搭建Vue项目

目录 一、安装node 二、安装NPM 1、本地安装和全局安装 2、通过Node.js官方安装程序安装 3、通过Homebrew安装 三、NPM常用命令 1、查看模块的版本号 2、安装指定版本 3、卸载模块 4、更新模块 5、查看模块信息 6、查看模块地址 7、更新命令 8、卸载NPM 四、安装…...

FlexASIO终极指南:让普通声卡也能享受专业级ASIO低延迟音频体验

FlexASIO终极指南:让普通声卡也能享受专业级ASIO低延迟音频体验 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https:/…...

如何高效使用网盘直链解析工具:8大平台全攻略终极指南

如何高效使用网盘直链解析工具:8大平台全攻略终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

GPT-SoVITS语音合成实测:仅需1分钟音频,克隆效果超自然

GPT-SoVITS语音合成实测:仅需1分钟音频,克隆效果超自然 1. 引言:声音克隆技术的突破 想象一下,你只需要提供1分钟的语音样本,就能让AI完美模仿你的声音——这不是科幻电影,而是GPT-SoVITS带来的真实能力。…...

别再折腾官方SDK了!手把手教你用这个优化版WPS Web Office V3 SDK快速集成(附Java/Solon Demo)

告别官方SDK的繁琐:高效集成WPS Web Office V3的实战指南 如果你正在寻找一种更简单、更高效的方式来集成WPS Web Office V3,那么你来对地方了。本文将带你深入了解如何利用优化版SDK快速完成集成,避开官方SDK的种种坑点,节省宝贵…...

网易云音乐终极增强方案:5分钟解锁完整曲库与云盘快传

网易云音乐终极增强方案:5分钟解锁完整曲库与云盘快传 【免费下载链接】myuserscripts 网易云音乐油猴脚本:歌曲下载、转存云盘、云盘歌曲快传、云盘匹配纠正... 项目地址: https://gitcode.com/gh_mirrors/my/myuserscripts 还在为网易云音乐中无法收听周杰…...

LED改造卤素台灯:节能高效技术解析

1. 卤素台灯LED改造的价值与背景传统卤素台灯作为办公和家居照明的常见选择,其核心问题在于能效低下。一颗50W的卤素灯泡实际光效仅为14-18流明/瓦,这意味着超过80%的电能转化成了无用的热能。我曾用红外测温仪实测过工作中的卤素灯泡表面温度——轻松突…...

Notepad++ 开发者福音:集成Hypnos-i1-8B插件实现代码注释与逻辑解释

Notepad 开发者福音:集成Hypnos-i1-8B插件实现代码注释与逻辑解释 1. 引言:代码理解的痛点与解决方案 作为一名开发者,你是否经常面对这样的困境:接手一个遗留项目,面对满屏没有注释的复杂代码;或者自己几…...

别再为论文配图头秃了!国产生物医学绘图平台BioGDP,一站式解决素材、版权、效率三大难题

科研人谁懂啊!画论文机制图、流程图、综述图熬到大半夜,素材画风乱、细节不严谨、投稿还被问版权,简直是科研路上的 “拦路虎”!一款国产生物医学绘图平台BioGDP,在实际使用中表现突出,能够有效解决上述痛点…...

电磁 + 散热 + 电路全仿真,看懂新版 ANSYS 2025 详细下载安装教程附安装包

ANSYS Electronics 2025 R1 就是电子行业的 “全能仿真神器” ,不管是做手机射频、汽车电机、电脑 PCB 板,还是芯片、5G 基站,只要涉及 “电磁、散热、电路” 相关的设计,用它就能提前模拟效果,不用反复做物理样机&…...

VibeCoding:用即时反馈与微项目重塑编程入门体验

1. 项目概述:从零开始的编程“心流”体验 如果你刚接触编程,打开编辑器,面对一片空白的屏幕,是不是常常感到无从下手?或者,你写了几行代码,但总觉得过程磕磕绊绊,像在解一道永远解不…...