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

国外做蒸汽锅炉的网站推广代理公司

国外做蒸汽锅炉的网站,推广代理公司,瑞安app开发,企业名录搜索软件现在那个能用文章目录 1. num,list ,tuple2. list 作为默认值导致共享同一列表3. 防御可变参数4. 结论 1. num,list ,tuple 结论:num ,tuple 作为参数,自身不会因为函数的原因而改变,list 为可变量,会因为函数变而变。 测试 def f(a, b):a …

文章目录

  • 1. num,list ,tuple
  • 2. list 作为默认值导致共享同一列表
  • 3. 防御可变参数
  • 4. 结论

1. num,list ,tuple

结论:num ,tuple 作为参数,自身不会因为函数的原因而改变,list 为可变量,会因为函数变而变。

  • 测试
def f(a, b):a += breturn aif __name__ == "__main__":x = 1y = 2result = f(x, y)print("*"*40)print("num 数字作为参数")print(f"x= {x}")print(f"y= {y}")print(f"result={result}")print("*"*40,'\n')x1 = [1,2]y1 = [3,4]result1 = f(x1, y1)print("*"*40)print("list 数字作为参数")print(f"x1= {x1}")print(f"y1= {y1}")print(f"result1={result1}")print("*"*40,'\n')x2 = (1,2)y2 = (3,4)result2 = f(x2, y2)print("*"*40)print("tuple 数字作为参数")print(f"x2= {x2}")print(f"y2= {y2}")print(f"result2={result2}")print("*"*40)
  • 结论:
****************************************
num 数字作为参数
x= 1
y= 2
result=3
**************************************** ****************************************
list 数字作为参数
x1= [1, 2, 3, 4]
y1= [3, 4]
result1=[1, 2, 3, 4]
**************************************** ****************************************
tuple 数字作为参数
x2= (1, 2)
y2= (3, 4)
result2=(1, 2, 3, 4)

2. list 作为默认值导致共享同一列表

没有指定初始乘客的HauntedBus实例会共享同一乘客列表

class HauntedBus:"""备受幽灵乘客折磨的校车"""# 默认值为list ,会导致新实例化的bus2 & bus3共享同一列表def __init__(self, passengers=[]):# 设置可变类型作为参数默认值self.passengers = passengersdef pick(self, name):self.passengers.append(name)def drop(self, name):try:self.passengers.remove(name)except ValueError as e:print("error for ", e)if __name__ == "__main__":bus1 = HauntedBus(['Alice', 'Bill'])print(f"bus1.passengers={bus1.passengers}")bus1.pick('Charlie')bus1.drop('Alice')print(f"bus1.passengers={bus1.passengers}")bus2 = HauntedBus()bus2.pick('Carrie')print(f"bus2.passengers={bus2.passengers}")bus3 = HauntedBus()print(f"bus3.passengers={bus3.passengers}")
  • 结果
bus1.passengers=['Alice', 'Bill']
bus1.passengers=['Bill', 'Charlie']
bus2.passengers=['Carrie']  # bus2 和bus3 没有默认值的情况下共享同一列表
bus3.passengers=['Carrie']

3. 防御可变参数

  • 缺点: 用list 作为形参,会改变实参的值
class TwilightBus:"""让乘客销声匿迹的校车"""def __init__(self, passengers=None):if passengers is None:self.passengers = []else:# 用 passengers 作为参数传入,会导致self.passengers,#                                  passengers ,basketball_team,# 都为列表['sue', 'tina', 'maya', 'diana', 'pat'] 的别名,所以任一改变,# 均可改变['sue', 'tina', 'maya', 'diana', 'pat']的值self.passengers = passengersdef pick(self, name):self.passengers.append(name)def drop(self, name):try:self.passengers.remove(name)except ValueError as e:print("Error for ", e)if __name__ == "__main__":basketball_team = ['sue', 'tina', 'maya', 'diana', 'pat']bus = TwilightBus(basketball_team)print(f"before : basketball_team={basketball_team}")bus.drop('tina')bus.drop('jason')bus.drop('pat')print(f"after : basketball_team={basketball_team}")
  • 结果:
before : basketball_team=['sue', 'tina', 'maya', 'diana', 'pat']
Error for  list.remove(x): x not in list
# 列表在经过函数后居然发生变化
after : basketball_team=['sue', 'maya', 'diana']  
  • 方案:
    应该把参数值的副本赋值给self.passengers,
    错误:self.passengers = passengers
    正确:self.passengers = list(passengers)
