首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想减少基本相同的方法中的代码,并传入参数,但不知道从哪里开始?

要减少基本相同的方法中的代码并传入参数,可以通过创建一个通用的函数或方法来实现。以下是一些步骤来帮助你开始:

  1. 确定哪些代码是基本相同的,可以抽象出来作为一个通用方法。这些代码可能是在不同地方重复出现的相似逻辑或功能。
  2. 将这些基本相同的代码抽象成一个函数或方法。这个函数或方法应该接受参数,以便在每次调用时传入不同的值。
  3. 确定哪些参数是需要传入的。这些参数应该是在每次调用时会有所不同的值。
  4. 在函数或方法内部使用这些参数来执行相同的逻辑或功能。
  5. 在需要使用这个通用方法的地方,调用该函数或方法并传入相应的参数。

通过这种方式,你可以避免在多个地方重复编写相同的代码,提高代码的可维护性和重用性。

举例来说,假设你有两个函数分别用于计算矩形和圆形的面积:

代码语言:txt
复制
def calculate_rectangle_area(length, width):
    area = length * width
    return area

def calculate_circle_area(radius):
    area = 3.14 * radius * radius
    return area

可以看到,这两个函数中有一些相同的代码,即计算面积的公式。为了减少重复代码,可以创建一个通用的函数来计算面积,并传入相应的参数:

代码语言:txt
复制
def calculate_area(shape, *args):
    if shape == 'rectangle':
        area = args[0] * args[1]
    elif shape == 'circle':
        area = 3.14 * args[0] * args[0]
    return area

在这个例子中,我们创建了一个名为calculate_area的通用函数,它接受一个参数shape来指定形状(矩形或圆形),以及一个可变数量的参数*args来传入相应的参数值。函数内部根据形状的不同执行相应的计算逻辑,并返回计算得到的面积。

使用这个通用函数,可以通过传入不同的参数来计算矩形和圆形的面积:

代码语言:txt
复制
rectangle_area = calculate_area('rectangle', 4, 5)
circle_area = calculate_area('circle', 3)

这样,你就可以通过一个通用的函数来减少基本相同的方法中的代码,并根据需要传入不同的参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

写给精明Java开发者测试技巧

我们都会为我们代码编写测试,不是吗?毫无疑问,知道这个问题答案可能会 “当然,但你知道怎样才能避免写测试吗?” 到 “必须爱测试”都有。...那会帮助你减少脆弱测试,保证应用程序更加健壮。 与此同时,如果你答案是 “不,不编写测试。”,那么希望这些简单但有效技术可以让你了解编写测试带来好处。...但是,今天和你谈论一系列小建议,这些建议可以帮助你在头脑中理清测试自下而上是如何运作如何构造一个简单单元测试到对 mock(模拟) 和 spy(监视) 以及复制粘贴测试代码更高层次理解。...迪米特法则可以表述为一系列规则: 在方法,一个类实例可以调用该类其它方法; 在方法,实例可以查询自己数据,但不能查询数据数据(译者注:即实例数据比较复杂时,不能进行嵌套查询); 当方法接收参数时...有时,Spy应用程序在做什么,或者验证程序使用特定参数调用了特定方法调用了指定次数,是很有用。有时,我们触发数据库层,但又想模拟数据库返回给我们响应。

2.1K10

反思这五六年来写过代码

最近看了一些书,静下来想了:要避免写烂代码这个问题,不在于你掌握了多少编程技术,不在于你了解多少语言特性,一切都应该“你怎么看待写代码这项工作”开始。...相信绝大部分同行都有最基本职业道德,至少在职业生涯,还没有见到过由于发泄、报复或其他私人原因故意写一堆bug情况。...封装能够减少全局变量和自由变量使用,更容易测试 按照理解,封装就是为了复用代码,但后来却发现,往往在不知不觉,封装就与”易于维护“目的背道而驰,时不时需要修改原本已经封装好代码,比如给函数再加个参数...,由调用方自己查询传入商品,相当于组件只负责展示 为了代码复用,大概率会使用第一种方式,把看起来比较通用逻辑都给封装起来。...导致在不同业务场景,为了适配每个逻辑特殊性,额外做一些if..else判断。 后来才理解到,封装并不是物理位置把代码拆分到不同函数、类或文件,而应该是概念上,定义良好输入和输出。

