zoukankan      html  css  js  c++  java
  • 函数的传参问题

    
    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"})
    
  • 相关阅读:
    VUE中引入zTree
    如何获取别人提供的接口,获取他接口里面的数据。
    com.fasterxml.jackson.databind.exc.InvalidDefinitionException
    2.Elasticsearch环境安装配置
    1.Elasticsearch概述
    Java中如何操作Redis
    基于Redis实现分布式锁
    Mybatis插件--数据库读写分离
    Mybatis插件--自定义分页
    7. Mybatis日志
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7122725.html
Copyright © 2011-2022 走看看