Раньше я вызывал split
, join
и strip
как методы строковых объектов, пока однажды мне не потребовалось сделать скрипт более эффективным.
Профилирование с использованием cProfile
показало мне, чтомного времени было потрачено на эти вызовы методов. Советы по производительности предложил мне вместо этого сделать "копию" этих методов в моей области видимости, чтобы избежать этого:
split = str.split
join = str.join
for _ in xrange(1000000):
print join("_", split("Pulp Fiction"))
Если я хорошо помню, уловка действительно привела к повышению производительности.
Однако, если мне нужны эти функции для работы со строками в нескольких функциях, я делаю эти копии в «глобальной области видимости» моей программы (не уверен, что это правильный способ сказать это).pylint
затем жалуется, что я не использую правильное соглашение для именования моих переменных:
Invalid name "split" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
Так что я заканчиваю именовать их заглавными буквами:
SPLIT = str.split
JOIN = str.join
def main():
for _ in xrange(1000000):
print JOIN("_", SPLIT("Pulp Fiction"))
Это немногоуродливо, хотя.
Иногда я забываю о возможности делать копии и делать импорт:
from string import split, join
А потом я получаю предупреждение Uses of a deprecated module 'string'
.