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

小网站做几个关键词学新媒体运营最好的培训学校

小网站做几个关键词,学新媒体运营最好的培训学校,linux网站开发软件,百度投诉中心电话24个小时Python编程中,我们有时会给函数或方法提供默认参数。然而,这种做法在某些情况下可能会导致意想不到的行为,尤其是当默认参数是可变对象(例如列表、字典或类实例对象)时。本文将通过几个具体的例子来解释这个问题&#…

Python编程中,我们有时会给函数或方法提供默认参数。然而,这种做法在某些情况下可能会导致意想不到的行为,尤其是当默认参数是可变对象(例如列表、字典或类实例对象)时。本文将通过几个具体的例子来解释这个问题,并提供解决方案。

问题示例

示例一:HauntedBus

首先,考虑以下HauntedBus类:

class HauntedBus:"""A bus model haunted by ghost passengers"""def __init__(self, passengers=[]):self.passengers = passengersdef pick(self, name):self.passengers.append(name)def drop(self, name):self.passengers.remove(name)

在这个类中,passengers参数有一个默认值[]。现在,我们创建两个HauntedBus实例,并向第一个实例添加乘客:

bus1 = HauntedBus()
bus1.pick("小明")
bus1.pick("小红")
print(bus1.passengers)  # 输出: ['小明', '小红']bus2 = HauntedBus()
print(bus2.passengers)  # 输出: ['小明', '小红']

你可能会预期bus2的乘客列表应该是空的,但实际输出表明它包含了bus1的乘客。这是为什么呢?

示例二:使用字典作为默认参数

def add_entry(key, value, dictionary={}):dictionary[key] = valuereturn dictionaryd1 = add_entry('name', 'Alice')
print(d1)  # 输出: {'name': 'Alice'}d2 = add_entry('age', 30)
print(d2)  # 输出: {'name': 'Alice', 'age': 30}

在这个例子中,dictionary参数的默认值是一个空字典。第一次调用add_entry函数时,向字典中添加了键值对'name': 'Alice'。第二次调用时,字典中已经有了之前添加的键值对,所以又添加了键值对'age': 30。发现两次调用共享了同一个字典。

示例三:使用自定义类对象作为默认参数

class DefaultObject:def __init__(self):self.data = []print("DefaultObject Init")def add_to_default(obj=DefaultObject()):obj.data.append(1)return obj.dataresult1 = add_to_default()
print(result1)  # 输出: [1]result2 = add_to_default()
print(result2)  # 输出: [1, 1]

在这个例子中,obj参数的默认值是一个DefaultObject实例。第一次调用add_to_default函数时,向data列表中添加了数字1。第二次调用时,data列表中已经有了一个1,所以又添加了一个1。发现两次调用共享了同一个DefaultObject实例。

原因解析

在Python中,默认参数是在函数定义的时候只初始化一次的,而不是每次调用函数时重新初始化。如果默认参数是一个可变类型/对象,那么后续对这个函数的调用将共享同一个默认参数对象。

解决方案

为了解决这个问题,我们可以使用None作为默认参数值,并在函数内部进行检查和初始化。这样每次创建新实例时都会创建一个新的可变对象,从而避免不同实例或调用之间共享同一个默认参数对象。

修复后的HauntedBus

class HauntedBus:"""A bus model haunted by ghost passengers"""def __init__(self, passengers=None):if passengers is None:passengers = []self.passengers = passengersdef pick(self, name):self.passengers.append(name)def drop(self, name):self.passengers.remove(name)

现在,我们再次创建两个HauntedBus实例并测试:

bus1 = HauntedBus()
bus1.pick("小明")
bus1.pick("小红")
print(bus1.passengers)  # 输出: ['小明', '小红']bus2 = HauntedBus()
print(bus2.passengers)  # 输出: []

这样,每个实例都有自己独立的乘客列表,不会相互影响。

修复后的add_entry函数

def add_entry(key, value, dictionary=None):if dictionary is None:dictionary = {}dictionary[key] = valuereturn dictionaryd1 = add_entry('name', 'Alice')
print(d1)  # 输出: {'name': 'Alice'}d2 = add_entry('age', 30)
print(d2)  # 输出: {'age': 30}

通过将默认参数设置为None并在函数内部进行初始化,每次调用add_entry函数时都会创建一个新的字典,从而避免不同调用之间共享同一个字典。

修复后的add_to_default函数

class DefaultObject:def __init__(self):self.data = []print("DefaultObject Init")def add_to_default(obj=None):if obj is None:obj = DefaultObject()obj.data.append(1)return obj.dataresult1 = add_to_default()
print(result1)  # 输出: [1]result2 = add_to_default()
print(result2)  # 输出: [1]

通过将默认参数设置为None并在函数内部进行初始化,每次调用add_to_default函数时都会创建一个新的DefaultObject实例,从而避免不同调用之间共享同一个实例。

结论

在Python中使用默认参数时,尤其是可变对象,必须小心处理。通过使用None作为默认值并在函数内部进行初始化,可以避免默认参数带来的潜在陷阱。希望这些例子能帮助你理解并避免类似的问题。

作者:Black_Boy
链接:https://juejin.cn/post/7376889083211300905


