作用域以及默认的区别

作用域和默认参数,这两个在编程里可是挺关键的。作用域啊,就是变量在代码里能被用到的地方。比如说,一个变量在函数里定义了,那它就只能在这个函数里用,出了这个函数就不认识了。
举个例子,2018年我接手的一个项目,那会儿我们用Python写后端。我定义了一个变量total在函数里,结果在函数外头就访问不了了,这事儿就属于作用域的问题。
再来说说默认参数。默认参数啊,就是在定义函数的时候,给参数设置一个默认值。这样调用函数的时候,如果不传这个参数,就默认用这个值。
比如,我之前在2019年写过一个计算两个数加法的函数,可以这样写:
python def add(a, b=0): return a + b
这里b就有默认值0。那如果我只传一个数,比如add(5),b就默认是0,函数返回5。
作用域和默认参数啊,就像是编程里的两种小技巧。作用域决定了变量能去哪儿,默认参数则让函数调用更灵活。用得好了,能让代码简洁又强大。说实话,我当时也没想明白这些,都是边做边学的。

作用域和默认参数,这俩在编程里可是挺重要的概念呢。我上次在2023年3月参加的一个Python培训课上,老师就详细讲过这个。
首先说作用域吧。作用域就是变量存在的范围。比如,在一个函数内部定义的变量,它的作用域就只在这个函数内部。你在外面是访问不到这个变量的。我自己踩过的坑是,有一次写了个函数,结果在函数外面调用的时候,变量没定义,还以为是自己写错了代码,后来才发现是因为作用域没弄明白。
然后是默认参数。这俩有点像,但又不完全一样。默认参数是在定义函数的时候,给参数设置一个默认值。比如,你定义一个函数,里面有个参数叫color,你可以给它设置一个默认值'blue'。这样,当调用这个函数的时候,如果不传color参数,它就会默认使用'blue'。
不过,要注意的是,默认参数必须是不可变类型,比如数字、字符串、元组。如果你用列表或者字典作为默认参数,每次调用函数的时候,都会创建一个新的列表或字典,这就容易出问题。我之前就犯过这样的错误,导致数据丢失,还花了半天时间排查。
所以,总结一下,作用域是变量存在的范围,而默认参数是函数参数的默认值。两者都要注意细节,别像我一样踩坑。反正你看着办,编程嘛,就是要多实践,多总结。我还在想这个问题呢。

那是一个初夏的午后,我正坐在办公室里整理着代码。那时候我负责一个小项目的后端开发,一个同事过来问我:“老李,你为什么这段代码在这里定义变量会出问题啊?我在函数外面定义不就好了?”我笑了笑,随手在纸上画了个圈圈,说:“作用域懂不?就像这个圈子,圈里的东西只在这个圈子里头管用。”
当时有个小插曲,我记得是2016年的事,我们在一个老旧的实验室里调试设备,那个设备里有一段代码,如果不在函数内部定义变量,而是直接在函数外部定义,结果确实出问题了。那次的调试,我们浪费了整整两天,最后发现就是作用域的问题。
然后我突然想到,作用域和默认值,其实有点像买衣服,作用域就像是你买了什么尺码的衣服,只能穿那个尺码;而默认值,就像是如果这个尺码没货了,店家给你推荐了个其他尺码,你可能就得试试看合不合身。但尺码合不合适,还得看实际情况呢。等等,还有个事,我记得有一次,一个刚来的实习生,他就犯了个这样的错误,以为默认值就像作用域那样,一成不变,结果调试半天发现是作用域的问题。

相关推荐