Python Append与+=操作效率测试分析

需积分: 5 0 下载量 126 浏览量 更新于2024-10-30 收藏 668B ZIP 举报
资源摘要信息: "py代码-测试append和+=.py" 在Python编程语言中,append和+=都是用来向数据结构中添加元素的操作符,但它们在使用上有不同的效果和适用场景。以下是对这一概念的知识点详细说明。 1. append方法: append是Python中列表(list)的一个方法,用于在列表的末尾添加一个新的元素。该方法将元素作为单个元素添加到列表的末尾,并返回None,因此它不适用于字符串、元组等不可变数据结构。append方法对所有可迭代对象都适用,包括列表自身。 2. +=操作符: +=操作符在Python中是执行原地加法操作的快捷方式。对于列表而言,使用+=可以实现列表的合并,即将右侧的列表(或任何可迭代对象)中的元素全部添加到左侧列表的末尾。与append不同的是,+=操作符不仅限于列表,还适用于字符串、元组、集合等其他可迭代类型。 具体到append和+=的使用场景和行为差异: - 当需要在列表末尾添加单个元素时,通常选择使用append方法。例如: ```python my_list = [1, 2, 3] my_list.append(4) print(my_list) # 输出 [1, 2, 3, 4] ``` - 当需要将另一个列表或任何可迭代对象中的所有元素添加到现有列表的末尾时,使用+=操作符更为方便。例如: ```python my_list = [1, 2, 3] another_list = [4, 5] my_list += another_list print(my_list) # 输出 [1, 2, 3, 4, 5] ``` 在性能方面,+=操作符在添加元素时通常比使用循环调用append方法更高效,因为它通过直接操作内存的方式减少了多次函数调用的开销。 在Python的内置函数和数据结构中,append和+=操作符都扮演着重要的角色。正确使用这些操作符对于编写高效且可读性强的Python代码至关重要。在实际开发中,理解它们的原理和适用范围可以帮助开发者避免一些常见的错误,并优化代码的性能。 需要注意的是,尽管append和+=在功能上有一定的重叠,但它们并非完全相同。例如,在某些情况下,如果使用+=来添加单个元素到列表,这种操作的效率要低于直接使用append方法。这是因为+=在添加单个元素时同样会尝试合并列表,这比简单的在末尾追加一个元素要复杂。 在实际应用中,合理选择append或+=需要根据具体需求来定。当只需要添加单个元素时,应该优先考虑使用append方法;而当需要合并两个列表或多个元素时,+=操作符可能是更简洁直观的选择。 最后,理解这些操作符的使用及其背后的数据结构操作对于进行更复杂的数据处理和算法设计是非常有帮助的,尤其是当你在处理大型数据集或需要优化性能时。

TypeError Traceback (most recent call last) /tmp/ipykernel_1045/245448921.py in <module> 1 dataset_path = ABSADatasetList.Restaurant14 ----> 2 sent_classifier = Trainer(config=apc_config_english, 3 dataset=dataset_path, # train set and test set will be automatically detected 4 checkpoint_save_mode=1, # =None to avoid save model 5 auto_device=True # automatic choose CUDA or CPU /tmp/ipykernel_1045/296492999.py in __init__(self, config, dataset, from_checkpoint, checkpoint_save_mode, auto_device) 84 config.model_path_to_save = None 85 ---> 86 self.train() 87 88 def train(self): /tmp/ipykernel_1045/296492999.py in train(self) 96 config.seed = s 97 if self.checkpoint_save_mode: ---> 98 model_path.append(self.train_func(config, self.from_checkpoint, self.logger)) 99 else: 100 # always return the last trained model if dont save trained model /tmp/ipykernel_1045/4269211813.py in train4apc(opt, from_checkpoint_path, logger) 494 load_checkpoint(trainer, from_checkpoint_path) 495 --> 496 return trainer.run() /tmp/ipykernel_1045/4269211813.py in run(self) 466 criterion = nn.CrossEntropyLoss() 467 self._reset_params() --> 468 return self._train(criterion) 469 470 /tmp/ipykernel_1045/4269211813.py in _train(self, criterion) 153 return self._k_fold_train_and_evaluate(criterion) 154 else: --> 155 return self._train_and_evaluate(criterion) 156 157 def _train_and_evaluate(self, criterion): /tmp/ipykernel_1045/4269211813.py in _train_and_evaluate(self, criterion) 190 191 for epoch in range(self.opt.num_epoch): --> 192 iterator = tqdm(self.train_dataloaders[0]) 193 for i_batch, sample_batched in enumerate(iterator): 194 global_step += 1 TypeError: 'module' object is not callable

2023-07-12 上传

import socket import time from typing import cast import zeroconf #https://github.com/mnishig/mdns-discover/blob/master/ServiceDiscover.py class ZeroconfListener(zeroconf.ServiceListener): def __init__(self) -> None: super().__init__() self.services = [] def remove_service(self, zc: 'Zeroconf', type_: str, name: str) -> None: # print('{} service: removed'.format(name) ) info = zc.get_service_info(type_, name) for service in self.services: if service['name'] == name: self.services.remove(service) def add_service(self, zc: 'Zeroconf', type_: str, name: str) -> None: info = zc.get_service_info(type_, name) addr_str = [] for item in info.addresses: addr_str.append(socket.inet_ntoa(cast(bytes, item))) # print(name, addr_str) item = { 'name': info.name, 'type': info.type, 'server': info.server, 'addresses': addr_str, 'port': info.port, } self.services.append(item) def update_service(self, zc: 'Zeroconf', type_: str, name: str) -> None: pass def get_services(self) -> list: return self.services class ServiceDiscover: def __init__(self) -> None: # self.zeroconf = zeroconf.Zeroconf() self.browser = None self.types = [] self.services = [] self.get_servicetypes() def get_servicetypes(self) -> None: self.types = zeroconf.ZeroconfServiceTypes.find() def browse(self) -> None: zc = zeroconf.Zeroconf() listener = ZeroconfListener() for type in self.types: counter = 0 browser = zeroconf.ServiceBrowser(zc, type, listener) while counter < 5: time.sleep(0.1) counter += 1 browser.cancel() self.services = listener.services if __name__ == "__main__": sd = ServiceDiscover() sd.browse() for item in sd.services: print("hello") print(item)

2023-06-01 上传
2023-06-11 上传