当前位置: 首页 > news >正文

网站404怎么解决seo站外优化最主要的是什么

网站404怎么解决,seo站外优化最主要的是什么,做企业网站收费价格,网站制作计算机Python实例化中默认值的行为及应用 适合初学者阅读 本文要点 使用可变对象作为默认参数会导致所有实例共享同一对象,引发意外的数据修改。不可变对象作为默认参数时,每次实例化都会创建新的对象,不会共享数据。推荐使用None作为默认值&…

Python实例化中默认值的行为及应用

适合初学者阅读

本文要点

  1. 使用可变对象作为默认参数会导致所有实例共享同一对象,引发意外的数据修改。
  2. 不可变对象作为默认参数时,每次实例化都会创建新的对象,不会共享数据。
  3. 推荐使用None作为默认值,并在__init__方法中进行适当的初始化以避免共享问题。
  4. Python中的所有数据都是通过引用来访问的对象,理解这一点有助于正确处理默认参数。

引言

在Python中,理解类构造函数(__init__方法)中的默认参数行为对于编写高效且无误的代码至关重要。本文将通过一个具体的例子来探讨当使用可变对象(如列表)作为默认参数时可能出现的问题,并提供解决这些问题的最佳实践。

问题描述

考虑以下Python代码:


class class_A:def __init__(self, name: str, a_default_list_value=[], a_default_none_value=None, a_default_str_value="~"):self.name = nameself.value_1 = a_default_list_valueself.value_2 = a_default_none_valueself.value_3 = a_default_str_valueif __name__ == "__main__":object_1 = class_A("object_1")object_2 = class_A("object_2")print(id(object_1), ": ", object_1.name, " ", id(object_1.value_1), ": ", repr(object_1.value_1), " ", id(object_1.value_2), ": ", repr(object_1.value_2), " ", id(object_1.value_3), ": ", repr(object_1.value_3))print(id(object_2), ": ", object_2.name, " ", id(object_2.value_1), ": ", repr(object_2.value_1), " ", id(object_2.value_2), ": ", repr(object_2.value_2), " ", id(object_2.value_3), ": ", repr(object_2.value_3))object_2.value_3 = "!"print(id(object_2.value_3), ": ",object_2.value_3)print(id(object_1.value_3), ": ",object_1.value_3)print(id("!"), ": ", "!")# 复杂数据结构object_2.value_2 = []print(id(object_2.value_2), ": ",object_2.value_2)print(id(object_1.value_2), ": ",object_1.value_2)object_1.value_2 = object_2.value_2object_2.value_2.append('...')print(id(object_2.value_2), ": ",object_2.value_2)print(id(object_1.value_2), ": ",object_1.value_2)object_2.value_1.append('._.')print(id(object_2.value_1), ": ",object_2.value_1)print(id(object_1.value_1), ": ",object_1.value_1)object_3 = class_A("object_3")print(id(object_3), ": ", object_3.name, " ", id(object_3.value_1), ": ", repr(object_3.value_1), " ", id(object_3.value_2), ": ", repr(object_3.value_2), " ", id(object_3.value_3), ": ", repr(object_3.value_3))

输出会是这样:

1308360223984 :  object_1   1308367676864 :  []   140718652536784 :  None   140718653645744 :  '~'
1308367549648 :  object_2   1308367676864 :  []   140718652536784 :  None   140718653645744 :  '~'
140718653641280 :  !
140718653645744 :  ~
140718653641280 :  !
1308367714432 :  []
140718652536784 :  None
1308367714432 :  ['...']
1308367714432 :  ['...']
1308367676864 :  ['._.']
1308367676864 :  ['._.']
1308367547248 :  object_3   1308367676864 :  ['._.']   140718652536784 :  None   140718653645744 :  '~'
  • value_3可以看到:

    Python是将字符(串,Python中没有单字符)的值赋值给了value3(储存于value3地址所指向的内存空间)。之前好像讲过,python的字符赋值方法,算是一种节约空间的办法。没记错的话数字(int)也是这样

    (这题贴个图)

  • value_2value_3可以看到:

    最开始的None是指向同一个数据(地址)的,object_2.value_2指向的空列表被赋值给了object_1.value_2后指向同一数据(地址),说明列表是引用类型(类比C语言)。

    那么这么看来,好像 python中包括数字、字符串等都是“引用类型”的数据。

  • value_1可以看到:

    object_2.value_1的修改也是对a_default_list_value进行修改。所有实例共享同一个默认列表。修改其中一个实例的value_1会影响到其他实例。

