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

建设银行常熟支行网站一级域名生成二级域名

建设银行常熟支行网站,一级域名生成二级域名,福建省城乡建设厅网站,站长之家官网文章目录 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.yayakq.cn/news/351645/

相关文章:

  • 可以免费商用国外印花图案设计网站商务网站是什么
  • 网站首页在哪个文件夹开封市做网站的公司
  • 用dw怎么做网站留言板网站开发的初级技术员
  • 营销型网站案例网站建设书本
  • 网站建设佰首选金手指二五dw做的网站怎么上传图片
  • 天天向上网站建设网站建设 网页设计 网站制作
  • 北京行业网站制作免费苏州企业名录
  • 赣州网站建设效果网页编辑模式怎么打开
  • 邢台网站改版怎么开发在自己的网站做百度搜索框
  • 链接网站logo汉川seo推广
  • 琼海做网站公司广东深圳网站建设服务
  • 网站建设市场行情竞争者网站建设情况
  • 重庆省建设厅网站哈尔滨自助板建站
  • 国外打开网站会不会乱码搜索引擎优化定义
  • php网站编程pc端百度
  • 广州市网站建设需要审批网站里的聊天怎么做的
  • 下载网站程序盐城网站建设优化建站
  • 网站开发微信支付功能中国建筑招聘官网2022
  • 怎么知道网站的域名网站建设平台哪个好
  • 网站建设的收入来源山东电商运营公司排名
  • 网站开发 强制兼容模式怎么做网站 ppt
  • 做网站前需要准备什么条件网站开发翻译
  • php公司网站中国建设银行的网站用户名是什么
  • 外贸公司建网站一般多少钱在哪做网站建设
  • 如何注销网站域名手机网站开发平台
  • wordpress添加海报分享功能seo如何优化关键词排名
  • 无锡市网站搭建网页制作学什么软件好
  • 对网站分析权威发布信息
  • 全国交通建设网官方网站外贸平台建设
  • 青岛市网站制作哪个网站代做装修效果图