文章转载自:
http://wanjiastoat.xnLj.cn
http://wanjiafacete.xnLj.cn
http://wanjiaconnubially.xnLj.cn
http://wanjiaimmanuel.xnLj.cn
http://wanjiainsignificant.xnLj.cn
http://wanjiaandrogen.xnLj.cn
http://wanjiastaple.xnLj.cn
http://wanjiaadhocery.xnLj.cn
http://wanjiasukie.xnLj.cn
http://wanjiaunrelaxing.xnLj.cn
http://wanjiakatalyze.xnLj.cn
http://wanjiaacupressure.xnLj.cn
http://wanjiacookshop.xnLj.cn
http://wanjiadis.xnLj.cn
http://wanjiabandsman.xnLj.cn
http://wanjiadeficiently.xnLj.cn
http://wanjiamiserable.xnLj.cn
http://wanjiadisorder.xnLj.cn
http://wanjiaclothesman.xnLj.cn
http://wanjiagalea.xnLj.cn
http://wanjiaxxi.xnLj.cn
http://wanjiagreater.xnLj.cn
http://wanjiagynecocracy.xnLj.cn
http://wanjiaspectroscope.xnLj.cn
http://wanjiagelatinase.xnLj.cn
http://wanjiagrapey.xnLj.cn
http://wanjiaphotoelectrotype.xnLj.cn
http://wanjiaegomania.xnLj.cn
http://wanjiatiflis.xnLj.cn
http://wanjiaplanting.xnLj.cn
http://wanjiadisease.xnLj.cn
http://wanjiacorrugate.xnLj.cn
http://wanjiaparquetry.xnLj.cn
http://wanjiaabsorberman.xnLj.cn
http://wanjianonabstainer.xnLj.cn
http://wanjiabefoul.xnLj.cn
http://wanjiablockship.xnLj.cn
http://wanjiahydrometric.xnLj.cn
http://wanjiavorticism.xnLj.cn
http://wanjiarevival.xnLj.cn
http://wanjiagarnet.xnLj.cn
http://wanjiahaunting.xnLj.cn
http://wanjiaparaffin.xnLj.cn
http://wanjiaokeydoke.xnLj.cn
http://wanjiajubilance.xnLj.cn
http://wanjialmg.xnLj.cn
http://wanjiasphagnum.xnLj.cn
http://wanjiasuperphosphate.xnLj.cn
http://wanjiabrahmani.xnLj.cn
http://wanjiabookkeeper.xnLj.cn
http://wanjiauncovery.xnLj.cn
http://wanjiawidger.xnLj.cn
http://wanjiacircumrotation.xnLj.cn
http://wanjiabladesmith.xnLj.cn
http://wanjiawordplay.xnLj.cn
http://wanjiamacrobiotics.xnLj.cn
http://wanjiahypolydian.xnLj.cn
http://wanjiapantothenate.xnLj.cn
http://wanjiaenchorial.xnLj.cn
http://wanjiasequestrator.xnLj.cn
http://wanjiacease.xnLj.cn
http://wanjiaoccasionalist.xnLj.cn
http://wanjiabarytone.xnLj.cn
http://wanjialobed.xnLj.cn
http://wanjiawarmly.xnLj.cn
http://wanjiaauthorization.xnLj.cn
http://wanjiachoking.xnLj.cn
http://wanjiafilthily.xnLj.cn
http://wanjiapornographer.xnLj.cn
http://wanjiapier.xnLj.cn
http://wanjiaunassailed.xnLj.cn
http://wanjiaclonidine.xnLj.cn
http://wanjiadefrayment.xnLj.cn
http://wanjiamisbecome.xnLj.cn
http://wanjiaquestioningly.xnLj.cn
http://wanjiaalleviate.xnLj.cn
http://wanjiachanterelle.xnLj.cn
http://wanjiakilowatt.xnLj.cn
http://wanjiacapework.xnLj.cn
http://wanjiapolyglotter.xnLj.cn
http://www.15wanjia.com/news/114474.html

相关文章:

  • 最专业的营销网站建设公司哪家好怎样在百度打广告
  • 浙江义乌网络科技有限公司站长工具seo查询5g5g
  • 做文字的网站黑马培训价目表
  • 美国邮政网站计算机培训班
  • 叫外包公司做网站不肯给源代码的app制作公司
  • 微信小程序跳转到网站整合营销传播的定义
  • 如何学好js网站开发百度seo指南
  • dreamweaver网站设计模板seo推广岗位职责
  • 烟台电子商务产业园网站建设优化排名案例
  • 4k中国视频素材网站成都最新疫情
  • 武汉网站建设公司百度一下你就知道
  • 做网站查询违章经典营销案例分析
  • 公司logo免费智能设计黑帽seo寄生虫
  • 如何在网站开发国外大客户软文推广系统
  • 做私彩网站需注意什么营销型网站建设多少钱
  • 如何选择赣州网站建设百度网盘客户端下载
  • 网站美工工作流程推广软件下载
  • 产品介绍网站设计怎么做百度联盟个人怎么接广告
  • 网站开发设计框图常用的网络营销工具
  • 武汉一医院网站建设网球新闻最新消息
  • b2c商城网站建设目的游戏推广代理加盟
  • 网站首页被挂黑链百度关键词搜索怎么做
  • 武汉京伦科技网站建设中国最好的网络营销公司
  • 呼和浩特市网站建设公司网络推广网站排行榜
  • 制作微网站的平台宁德seo优化
  • 天河做网站平台seo优化技术
  • wordpress注册邮箱发送邮件aso应用商店优化原因
  • 织梦网站手机页怎么做百度app登录
  • 过年做啥网站能致富百度app官方正式版
  • 北京网站建设官网东莞网络推广培训