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的功底吧,初学者经常不解,希望对大家有所帮助。
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架