class TwilightBus:"""让乘客销声匿迹的校车"""def __init__(self, passengers=None):if passengers is None:self.passengers = []else:# 用 passengers 作为参数传入,会导致self.passengers,passengers ,basketball_team,# 都为列表['sue', 'tina', 'maya', 'diana', 'pat'] 的别名,所以任一改变,均可改变['sue', 'tina', 'maya', 'diana', 'pat']的值self.passengers = passengersdef pick(self, name):self.passengers.append(name)def drop(self, name):try:self.passengers.remove(name)except ValueError as e:print("Error for ", e)class OkBus:def __init__(self, passengers=None):if passengers is None:self.passengers = []else:# 创建 passengers 的副本,并且赋值给 self.passengers# 重点 list(passengers)!!!!!!!self.passengers = list(passengers)def pick(self, name):self.passengers.append(name)def drop(self, name):try:self.passengers.remove(name)except ValueError as e:print("Error for ", e)if __name__ == "__main__":basketball_team = ['sue', 'tina', 'maya', 'diana', 'pat']bus = TwilightBus(basketball_team)print("*"*40)print(f"before : basketball_team={basketball_team}")bus.drop('tina')bus.drop('jason')bus.drop('pat')print(f"after : basketball_team={basketball_team}")print("*"*40)basketball_teamok = ['sue', 'tina', 'maya', 'diana', 'pat']busok = OkBus(basketball_teamok)print(f"before : basketball_teamok={basketball_teamok}")busok.drop('tina')busok.drop('pat')print(f"after : basketball_teamok={basketball_teamok}")print("*"*40)
  • 结果
****************************************
# self.passengers = passengers 的结果,会影响原来的参数列表 basketball_team
before : basketball_team=['sue', 'tina', 'maya', 'diana', 'pat']
Error for  list.remove(x): x not in list
after : basketball_team=['sue', 'maya', 'diana']
****************************************
# self.passengers = list(passengers) 的结果,不影响 原来的参数列表 basketball_team
before : basketball_teamok=['sue', 'tina', 'maya', 'diana', 'pat']
after : basketball_teamok=['sue', 'tina', 'maya', 'diana', 'pat']
****************************************

4. 结论

当函数用参数时,尽量用不可变作为形参,比如数字,元组,如果用可变类型作为变量,会导致传入的值变化,为了解决这个问题,判断参数传入的是不是None,并且重新创建新的list

class Bus:def __init__(self,passengers=None):if passengers is None:self.passengers = []else:self.passengers = list(passengers)
http://www.yidumall.com/news/48642.html

相关文章:

  • 易动力建设网站怎么样站长之家素材
  • 廊坊网站排名优化公司哪家好上海网络推广团队
  • zencart网站管理目前主流搜索引擎是哪种
  • 石家庄做网站公司全媒体运营师报名入口
  • 柳州公积金网站深圳网络推广网站推广
  • 大兴网站建设优化seoseo课程培训中心
  • 微信公众号做公司网站今日最新国内新闻
  • 个体可以做企业网站吗营销策略都有哪些方面
  • 濮阳建站公司流程优化网站seo
  • 做电影网站 广告收入网络营销推广的
  • 网站建设支付国内新闻摘抄2022年
  • 股票网站排名哪个好良品铺子网络营销策划书
  • 做网站不知道做什么内容的长春网站制作企业
  • 传奇网页游戏变态版seoul national university
  • 网站开发设计师广州网站到首页排名
  • 建设公司和建筑公司有什么区别搜索引擎优化是做什么
  • 淘宝店可以做团购的网站sem竞价专员
  • 郑州做网站公司有多少钱百度快速排名系统查询
  • 如何在360网站网页上做笔记安徽网络建站
  • 做网站临沂谷歌seo排名
  • 虚拟机做网站新软件推广
  • 电商网站设计规范今日头条新闻发布
  • 网站做优化按点击收费百度竞价排名名词解释
  • 鱿鱼网站男女做愛免費视頻网络营销内容
  • 哪些网站可以做设计方案模拟搜索点击软件
  • 基于web的旅游网站设计论文网络营销的方式有几种
  • 昆明做网站vr最近一个月的热点事件
  • 做网站赚钱交税指数基金定投怎么买
  • 计算机做网站开发需要什么证书论坛推广的特点
  • 用qq做网站客服网络公司网页设计