python函数如何传参传递?python函数传参传递dict/list/set等类型的问题

这篇文章主要介绍了详解python函数如何传参传递?python函数传参传递dict/list/set等类型的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着我来一起学习学习吧!

python函数如何传参传递?python函数传参传递dict/list/set等类型的问题

文章插图
【python函数如何传参传递?python函数传参传递dict/list/set等类型的问题】在c语言中对函数进行参数传递的时候,函数参数是可以传递值的,不仅如此,它还可以传递指针,先带大家看一段代码:
def trans(aa):  return aas = {1: 1}d = trans(s)s [2] = 2print(s)print(dist)运行结果:
{1: 1, 2:2}{1: 1, 2:2}通过上面的代码我们可以看到,如果我们对s进行改变的时候,d里面的值也会跟着改变,这是为什么?其中s它是一个可变的对象,在对参数进行传递的时候,传的就是一个指针,而s和d都指向同一个地方的内存,当运行s [2] = 2时,s和d都对数据进行了改变,所以d会随着s改变而改变 。所以说传参时传递可变对象,实际上传的是指向内存地址的指针/引用 。
二、列表、字典、集合不一定是可变对象
有人会觉得列表、字典、集合它们是一种可变的对象,这句话不能绝对,在列表、字典以及集合中它们的常量就不是一个可变的对象 。
举个例子:
class Con(object):  def __init__(self, dataset, device_url):    # 传递可变对象dataset    self.dataset = dataset    self.device_url = device_url  def get_config(self, key):        if key in self.dataset:      return self.dataset.get(key)    else:      # 通过device_url从设备获取配置,假如赋值给了value      self.dataset[key] = value    # 可变对象dataset赋值,其他实例化的dataset属性值也会变化      return value  def other_func(self):    # 其他函数,跟device_url有关    pass在上面的这个案例中,定义了一个Con类,如果对它进行一个实例化的传递列表,它就会对共享匹配不能进行使用,例:
con1 = Con ({})con2 = Con ({})con1.dataset[1] = 1print(repr(con1.dataset))print(repr(con2,dataset))上述运行结果是
'{1: 1}''None'发现在运行的时候会有空值的出现,如果再对它进行修改,会变成以下这种模式:
var = {}con1 = Config(var)con2 = Config(var)con1.dataset[1] = 1print(repr(con1.dataset))print(repr(con2,dataset))代码中var它是一个可变的对象,但是一个列表是不可变的对象,但是它们两个的输出值是一样的,运行结果如下:
'{1: 1}''{1: 1}'以上就是有关“python函数如何传参传递?python函数传参传递dict/list/set等类型的问题”的全部内容了,想要学习其他相关知识的,可以继续关注哦!

    推荐阅读