20710
  • Android逆向——定位到某书 Sign 算法

    除此之外还有个思路,上文说到,自定义拦截器分为 Application 拦截器和 Network 拦截器,但不管哪一种,都需要在 OkHttpClient.Builder 链式代码通过 addInterceptor...我们想要定位到内容/加解密逻辑等等,基本都在前者类里,而后者既缭乱人眼,烦人心神,又占用内存,Jadx给我们提供了屏蔽这些类方法,屏蔽后Jadx将不再反编译这些类,你也无法再跳转到该方法里,或者在全局检索时看到这些类扰人代码...传入了一个 map 集合,不停 for 循环,按照键和值方式将内容传进 addQueryParameter 方法,妙啊,比如map为 {“sign:12345678”},这不就传进去了吗,赶紧右键查找一下用例...代码越来越乱了,这个时候冷静一下,要避免一叶障目,不要先钻进去研究逻辑,保持怀疑,然后直接看下一个符合条件类,要知道这儿可是出现多处 .addQueryParameter 方法,也很像添加多个参数操作...在这儿做一下更新说明,每一节内容其实量挺大,再加上需要反复琢磨表达和思路,所以更新比较慢,以后会减少单篇内容,在保证质量前提下尝试一天一更,谢谢三五读者支持和厚爱

    1.1K30

    程序猿修养 给属性一个单位

    这样可以在写代码时候强制要求参数传入单位以及计算时知道单位 为什么这样建议,请看看本文例子 在写文本库时候就遇到一些有趣问题 二代文本开发者在文本字体大小里面混用了像素和磅单位,此时就好玩了...其实只有最上面开始读才知道。...而代码调试上也只能看到传入值是一个 int 拿到一个字符串,为什么明明相同字符串返回是不同就好玩了 想要写出让小伙伴看不懂代码,有一条方法就是在一段代码里面使用多个不同单位,但是多个不同单位变量使用相同类型...} 此时逻辑就更清晰了,当然坑也解决了,因为 GetText 是一个重载方法,在拿到参数也就知道返回是什么坐标的字符 让代码调试简单做法,减少写出坑做法就是尽可能给单位一个类型,不要使用不带单位基础类型...比较推荐在代码显式定义单位,或传入单位,如小伙伴会用到 Task 延迟代码

    29220

    优秀程序员 18 大法则

    优秀程序员 18 大法则 经过多年积累,发现,下面这些基本指导法则,可以帮助我成为一个更加高效程序员。 程序设计法则,与设计和工程原理密切相关。...下面这些编程法则帮助我让获益匪浅,所以我分享给大家,希望也能帮助大家更高效,生产出代码更容易维护,并且bug和缺陷更少。 ?...未来你由于经历代码太多,也许再回过头来看这些代码时候,也和其他人一样,已经成为了一个完全陌生人。请记住,“写代码时候,就假设将来要维护的人是个知道你住在哪里暴力型精神病患者吧。”...得墨忒耳定律 代码组件应该只和它们直接关系(如,继承类,包含对象,通过参数传递对象等)沟通。 避免过早优化原则 除非代码开始工作,否则甚至就不要有优化念头。...重用代码可以提高代码可靠性,减少开发时间。 关注点分离原则 不同功能区域应该由明显重叠最小代码模块进行管理。

    63650

    NioServerSocketChannel初始化源码

    我们这一节课学习服务端ServerSocketChannel初始化源码,首先,我们还是老规矩,告诉你你哪里找,他是如何一步一步调用到ServerSocketChannel,然后在进行分析!...对象,名字我们基本可以知道,他是和反射相关工厂,然后把ReflectiveChannelFactory对象传入到channelFactory方法里面,我们跟进去看下源码: public B channelFactory...二、源码分析 前面基本描述了我们要分析NioServerSocketChannel源码入口,下面开始正式分析它,我们进入到NioServerSocketChannel无参构造方法: /**...这里只是将我们构建 .option和.attr传入参数,设置进通道里面!...,有关这一块详细我会在后面的章节做具体讲解,从上面这段代码可以基本看明白,他是双向链表追加一个handler,此时我们管道就变成了如下图这种格式: ?

    23520

    Kotlin:05-控制流 if、when、for、while

    (这种方式类似于 java switch 语句穿透) (二)、用法示例 好了,我们已经知道了 when 主要特点,那么接下来就看下 when 具体用法: 示例1、when 基本使用格式 fun...,实际是以表达式值作为分支条件 else -> print("哪里知道分支值是多少") } } 在上面的代码,我们 使用 Integer.sum(a,b) 方法作为 when...开区间表示方式为 ( a , b ) , 表示该范围内数据 自 a 开始 到 b 结束,但不包含 a 和 b 闭区间表示方式为 [ a , b ] , 表示该范围内数据 自 a 开始到 b 结束...{ //此处未跟参数,所以分支条件必须是 简单 boolean 表达式 a println("$a 小于6") a == 6 -> println("传入值是...(二)、for 循环基本语法 for 循环基本语法如下: for (item in collection) print(item) 循环体可以是一个代码块: for (item: Int in

    1.4K10

    闰土说JS进阶之「戏说数组」

    你想知道该英雄玩法攻略吗?接下来正文开始。 英雄介绍 首先,玩游戏得先创建英雄Array。创建数组有两种基本方式,第一种是使用Array构造函数,如下所示: ?...push()技能可以接收任意数量参数,把它们逐个添加到数组末尾,返回修改后数组长度。而pop()技能则从数组末尾移除最后一项,减少length值,返回值是移除项。请看下面的例子: ?...在只有一个参数情况下,slice()方法返回参数指定位置开始到当前数组末尾所有项。如果有两个参数,该方法返回起始和结束位置之间项,但不包括结束位置项。...splice()方法始终都会返回一个数组,该数组包含原始数组删除项(如果没有删除任何项,则返回一个空数组)。请看以下代码实例: ?...传入这些方法函数都会接收三个参数:数组项值、该项在数组索引和数组对象本身。下面我们直接来看例子: ?

    1K120

    IntelliJ IDEA不好用?那是因为没掌握这些技巧。

    如图(包括但不限于这种情况): ? 2、妈妈再也不用担心代码对齐问题了 刚开始学C语言时候,很多同学写代码时候都不进行对齐,然后我们看到效果如下: ?...这里有的同学可能有疑问,如果某些特殊情况,在同一个文件里面,第一个方法参数为List results第二个方法参数为Map results,那执行完上面的重命名过后会不会两个都修改啊?当然不会。...,不知道方法源码是什么,不知道具体代码是什么……如果你正在饱受上述煎熬,那么你可以尝试在你不知道那个东西地方使用快捷键ctrl + 鼠标单击,比如: 你不知道某个变量实在哪里声明,那就按住...当你不知道这个类在哪里使用过,不知道某个定义方法哪里被调用过、某个声明变量在哪里被使用过……还是尝试使用ctrl + 鼠标单击。...6、快速生成代码 编写POJO类时候是不是被它get和set方法逼疯了?编写构造方法时候写参数类型和参数名是不是很烦?继承了父类但是重写方法实现时候是不是还要找到父类看看它方法名?

    3.2K30

    性能优化反思:减少DB查询,合理使用成员变量。

    上面讲可能有些抽象,看下面的代码示例会清晰很多哦~ 代码示例 为了行为紧凑,方便大家理解,不直接粘贴我们逻辑代码,而是把关键代码段拿出来分析。...整体结构 下述代码是上面提到全局动作类,它继承了基础动作类,所有的动作在基础动作类定义 规范了输入参数和输出参数这些成员变量 构造方法传入当前用户id和对方id,所有的动作肯定是有双方 规范了setAction...第二个参数$extra = [],extra是扩展参数、可变参数概念。就和我开篇提到减少DB查询,合理使用成员变量 呼应上了: 把需要在多处使用到参数传入,而不是每次都通过查询DB方式获得。...回顾 大家再回顾一下开篇提到输入参数,这些都是成员变量,其中 _extra ,_data ,_houseOpen 都是易于扩展数组类型,我们可以通过合理使用成员变量,减少冗余DB查询,提高程序运行效率...DB查询都是有网络耗时;我们把数据存到成员变量,内存读取数据耗时是可以忽略不计

    40420

    用js来实现那些数据结构16(图02-图遍历)

    开始代码之前,我们需要了解一下图遍历思想,也就是说,我们要知道如何去遍历一个图,知道了图遍历方法方式,距离实现代码也就不远了。   ...然后呢…..我们需要知道三个状态:     一个是还未被访问,也就是还不知道有这么个顶点,也不知道边都去向哪里。     ...另外一个是已经访问过但未被探索过,就是说,知道有这个顶点,但是知道边都去向哪里,连接着哪些顶点。     最后一个是访问过并且完全探索过。...,传入参数v是图中某一个顶点,从此顶点开始探索整个图。...// dfs传入三个参数 var dfsVisit = function (u,color,callback) { // 改变u颜色状态 color

    38310

    用js来实现那些数据结构16(图02-图遍历)

    开始代码之前,我们需要了解一下图遍历思想,也就是说,我们要知道如何去遍历一个图,知道了图遍历方法方式,距离实现代码也就不远了。   ...然后呢.....我们需要知道三个状态:     一个是还未被访问,也就是还不知道有这么个顶点,也不知道边都去向哪里。     ...另外一个是已经访问过但未被探索过,就是说,知道有这个顶点,但是知道边都去向哪里,连接着哪些顶点。     最后一个是访问过并且完全探索过。...,传入参数v是图中某一个顶点,从此顶点开始探索整个图。...// dfs传入三个参数 var dfsVisit = function (u,color,callback) { // 改变u颜色状态 color

    1.6K50

    用js来实现那些数据结构16(图02-图遍历)

    开始代码之前,我们需要了解一下图遍历思想,也就是说,我们要知道如何去遍历一个图,知道了图遍历方法方式,距离实现代码也就不远了。   ...然后呢.....我们需要知道三个状态:     一个是还未被访问,也就是还不知道有这么个顶点,也不知道边都去向哪里。     ...另外一个是已经访问过但未被探索过,就是说,知道有这个顶点,但是知道边都去向哪里,连接着哪些顶点。     最后一个是访问过并且完全探索过。...,传入参数v是图中某一个顶点,从此顶点开始探索整个图。...// dfs传入三个参数 var dfsVisit = function (u,color,callback) { // 改变u颜色状态 color

    93930

    Java 代码审计基础知识 — java反射机制

    0x02 反射用途 反射用途很广泛,如在我们开发使用到Eclipse、IDEA等开发工具时候,当我们输入一个对象或类调用它属性或方法时,编译器就会自动列出它属性或方法,这里用到便是反射;...0x03 反射基本运用 由于Java大部分应用框架都采用了反射机制,因此掌握好Java反射机制对于我们代码审计能力有很大帮助。...,而 getSystemClassLoader().loadClass() 不会执行static()代码,如在上文中提到使用 JDBC时,就是利用 forName()方法,让 JVM 查找加载指定类到内存...,此时将"com.mysql.jdbc.Driver" 当做参数传入,就是告诉JVM,去"com.mysql.jdbc" 这个路径下找 Driver 类,将其加载到内存。...,该方法第一个参数方法名,第二个参数名是方法参数,具体如图所示: 3、获取类成员变量 为了更直观体现出获取类成员变量方法,我们首先创建一个 Student 类,如下图所示: 如果我们获取这个

    34930

    JS 条件语句 5 条守则

    这种编码风格非常好,尤其是当你有很长if语句时候(想象你需要滚动到最底层才知道还有else语句,这并不酷) 我们可以通过 倒置判断条件&尽早return 进一步减少if嵌套。...这是因为: 代码比较短且直接,包含if嵌套更清晰 倒置判断条件可能加重思考负担(增加认知载荷) 因此,应当尽力减少嵌套和尽早return,但不要过度。...Avoid Else, Return Early by Tim Oxley StackOverflow discussion on if/else coding style 3.使用默认参数和解构 猜下面的代码你可能会熟悉...5.对 所有/部分 判断使用Array.every & Array.some 这最后一个建议更多是关于利用 JavaScript Array 内置方法减少代码行数。...相同方式,如果我们测试是否存在红色水果,我们可以使用 Array.some 一行代码实现。

    2.6K30

    REST 深度进阶

    真心,如果你这么做了,我会替所有开发同学们感谢你。 2. 认真对待方法 一下,你有没有见到过只用 GET 方法来处理一切事情 API?...这并不是不可以,只不过,这样写法说明没有深入理解这个工具,以及 HTTP 准确工作方式。要知道,HTTP 每个方法都被设计为处理特定工作和内容。...在我看来,所有的 API 都应该可以在不看注释和说明情况下被调用方理解,调用端点,到参数,和 JSON 键。 这儿,参考了国外一些规则。规则也很简单: 用名词,别用动词。...把使用 HTTPs 当成一个标准和习惯,有一天你会感谢自己。 2. 构建 API 开始,就要做到控制访问 你看得没错,是构建 API 开始。...当我们写完最后一行代码,提交并合并后,你可能会认为工作已经完成。但不是,对其他很多人来说,这才是个刚刚开始。 很多人在我们完成了工作后,才能开始他们工作。所以,我们需要以多种方式准备 API。

    49010

    Think CMF X任意内容包含漏洞分析复现

    直到了解程序大体运作流程,知道基本路由规则(mvc架构审计工作主要是集中在控制器)。...前面的审计开始前置工作就不细说了,而且在分析一个漏洞时候这些前置工作也不一定是必须,如果你在知道一些信息情况下,例如,你根据漏洞披露一些信息已经知道哪个文件有问题了,就不需要再去研究路由了,...payload只是传了一个content参数,那么此时$templateFile值为空,$content值为php代码,继续跟进父类fetch方法,这里父类跟踪直接跟到了Controller.class.php...函数就相当于是调用了一个提前注册好函数,函数默认是run函数,那么具体调用是哪个类run函数呢,这个就取决于传入参数了,第一个参数是一个tag,这个tag是与一个类提前绑定,第二个参数就是要传入...结果发现,就只是引入了一个文件,这就急眼了呀,这么就引入一个文件就完了呢,那我传入content什么时候写入到这个文件呀,觉得肯定是遗漏了什么东西,于是开始顺着这个文件找线索,看看到底哪里传入

    1.2K10

    10个Python字符串处理技巧和窍门(1)

    追求文本分析路径,但不知道哪里开始?尝试使用此字符串处理入门,首先了解在基本级别上使用Python操纵和处理字符串知识。 自然语言处理和文本分析是当前研究和应用热门领域。...这些领域需要各种特定技能和概念,在进行有意义练习之前,需要透彻理解。但是,在此之前,必须进行基本字符串操作和处理。 认为,有两种不同类型广泛计算字符串处理技能需要掌握。...1.剥离空格 剥离空格是基本字符串处理要求。您可以使用lstrip()方法(左)去除前导空格,使用rstrip()(右)去除尾随空格,使用去除前导和尾随strip()。...有兴趣剥离除空格以外其他字符吗?相同方法很有用,可以通过传入要剥离字符来使用。...您可以使用join()方法将列表元素字符串连接到Python单个字符串

    1.3K20

    当你写爬虫遇到APP请求有加密参数时该怎么办?【初级篇-常规模式】

    在对APP抓个包之后你可能会发现,只是抓到包似乎没有什么卵用啊,凡是有用接口基本都有一个或多个加密参数,而且它还每次请求都变,而自己去请求对应接口时,如果没带或者随便输入一串值给这种参数,还会出现不返回数据情况...---- 我们直接开始实战演练吧,这里写了一个演示用APP给你玩,它会像我前面所说一样,发出一个请求带有一个加密参数——sign,且每次请求时sign都会变化。 ?...而外观长这样一般是hash,猜测一下最有可能性是md5之类但不知道实际是如何生成,只能逆向看看了。...通过搜索参数名方式定位 定位到了代码位置之后我们就可以开始代码了,搜到结果我们可以看到生成sign、设置sign、设置路径代码都在这个l方法下,然后我们来设置sign位置开始从下往上分析,...定位到代码 这里代码关键点都做了标记,你可以按着旁边标注序号跟着一起来看这个代码

    1.9K30

    iOS 自动化测试框架 Kiwi 使用介绍及原理分析

    今天我们来根据一个简化小场景,一步一步学习使用Kiwi,稍微深入地探究一下Kiwi各个功能实现原理。 出于可读性考虑,在这篇文章中会尽量规避粘贴大段源代码情况。...也就是说,相同输入下,测试结果可能是不同。这违背了测试最基本原则。 解决这个问题办法是:不走网络下载,改为读取本地资源。...,传入参数不和argumentList值一一对应且完全相等,那么这次调用就不会走stub逻辑 (id)returnValue 调用被stub方法时,直接返回这个值。...matcherFactory 在收到注册请求后,会遍历所有已注册类,找到其中遵循了KWMatching类。之后,通过传入参数(此处是@"KW")对类名进行筛选。...,用一个第三方库时非常爽事情,就是在需要一个功能,但不知道它支不支持时,输入一个关键词,IDE为推荐了一个接口,点进去一看,真的就是想要那个。使用Kiwi时,确实能体会到这种感觉。

    1.3K30
    领券