函数是否需要设置参数的问题

咨询一下写代码的老鸟
如果我有一个列表aa,想要通过一个函数将这个列表更改,显然通过change()或者change2()都能实现
区别是change()通过参数传入更改,而change2()直接更改
我的问题是:实际写代码过程中,有没有什么准则或者默认技巧:
什么时候应该将外界数据当做参数传入?
什么时候不需要将外界数据当做参数传入?

aa = [2, 2, 2, 2, 2]


def change(one):
    two = one
    two[0] = 12


change(aa)
print(aa)


def change2():
    aa[2] = 19


change2()
print(aa)


变量细分为两种: 全局变量 和 局部变量
①全局变量 所有函数都可以获取的,这种变量一般不轻易去改变它.(一旦改了,很难追溯它在哪个地方出问题)
②局部变量 一个函数或一个类范围内生效的变量。(有了边界,在边界之间传递,需要传入传出)
建议:
只会被引用而不修改的变量,可以作为全局变量.;
经常修改的变量,建议用传入传出的方式进行修改,避免你确定不了它的变更顺序;
尤其是对于一个新手来说,一个变量不经过参数来传递,出bug就长时间定位不出问题在哪一环.

对于是否将外部数据作为参数传入函数,以下几点可以作为判断。

  1. 函数需要修改外部数据时,必须将其作为参数传入。如change()函数。
  2. 函数不需要修改外部数据,只需要读取时,可以不传。如只打印aa的函数。
  3. 函数需要修改的外部数据在函数定义域,可以直接修改,不需要传参。如change2()。
  4. 对于类的方法修改对象内部数据,直接修改即可,不需要传self。

如果你写成change2这种形式,这就纯粹是为了封装成函数而封装成函数
除了把代码拆成一段段的之外没有任何别的效果
比如一个检查num是不是质数的函数def isprime(num)
如果num是以全局变量的方式访问的,那你只能先把值赋值给全局变量num再调用函数
而如果把num放进形参的位置就灵活多了,哪怕在别的文件里调用这个文件定义的函数也不会有任何问题
-=-=-=-
你先别想自己定义函数到底怎么定义好
你先看看你上面调用的print,想象一下,如果它里面用到了全局变量,你必须把要打印的东西先赋值给全局变量aa,再直接调用print(),会是什么效果
-=-=-=-=
总体来说,对于一个功能非常明确的函数来说,它可以没有参数
但是你也完全没有必要写个函数,直接把代码放外面执行不也一样吗
而封装成函数,你可以通过传入不同的参数来多次调用它,实现同样的功能只需要写一次代码而不是反反复复

如果只是触发更改,已经明确知道要更改的值了,就不传参数。
比如:

list_a = [0, 1]
# 我确定要把list_a[0]改为1
def change():
    list_a[0] = 1

但,如果你不确定要改成什么值,此时就可以将要变更的值,甚至要变更的索引作为参数传入

list_a = [0, 1, 2]


def change(index, value):
    list_a[index] = value
    
    
if __name__ == '__main__':
    change(0, 1)
    print(list_a)

该回答引用NewBing,仅供参考,不保证完全正确

你好,这是必应。我可以帮你查找一些关于函数是否需要设置参数的问题的相关信息。根据我的搜索结果,我发现了以下几个方面的内容:

  • 函数的参数可以分为位置参数默认参数可变参数关键字参数,它们有不同的作用和用法。¹
  • JavaScript 函数对参数的值没有进行任何的检查,也没有指定数据类型。你可以使用arguments 对象来访问函数调用时传递的所有参数。²
  • 当函数中需要用到大量参数时,可以考虑使用对象或者数组来传递参数,或者使用解构赋值或者命名参数来提高可读性。³

你可以点击以下链接查看更多详细的解释和示例:

¹: 函数的参数 - 廖雪峰的官方网站
²: JavaScript 函数参数 | 菜鸟教程
³: 在函数中需要用到大量参数时如何传参可以更简洁合理? - 知乎


源: 与必应的对话, 2023/7/12
(1) 函数的参数 - 廖雪峰的官方网站. https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888.
(2) JavaScript 函数参数 | 菜鸟教程. https://www.runoob.com/js/js-function-parameters.html.
(3) 在函数中需要用到大量参数时如何传参可以更简洁合理? - 知乎. https://www.zhihu.com/question/41356861.