函数设计概念和指南

《高质量程序设计指南C/C++语言》笔记总结 在对林锐,韩永泉编著的《高质量程序设计指南C/C++语言》的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下: 1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换。但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针;但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换。因此 阅读详情

以下内容翻译至《Learning Python》17章的Function Design Concepts一节。有些地方翻译的不到位,敬请谅解,建议阅读原文,下面是原文翻译。

当你开始使用函数的时候,你马上就会面对的一个问题是“如何把多个部件结合到一起”,例如如何把一个任务分解成多个有目的的函数(内聚),函数之间如何通讯(耦合)等等。在函数的设计过程中你需要考虑内聚(cohesion)、耦合(Coupling)、函数的大小等一系列问题,这些都会影响到函数结构的分析和设计。下面为Python的初学者提供几条通用的设计指南。 耦合:使用“参数”做输入,用“返回”做输出。我们应该努力使一个函数独立于函数以外的东西。“参数”和“返回”通常都是使函数和外部隔离的最好的方法。 耦合:只在万不得已时候才使用全局变量。全局变量通常都是一种很差劲的函数间通讯的方式会导致若干函数间的相互依赖、时间选择(timing issue)等问题,并且最终从而使程序变得难以调试、维护和修改。 耦合:除非调用者期望,否则不要改变“可改变”的参数。函数能够改变部分传递过来的参数的值。但就和全局变量一样,这会导致调用和被调用函数间的依赖,从而使得函数变得特别的“特殊”和“易碎”。 内聚:每个函数应该有它自己单一的、唯一的目的。一个设计良好的函数应该只做一件事情,对函数功能的描述用一句简单的话就可以加以总结。当你发现对某个函数的描述过于宽泛的(例如,这个函数实现了我所有的程序),或是描述内容中包含了很多的关联(例如,这个函数给店员增加提成并提交一个pizza订单),你可以考虑将这个函数分割成几个独立的更为简单的函数。否则就无法重用混杂在一起的代码。 函数大小:每个函数都应该相对的小。这个原则实际上会和上面那个内聚目标关联在一起的。如果你的函数需要占据多个页面话,最好能够分割他们。在Python编程中如果出现某个function要依赖很长的、嵌入很深的嵌入函数这通常就是设计有问题的信号。让函数保持小且简单。 耦合:避免直接修改在另一个模块文件中的变量。作为参考,要谨记跟全局变量会耦合函数一样,跨多个模块文件修改变量会导致模块变得难以理解和重用。只要有可能就要使用存取方法,而不是直接的赋值语句。 下面这张图是对上述几条规则的总结。图的左边是函数的输入(包括了参数、全局变量、文件/流等等),图的右边是函数的输出(包括了返回语句、也变参数、全局变量)。很多函数设计人员更喜欢使用参数做为输入,用返回语句做为输出。

cb4ee938b4420507b8998fba当然对于之前的设计准则也会有不少的例外,例如Python中面向对象的支持。对象中的函数会通过self(也就是java和c中的this)来修 改对象中的状态信息(self.name=’bob’)。如果没有了对象的支持,开发人员很容易会用全局变量(上例中的name就会引入一个global 的name变量来替换)来实现几个函数间的相互调用和通讯,这样就会引入一些副作用和危险。

总结
作者在《Learning Python》描述的这段内容超越了特定语言的,使用各种语言的开发人员都可以从以上的内容中汲取函数设计的经验。

14、数据库设计与概念建模:本科生教学指南 本文详细介绍了在本科教学中教授数据库设计和概念数据建模的方法和实践。内容涵盖了教学大纲制定、案例分析(如公共图书馆)、课程材料准备、实践环节安排以及评估方式设计。此外,还提供了具体的SQL语句示例,讲解了触发器、约束、函数和存储过程的应用,并讨论了数据完整性、一致性及性能优化策略。旨在帮助学生掌握数据库设计的核心知识和技能。 阅读详情

相关推荐

Oracle存储过程函数生成实战指南

本文还有配套的精品资源,点击获取 简介:Oracle存储过程和函数是数据库管理中的重要组成部分,用于创建复杂业务逻辑和数据处理流程。本实战指南将详细介绍如何在Oracle数据库环境中设计、编写、测试和调用存储过程和函数,包括参数声明、PL/SQL块、调用方法和性能优化等关键知识点。通过实践"qlr(生成权利人表信息).sql"文件中的存储过程或函数,学生将掌握在实际项目中应...

weixin_42599558的博客 1076

函数设计原则

文章目录1 函数设计原则 1 函数设计原则 函数设计原则1: 函数从意义上应该是一个独立的功能模块。 函数名要在一定程度上反映函数的功能。 函数参数名要能够体现参数的意义。 尽量避免在函数中使用全局变量。 函数设计原则2: 当函数参数不应该在函数体内部被修改时,应加上const声明。 如果参数是指针,且仅作输入参数,则应加上const声明。 函数设计原则3: 不能省略返回值的类型 如果函数...

木子皿--啥都不会的菜鸟 2100

