Questions tagged «functions»

函数是执行特定任务的代码块。

1
参数和参数之间有区别吗?
可能是这样的:参数表示来自调用方POV,参数表示在过程内部,或相反。 还是没有区别? 更新资料 在瑞典语中,我们说“ anropsparametrar”,即“正在调用过程的参数”,而不会说“ anropsargument”(“正在调用过程的参数”)。

6
为什么许多语言不支持命名参数?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我只是在想,如果在调用函数时可以编写以下代码,那么读取代码会容易得多: doFunction(param1=something, param2=somethingElse); 我想不出任何缺点,它会使代码更具可读性。我知道您可以将数组作为唯一的参数传递,并将数组键作为参数名称,但是这样的可读性仍然不高。 我缺少这种缺点吗?如果不是,为什么许多语言不允许这样做?

2
设计:对象方法与以对象为参数的单独类的方法?
例如,这样做更好吗? Pdf pdf = new Pdf(); pdf.Print(); 要么: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); 另一个例子: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); 要么: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = new DebtStatistics(); double usRatio = ds.GetDebtToGDPRatio(us); double …

2
递归函数调用中返回语句的原因
我只是有一个疑问。以下子例程(例如,在列表中搜索元素)的末尾具有return语句: list *search_list(list *l, item_type x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->next, x) ); } 我无法在最后获得return语句的意义(即return search_list(l-> next,x))。如果有人可以使用堆栈模型来解释这个概念,那将非常有帮助。

4
最小化函数参数数量的技术
在“干净代码”中,写有“函数的理想参数个数为零”。解释原因并讲得通。我所需要的是重构具有4个或更多参数的方法来解决此问题的技术。 一种方法是将参数提取到新的类中,但是那肯定会导致类的爆炸式增长吗?那些类可能以违反某些命名规则的名称结尾(以“ Data”或“ Info”等结尾)? 另一种技术是使多个函数使用的变量成为私有成员变量,以避免传递它们,但这扩大了变量的范围,可能使它向实际上不需要它的函数开放。 只是寻找使函数参数最小化的方法,就已经接受了这样做的好主意。

2
如何命名在Python中返回值的函数?
我对在Python中为函数选择名称感到困惑。有时,Python内置函数势在必行,例如:printfunction和string method find。有时它们不是这样的:例如,len它的名称不是必须的calculate_len,而type不是find_type。 我可以理解,它print返回了一个我们不使用的值(即None),并且执行了某项操作(即,它在屏幕上显示了一个字符串),因此其名称势在必行。 但是len返回一个我们使用并执行某项操作的值(即,计算序列或映射中有多少个项。),其名称不是必须的。另一方面,find字符串方法(as len)返回一个我们使用并执行某操作的值,并且它的名称是必要的。 问这个问题的原因是,我将使用Caesar密码对字符串进行加密和解密的脚本进行了审查。审稿人说: 只是一种直觉:函数可以完成任务。因此,一个函数的好名字是势在必行的:我会用rotate_letter代替rotated_letter。 rotated_letter返回表示由数字旋转的字母的单字母字符串。我不知道有什么更好的,我用rotated_letter它返回一个值,就像random模块中的randint function,不是。generate_randint 因此,在这种情况下,我应该如何命名一个返回要使用的值的函数?我应该将名称设为命令性还是仅是名词。在其他情况下,显而易见的是如何执行此操作,例如布尔函数,例如is_even和is_palindrome我们将其设为是/否问题,以及仅执行并返回未使用的值(即None)的函数,例如printand list方法。sort。

18
当您想到一个好名字时,如何命名函数/变量/等?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 当您定义函数/变量/等时,不确定如何命名,该如何命名?您如何命名? 如果您在使用临时名称作为真实姓名之前将其用作真实姓名,那么您使用什么临时名称? 更新 我一直在使用类似的东西WILL_NAME_LATER,NEEDS_NAME或TO_BE_NAMED。我希望有一个采用的约定,实际上我希望,如果使用该采用的约定,IDE会在不更改名称之前突出显示该名称。

6
用于描述修改其调用对象的功能/方法的术语是什么?
对不起,通用问题。我到处搜索,发现了很多与此类似的线程,但是没有一个可以回答我的特定问题-也许是因为我要查找的术语甚至不存在。 我的一个朋友正在学习编程,特别是JavaScript,他问我为什么这样做不起作用: var a = "Hello World"; a.replace("Hello", "Goodbye"); console.log(a) // Logs "Hello World" 原因是因为replace不修改a,因为字符串在JavaSript中是不可变的。因为它返回一个字符串,所以您需要执行以下操作... var a = "Hello World"; a = a.replace("Hello", "Goodbye"); console.log(a); // Logs "Goodbye World" 但是,替代方法是类似JavaScript的函数reverse(),因为它会修改任何调用它的函数。例如: var fruits = ["Apples", "Oranges", "Bananas"]; fruits.reverse(); console.log(fruits) // ["Bananas", "Oranges", "Apples"] 当我的朋友问我为什么他replace不工作时,我意识到我在说一个我不知道的词(据我所知)... “您必须将字符串设置为“字符串点替换”,因为替换功能是________。” 您无需将数组设置为等于“数组点反向”,因为反向是________。 我不熟悉原型函数,但我不相信这是我要找的单词。谁能帮我填补这些空白?

