• 函数的传参问题


    
    n = 1
    print id(n)
    
    def e(n):
        print id(n)
        n = n+1  #生成了一个新对象,左边的n。是局部变量,函数内外,同名变量名是隔离的。
        print id(n)
        return n #将新对象返回
    x = e(n)
    print x
    print id(x)
    
    o  = 2
    print id(o)
    def m(n):
        print id(n)
        n = n + 1   #生成了一个新对象,但是该函数并没有将新对象返回,而是在函数运行完之后,这个局部变量被释放了。
        print id(n)
    m(o)
    print o
    print id(o)
    
    a = [1,2,3]
    #a = [1,2,3,4,5,6,7,8,9]
    print id(a)
    def f(n):
        print id(n)
        m = n
        print id(m)
        if len(m) >5:   #如果这个为真 ,
            m = [9,8,7,6,5,4]  #那么 m也会是一个新对象。
            print id(m)
        for i,e in enumerate(m): 
            if isinstance(e,int):
                m[i]=str(e)+'e'    #如果上面那个if不为真,那么m和n一致,是同一个对象。那么对其修改,函数内外皆可见,如果 if条件为真,那么m和n 不再是同一个对象了。函数内外也就不一致了。
        return m
    z = f(a)
    print z
    print id(z)
    print a
    print id(a)
    
    s = 0  
    def h():
        s = 10   #和函数外的 s 是隔离的。
        print s
    print s
    h()
    

    python的函数是传对象 ,函数参数在传递过程中,将整个对象传入。对可变对象的修改,函数内外都是可见的。调用者和被调用者共享整个对象。
    对于不可变对象,由于不可变对象的不可变性,所以,对不可变对象的修改,往往是生成一个新的对象来赋值实现的。

    def a(**kwargs):
        print kwargs
    
    a(host='127.0.0.1',db='mysq')
    # a({"host":"127.0.0.1","db":"mysq"}) #error 
    a(**{"host":"127.0.0.1","db":"mysq"})
    
  • 相关阅读:
    本地项目上传到github
    linux 常用命令
    mysql 查询日志基本操作
    js 短信60秒倒计时
    windows下 mysql 移库
    INSERT INTO table(xxx) VALUES (xxx)
    springboot 项目接口调用失败
    P1093 奖学金
    P1403约数研究
    P1147连续自然数和
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7122725.html
Copyright © 2020-2023  润新知