数字信号处理与滤波器设计基础指南

htmltable {th, td {th {pre {简介:本书详细介绍了数字信号处理的基础知识以及滤波器设计方法,强调了采样定理和滤波器在信号处理中的应用。覆盖了IIR和FIR滤波器的设计,窗函数法、频率采样法和脉冲响应不变法等设计技术,并讨论了评估滤波器性能的标准。此外,书中还涉及了在实际硬件上实现滤波器时需要考虑的浮点与定点计算的差异。整体而言,本书适合数字信号处理的初学者,旨在提供全面的入门知识和实践指导。

weixin_42097508的博客 276

visualSTATE学习

模拟学习测试状态机工程链接: 链接:https://github.com/Paulliam/visualSTATE_learningTest visualSTATE软件ver9.1,破解软件,学习手册StepByStep_vS,Visualstate状态机建模学习手册,基于状态机的嵌入式系统开发全部221页,用户指南UserGuide链接: 链接:https://pan.baidu.com/s/1RDtwSeNBCRg6wVBC7750Jw 提取码:s20o 学习使用validator验证器进行仿真:记录

Paulliam的博客 1914

UML建模在嵌入式开发中的应用VisualSTATE概念指南

VisualSTATE简要介绍,比较适用于基于RTOS的嵌入式软件设计

VisualSTATE概念指南(published).pdf

VisualSTATE 状态机概念指南--UML

python基础编程11—函数结构

当我们需要在程序中多次执行同一类型的任务时,不需要反复编写代码段来完成任务,而是可以利用函数工具来大大方便我们的编程工作。 函数是可重复使用的、用来实现相关联功能的代码段。 定义函数的基本结构是: def functionname( parameters ): "函数_文档字符串" function_suite return [expression] 定义函数以def关键词开头,后面跟着函数名、圆括号()、括号中的参数、冒号; 接着,在缩进块中编写函数体,函数的第一行语句一般是写文档字符

weixin_44645825的博客 1396

VisualSTATE概念指南3/4

VisualSTATE 是一个集成化的图形化的工具链,能支持从最初设计到最终产品代码集成的整个嵌入式开发周期,VisualSTATE工具链支持以下功能。 VisualSTATE是一个基于窗口的软件包,集成了开发、测试、基于状态机设计的嵌入式应用程序。它包括一个图形化的设计环境,包括测试工具、代码产生器和一个文件配置器。

函数设计的通用结构

文章目录函数设计的通用结构Monoid(幺半群)Functor(函子)Monad(单子) 函数设计的通用结构 Monoid(幺半群) 结合律(associativity)和同一律(identity)法则一起被成为monoid法则 一个 monoid 法则有如下构成: 一个类型 A 一个可结合的二元操作 op,它接收两个参数然后返回相同类型的值,对于任何 x: A, y: A, z: A 来说,这两个操作是等价的:op(op(x, y), z) == op(x, op(y, z)) 一个值,z

CodeFlight 270

VisualSTATE概念指南1/4

VisualSTATE 是一个集成化的图形化的工具链,能支持从最初设计到最终产品代码集成的整个嵌入式开发周期,VisualSTATE工具链支持以下功能。 VisualSTATE是一个基于窗口的软件包,集成了开发、测试、基于状态机设计的嵌入式应用程序。它包括一个图形化的设计环境,包括测试工具、代码产生器和一个文件配置器。

[QT笔记]QTableView与QTableWidget表头设置实战对比

本文深入对比了QT开发中QTableView与QTableWidget在表头设置上的核心差异与实践方法。QTableWidget提供开箱即用的便捷API,适合快速开发;而QTableView遵循模型-视图架构,表头数据由模型管理,虽设置稍复杂但灵活性与扩展性更强。文章通过实战代码示例,详细解析了两种组件的适用场景、性能考量及常见避坑指南,帮助开发者根据项目需求做出高效选择。

weixin_29018335的博客 322

Python-11:高阶函数和装饰器

高阶函数 实参高阶函数:参数是函数的函数 max/min max(序列, key=函数) :通过函数来定制求最大值的方式 sorted sorted(序列, key=函数):通过函数来定制将序列中的元素进行排序 map map(函数, 序列1, 序列2):产生一个新的序列,序列中的元素是序列1和序列2中元素通过指定的变换产生的 reduce reduce(函数, 序列, 初始值): 函数: ​ 第一个参数:第一次指向初始值,从第二次开始参数指向上次合并的结果 ​ 第二个参数:指向序列..

weixin_50995891的博客 637

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6614

NumPy 的入门指南,专为 Python 新手设计,帮助你快速掌握 NumPy 的核心概念和常用函数:

NumPy是Python科学计算的核心库,提供高效的多维数组(ndarray)操作,比原生列表快50倍以上。它支持向量化运算,无需循环即可批量处理数据,是Pandas等科学库的基础。NumPy的核心是多维数组,可通过多种方式创建,并具备形状、维度等属性。常用功能包括数组操作(索引、变形、合并)、数学运算(矩阵乘法、平方根)和统计计算(求和、均值)。通过学生成绩分析的实战示例,展示了NumPy在数据处理中的高效应用,如计算学科平均分和查找最高分学生。

2401_87975790的博客 681

SAP S4HANA F-02报错:更正统一日记账分类账的定制设置

消息号 FINS_ACDOC_CUST201 使用FINS_CUST_CONS_CHK_P去检查公司代码和分类账的设置 提示:过账期间变式为空(分类账 E1/公司代码 7500) 检查了表FINSC_LD_CMP 显示有分类账未分配过账期间变式 解决:后台配置定义分类账和货币类型的设置把过账变式维护下 路径:财务会计→财务会计全局设置→分类账→分类账→定义分类账和货币类型的设置 选中需要维护的分类账双击左侧的“分类账的公司代码设置”,找到对应的公司代码维护上即可。

qq_45068743的博客 6448

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

编程自学指南:java程序设计开发,Java 枚举类(Enum 类)详解,枚举类的概念和作用,枚举类的定义和基本使用方法枚举类中定义属性、方法和构造函数

编程自学指南:java程序设计开发,Java 枚举类(Enum 类)详解,枚举类的概念和作用,枚举类的定义和基本使用方法枚举类中定义属性、方法和构造函数

zl515035644的博客 1265

【笔记篇】Davinci Configurator OS模块(上)

主要讲解了AUTOSAR OS配置项和Vector MICROSAR OS的特性

weixin_47571898的博客 2274

Go 语言入门指南:从零开始掌握 Go 的核心概念

本文介绍了Go语言的基础知识,包括安装方法、基本语法和核心概念。首先展示了经典的"Hello, World!"程序示例,说明Go程序的基本结构。接着详细讲解了变量与常量的声明方式、数据类型以及控制结构(if、for、switch)。然后介绍了函数定义和方法的使用,包括多返回值和方法绑定。最后重点讲解了Go语言的并发特性,包括goroutine和channel的基本用法。全文循序渐进,帮助读者快速掌握Go语言的基础知识,为后续深入学习奠定基础。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1113

【Altium designer】如何添加过孔阵列

按下图1指示,执行【Tool】菜单栏下【Via Stitching/Shielding】选项卡中的【Add Stitching to Net...】选项 图1 “添加过孔阵列”选项 点击【Add Stitching to Net...】选项后,会跳出一个窗口,让我们设置过孔阵列的参数信息,如下图2所示。 图2 过孔阵列参数设置 过孔阵列区域:勾选该选项框,即可绘制多边形区域; 过孔内径与焊盘直径:比如内径 【Hole Size】设为12mil,焊盘直径【Diameter】设为24mil; .

夜半少年的博客 2万+

uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支

🏆 前端领域优质创作者 5641

Spectral 核心概念解析:构建高质量的 API 设计规范

在现代 API 开发中,设计优先(Design-First)的工作流越来越受到重视。然而,很多团队忽视了在 API 设计阶段引入代码检查(linting)工具的重要性。这类工具不仅能验证 OpenAPI 或 JSON Schema 文档是否符合规范,更重要的是能帮助团队强制执行统一的 API 风格指南,确保 API 的一致性、有效性和高质量。 ## Spectral 的三大核心概念 Spect...

gitblog_00296的博客 430

电磁场仿真:电磁场基础理论_(13).微波技术基础

微波是指频率在300 MHz到300 GHz之间的电磁波。这一频率范围对应的波长为1米到1毫米。

2401_87715305的博客 1318

函数(方法)

@函数(方法) 方法的概念及作用: 1.概念:方法,也叫函数,但是一般在java中都叫方法,可以看成是一个可以完成独立功能的代码块,可以反复使用,每次使用都是独立的!存在于类的结构体 2.作用:完成功能,数据的处理!方法可以拿来反复使用。每次使用都是独立的 方法的语法: 返回值类型 方法名字( 形式参数 ){ } 1)返回值: 必须有 2)方法名字:必须有 3)小括号: 必须有 4)形式参数:...

zq2585258的博客 234

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaScript开发者应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。 更新 若有觉得更好的文章或者视频,可以贡献出来,觉得有误的,请联系我删除。 文章的排序优化,前面的文章是介绍概念,后面的文章是深入解读。 将原文的 “高阶函数” 和 “map, reduce, filter” 合并为 “map, reduce, filter 等高阶函数” 增加 “promise” 概念(替换删除的 “高阶函数”) 2018-10-24 更新:@.

极客神殿 694

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Unity ML-Agents 强化学习环境设计指南

Unity ML-Agents 强化学习环境设计指南 【免费下载链接】ml-agents Unity-Technologies/ml-agents: 是一个基于 Python 语言的机器学习库,可以方便地实现机器学习算法的实现和测试。该项目提供了一个简单易用的机器学习库,可以方便地实现机器学习算法的实现和测试,同时支持多...

gitblog_00551的博客 464

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: PL/0语言编译程序分析
下一篇: 常用:javascript字符串函数 收藏
一剑平江湖
博客等级 码龄18年 207粉丝 1070原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值