2
为什么要使用`const foo =()=> {}`而不是`function foo(){}`
例如,在此Redux视频中,讲师始终使用以下语法 const counter = (state=0, action) => { ... function body here } 我只用“传统” function counter(state=0, action) { ... function body here } 实际上,这更短,而且更清晰。在页面的相当平坦且结构化的左侧边缘搜索单词“ function”要比在参差不齐的右侧边缘扫描一个小的“ =>”要容易。 除了之外this,尝试成为客观的而非观点,新语法有没有有用的区别或优势?


5
将24小时降水值列表转换为按小时总计
假设我有一个按小时排列的降水值列表,每个值都显示按日期排序的前24小时内发生了多少降雨。例如: { '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59 '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59 '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } 是否有一项策略/算法来确定每个小时中的降雨量?我似乎无法解决这个问题。我知道这并不像对差异求和那样简单。 数据集的可视化 P(N) [.....======================] …

4
调用堆栈是从底部开始还是从顶部开始?
堆栈是自底向上堆积的东西。 因此,当调用函数时,调用堆栈会在堆栈上添加新的项目,并且随着每个函数的结束从堆栈中删除项目,直到堆栈为空,然后程序结束。 如果上述正确,那么为什么人们会提到控件将调用堆栈“上移”?控制肯定会向下移动到调用堆栈,直到到达底部为止。
11 functions  stack 

2
解决二元函数assertEquals(预期的,实际的)带来的问题
经过多年的牛仔编码,我决定拿起一本有关如何编写高质量代码的书。我正在阅读Robert Cecil Martin撰写的Clean Code。在第3章(函数)中,有关于二进位函数的部分。这是这本书的摘录。 甚至明显的二进位函数assertEquals(expected, actual)也有问题。您已将实际次数放置在预期的位置几次?这两个参数没有自然顺序。预期的实际排序是需要实践学习的惯例。 作者提出了一个令人信服的观点。我从事机器学习工作,并一直遇到这种情况。例如,sklearn库(可能是该领域中最常用的python库)中的所有度量标准函数都要求您注意输入的顺序。作为一个例子sklearn.metrics.homogeneity_score需要作为输入labels_true和labels_pred。该函数的作用不太相关,相关的是,如果您切换输入的顺序,则不会引发任何错误。实际上,切换输入等效于使用库中的另一个函数。 然而,这本书并没有继续提到诸如assertEquals。我想不出一种assertEquals针对上述功能的固定解决方案。有什么好的做法可以解决此问题?
10 functions 

6
CoffeeScript和命名函数
在其他地方,关于CoffeeScript中命名函数的术语引起了争论。特别是有人提到这样的事情: foo = -> console.log("bar") 作为命名函数。但是,它的反对意见是CoffeeScript中的所有内容都是匿名函数,并且没有命名函数。确实是这样,CoffeeScript仅具有函数表达式,然后可以将其存储在变量中。但我认为这并不意味着将其称为命名函数是错误的。 如我所见,它是一个命名函数,因为它已被命名。没错,它不是一个命名函数,就像其他语言中的命名函数一样,但是我认为它足够接近以至于不宜将其称为命名函数。坚持认为否则似乎只是挑剔。 我是否在吃午餐,以为坚持认为这不是命名函数只是挑剔?

3
是否有理由不修改按值传递的参数的值?
是否有客观的,可支持的软件工程论据来支持或反对在函数主体中修改按值参数的值? 我团队经常发生的争吵(主要是很好玩)是是否应修改按值传递的参数。团队中的几个成员坚决决不应该将参数分配给它们,以便始终可以查询最初传递给该函数的值。我不同意并认为参数不过是通过调用方法的语法初始化的局部变量。如果按值参数的原始值很重要,则可以声明局部变量以显式存储该值。我不相信我们两个人都能很好地支持我们的立场。 这是无法解决的宗教冲突,还是在任一方向上都有好的客观的软件工程理由? 注意:原则问题仍然存在,无论特定语言的实现细节如何。例如,在JavaScript中,参数列表始终是动态的,参数可以视为从arguments对象初始化局部变量的语法糖。即使这样,也可以将参数声明的标识符视为“特殊”标识符,因为它们仍然捕获信息从调用者到被叫者的传递。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.