python函数学习中的两个坑(面试经常有)

本文探讨了Python中函数内变量的作用域问题及参数默认值的特性,通过具体示例解释了局部变量与全局变量的区别,并说明了为何参数的默认值不能设置为可变类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数内变量的作用域:

a=1
def fun():
a=2
fun()
print(a)
思考下这段程序的结果是什么,如果你的答案是2,那恭喜你,答错了,结果是1,原因如下
a=1
def fun():
a=2 #作用域是fun()函数,也就是说只能在fun中使用,fun结束,a也就消失了
fun()
print(a) #a=1
那如果要引用开头的a怎么办:
a=1
def fun():
golbal a
   a=2 #引用全局变量a
fun()
print(a) #a=2
2.参数的默认值是可变的
def fun(a,b=[]):
b.append(a)
print(b)
fun(1)
fun(2)
这个结果什么是呢,[1],[2]?对的,你又入坑了,结果是[1],[1,2],为什么后一个会带上第一个的结果呢,原来函数在定义的时候,参数就被实例化了,b就指向了[],由于列表是可变的,所以每次append后,
b的值都改变了,下次引用就会带上上次的内容量,记住:默认参数必须指向不变对象!
如果要让结果为[1],[2],那就该做如下修改:
def fun(a,b=None):
if b==None:
b=[]
b.append(a)
print(b)
fun(1)
fun(2)

以上两个问题在实际中用到的虽然不多,但是面试会经常被问到,这也能看出python的功底吧,初学者经常不解,希望对大家有所帮助。








转载于:https://www.cnblogs.com/diwangguilai/p/8144262.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值