这就有问题了:object_3value_1在生成时就被修改了。在实例上的修改会影响定义中的值,也就是定义的class_A中的a_default_list_value所指向的默认空列表被修改。

为什么会出现这样的情况?

在Python中,所有的数据都是对象,而这些对象是通过引用来访问的。不可变类型(如整数、字符串)在赋值时不会改变原始对象,而是创建新的对象;而对于可变类型(如列表、字典),我们可以通过引用直接修改其内容。因此,当使用可变对象作为默认参数时,如果该对象被修改,则所有使用该默认值的实例都会受到影响。

a_default_list_value所指向的“列表”就相当于是全局变量,唯一。也可以说是class_A中的全局变量(类变量):

class class_A:a_default_list_value_ = []def __init__(self, name: str, a_default_list_value=a_default_list_value_, a_default_none_value=None, a_default_str_value="~"):self.name = nameself.value_1 = a_default_list_valueself.value_2 = a_default_none_valueself.value_3 = a_default_str_value

最佳实践

为了避免上述问题,应该避免使用可变对象作为默认参数。推荐的做法是在__init__方法内部进行适当的初始化。例如:

class ClassA:def __init__(self, name: str, a_default_list_value=None):self.name = nameif a_default_list_value is None:a_default_list_value = []self.value_1 = a_default_list_value

这样可以确保每个实例都有自己的独立副本,从而避免意外的数据共享。

应用场景

  • 配置项:在某些情况下,可能希望多个实例共享某些配置信息。这时可以利用类变量或全局变量来实现。
  • 缓存:利用共享的可变对象作为缓存,可以在不同实例间共享计算结果,提高性能。

结论

了解Python中对象引用的工作机制对于正确地使用默认参数非常重要。遵循最佳实践可以帮助开发者避免潜在的错误,并编写出更加健壮和高效的代码。

http://www.tj-hxxt.cn/news/1774.html

相关文章:

  • 深圳品牌网站建设公司营销推广网
  • 现实有有哪里学做网站的网站排名靠前的方法
  • 公司网站建设需要哪些百度关键词优化排名
  • 网站开发公司什么是seo文章
  • 通达oa 做网站郑州免费做网站
  • 爱做片视频网站成品短视频软件大全下载手机版
  • access2003做网站seo每日工作
  • 怎么查网站备案域名seo网络推广经理
  • 杭州网站建设 网络服务友情链接交换的方法
  • 网站建设乐云seo国内搜索引擎网站
  • 如何用dw做网站设计谷歌地球
  • 网站怎么做电脑系统下载软件网站做seo教程
  • 建筑a证seo诊断方案
  • wordpress功能小工具优化网站的步骤
  • 没有注册公司怎么做网站产品如何做线上推广
  • 武汉 外贸网站建设深圳seo优化公司
  • 深圳外贸网站外贸网站建设推广营销企业
  • 可以做电商题目的网站广西壮族自治区在线seo关键词排名优化
  • 万江区网站仿做友情链接批量查询
  • 求个网站好人有好报2022软文范例100字
  • 修改wordpress 表格站内seo内容优化包括
  • 台州做网站优化哪家好seo交流网
  • 两学一做 官方网站seo推广和百度推广的区别
  • 天津智能网站建设哪里有手机怎么建立网站
  • 陕西城乡建设厅网站北京网站推广机构
  • 网上做公益的网站百度手机助手苹果版
  • wordpress 上一篇下一篇网站seo快速优化
  • 建行手机银行app下载西安网站seo技术
  • 郑州网站seo排名学网络与新媒体后悔死了
  • 备案 网站服务内容谷歌引擎搜索入口