Я не думаю, что вы можете получить гораздо более эффективным в смысле высокой скорости. Вы используете функции python для всех манипуляций с строками, и вы вряд ли будете лучше разбираться в python.
Но ваш код не так эффективен в отношении скорости разработки. Представьте, что вы хотите изменить «Персонаж» на «Личность», тогда вам нужно изменить 8 строк кода. Ответ unutbu, например, дает вам подсказку для гораздо лучшего решения, и даже это можно улучшить, например, путем введения класса для символов, как указано moooeeeep. Даже если вы сейчас думаете, что это чистая косметика, в долгосрочной перспективе это поможет вам повысить производительность, так как вы сможете вносить изменения (например, найденную вами оптимизацию) в отличие от текущего кода, который не поддерживается.
Другое дело, я с трудом верю, что вы действительно сталкиваетесь с проблемами производительности с этим кодом. Он ничего не делает, кроме как писать несколько строк в один файл. Будьте очень осторожны, чтобы не оптимизировать то, что вам не нужно (преждевременная оптимизация). Только если вы столкнетесь с проблемами производительности, проанализируйте узкие места и попытайтесь улучшить худшее.
EDIT: К сожалению, я имел в виду moooeeeep комментарий по этому вопросу: Это прототип расширения пример из unutbu с классом, располагающего информацией атрибутов:
import random
class Character(object):
'''
This class holds all the information concerning a character, it's attributes,
the character number, ...
'''
def __init__(self, character_number, initial_value):
'''
Initialize a new character object with character_number and initial_value
'''
self.strength = initial_value + (random.randint(1,12) // random.randint(1,4))
self.skill = initial_value + (random.randint(1,12) // random.randint(1,4))
self.character_number = character_number
def get_attributes_dict(self):
'''
return a dictionary with the attributes names and their values for this character
'''
return {'strength': self.strength,
'skill': self.skill
}
def writeout_character_attributes(characters_list):
'''
this function writes a complete list of character into a file
'''
#The 'with' statement is used here, because it automatically closes the
#file at the end of this block, so you cannot forget it
with open('character_attribute_data.txt', 'w') as myfile:
#iterate over the character in the list
for character in characters_list:
#get all the attributes for the current character
attributes = character.get_attributes_dict()
#iterate over the attributes names and values,
#defined in the character class
for attribute_name, val in attributes.items():
msg = "Character {i} now has a {attribute_name} attribute of {val}".format(
i= character.character_number, attribute_name=attribute_name, val=val)
print(msg)
myfile.write(msg+'\n')
def get_list_of_characters(initial_value):
list_of_characters = []
# we want two characters with numbers 1 and 2
for i in range(1, 3):
#create a new character
character = Character(i, initial_value)
#add this character to the list of characters
list_of_characters.append(character)
return list_of_characters
if __name__ == '__main__':
list_of_characters = get_list_of_characters(10)
writeout_character_attributes(list_of_characters)
Пришло, возможно, не меньше строк кода, но гораздо проще, например, добавить больше атрибутов или добавить логику komplex в класс символов
кто-то мне помогите :) –
Я бы предложил создать класс для ваших символов, включая функции-члены, которые возвращают отформатированные строки для печатного выхода атрибутов (возможно, более loading '__repr __()') и другой метод, который выгружает эту строку в файл, которая в конечном итоге использует оператор 'with' для этой задачи. Но в конце концов, это не связано ни с эффективностью, ни с Python 3.x. – moooeeeep
извините, что я имел в виду по эффективности меньше строк кода –