python打印内存地址_如何不打印出内存位置python

在Python编程中,当你直接打印对象时,它默认会显示内存地址。要输出对象的名称,可以重写`__repr__`方法。本文通过一个实例展示了如何创建Person和Bus类,并在类的方法中实现输出对象名称的功能,避免打印内存位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在创建这个程序,它的一个函数是输出一个在构造函数中初始化的列表。但是,发生的事情是它以十六进制或其他形式输出内存位置,我不知道为什么。

我有两个班和一个跑步班:class Person :

def __init__(self, name, ID, age, location, destination):

self.name = name

self.ID = ID

self.age = age

self.location = location

self.destination = destination

def introduce_myself(self):

print("Hi, my name is " + self.name + " , my ID number is " + str(self.ID) + " I am " + str(self.age) + " years old")

def get_route(self):

return self.location + self.destination

def add2bus(self, Bus):

if Person.get_route(self) == Bus.get_route() :

Bus.get_on(Bus)

else :

print("not compatible")

def get_name(self):

print(self.name)

import People

class Bus :

def __init__(self, name, capacity, location, destination):

self.bus_name = name

self.bus_capacity = capacity

self.bus_location = location

self.bus_destination = destination

self.seats = []

self.people = []

def Bus_properties(self):

print(self.bus_name + ", " + str(self.bus_capacity) + ", " + self.bus_location + ", " + self.bus_destination)

def print_list(self):

a = self.people

print(self.people)

def get_route(self):

return self.bus_location + self.bus_destination

def get_on(self, Person):

if len(self.people) < 20: #Loop through all the seats

self.people.append(Person)

else:

print('fulll')

def get_name(self):

print(self.name)

import People

import Transport

C2C = Transport.Bus("C2C", 30, "Ithaca", "New York")

Fred = People.Person("Fred", 12323, 13, "Ithaca", "New York")

Jennifer = People.Person("Jennifer", 111117, 56, "Ithaca", "New York")

Fred.add2bus(C2C)

Jennifer.add2bus(C2C)

我想创建一个while循环,它取peoplelist的长度,并使用while x&lt;len(C2C.people)的条件,然后将总线上所有人的名字附加到一个list y

像这样。。。x = 0

y = []

while x < len(C2C.people) :

y.append((C2C.people[x].get_name()))

x = x + 1

print(y)

但我得到的结果是:

弗莱德

[无]

詹妮弗

[无,无]

Python中,打印通常会直接占用内存,因为它是用于输出信息到控制台的一个基本操作。当您调用`print()`函数时,它只是将字符串或变量的值显示在屏幕上,并会存储这个输出内容。然而,如果频繁地打印大量数据,可能会增加程序的I/O操作,影响性能,尤其是在处理大数据集时。 如果您想避免频繁地将大对象转换为字符串并打印,可以考虑使用一些其他方法,例如: 1. **生成器**:通过yield关键字创建生成器函数,可以在需要的时候逐个返回值,而是一次性全部计算并存储。 ```python def generate_large_data(): # 这里是一个会生成大量数据的函数 for item in large_dataset: yield item for value in generate_large_data(): # 打印每个值而占用大量内存 print(value) ``` 2. **分块处理**:如果你的数据太大无法一次性加载,可以分块读取和处理。 ```python with open('large_file.txt', 'r') as file: while True: data_chunk = file.read(chunk_size) # 设置合适的chunk_size if not data_chunk: break print(data_chunk) ``` 3. **使用日志模块**:Python的logging模块可以帮助你在调试阶段记录详细的信息,同时还可以设置同的输出级别和缓冲策略。 ```python import logging logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s')) logger.addHandler(handler) # 使用logging.info()代替print logger.info("Large data logged") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值