zoukankan      html  css  js  c++  java
  • python函数学习中的两个坑(面试经常有)

    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的功底吧,初学者经常不解,希望对大家有所帮助。








  • 相关阅读:
    多线程案例龟兔赛跑
    不靠谱的事
    生命的价值并不止于自己的幸福
    我的高中搞笑班主任
    AgileChina参会笔记
    上美食
    程序中保留一个Dump
    骗子公司驾到
    我的《野蛮生长》书摘
    最近看的书的清单
  • 原文地址:https://www.cnblogs.com/diwangguilai/p/8144262.html
Copyright © 2011-2022 走看看