咨询一下写代码的老鸟
如果我有一个列表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就长时间定位不出问题在哪一环.
对于是否将外部数据作为参数传入函数,以下几点可以作为判断。
如果你写成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 函数参数 | 菜鸟教程
³: 在函数中需要用到大量参数时如何传参可以更简洁合理? - 知乎
源: 与必应的对话, 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.