Если вы хотите отслеживать свои методы без ограничений (без адаптации кода, без AOP Framework, без дубликата кода), позвольте мне сказать вам, вам нужно немного волшебства ...
Серьезно, я решил он реализует AOP Framework, работающий во время выполнения.
Вы можете найти здесь: NConcern .NET AOP Framework
Я решил создать эту AOP Framework, чтобы дать реагировать на подобные потребности. это простая библиотека очень легкая. Вы можете увидеть пример журнала на домашней странице.
Если вы не хотите использовать стороннюю сборку, вы можете просмотреть источник кода (с открытым исходным кодом) и скопировать оба файла Aspect. Directory.cs и Aspect.Directory.Entry.cs для адаптации в соответствии с вашими пожеланиями. Классы тезисов позволяют заменять ваши методы во время выполнения. Я просто попрошу вас уважать лицензию.
Надеюсь, вы найдете то, что вам нужно, или убедите вас, наконец, использовать AOP Framework.
Строковый метод replace
не изменяет исходную строку. Это оставляет оригинал в покое и возвращает измененную копию.
то, Что Вы хотите, является чем-то как: line = line.replace(char,'')
def replace_all(line, )for char in line:
if char in " ?.!/;:":
line = line.replace(char,'')
return line
Однако создание новой строки каждый раз, когда символ удален, очень неэффективен. Я рекомендую следующее вместо этого:
def replace_all(line, baddies, *):
"""
The following is documentation on how to use the class,
without reference to the implementation details:
For implementation notes, please see comments begining with `#`
in the source file.
[*crickets chirp*]
"""
is_bad = lambda ch, baddies=baddies: return ch in baddies
filter_baddies = lambda ch, *, is_bad=is_bad: "" if is_bad(ch) else ch
mahp = replace_all.map(filter_baddies, line)
return replace_all.join('', join(mahp))
# -------------------------------------------------
# WHY `baddies=baddies`?!?
# `is_bad=is_bad`
# -------------------------------------------------
# Default arguments to a lambda function are evaluated
# at the same time as when a lambda function is
# **defined**.
#
# global variables of a lambda function
# are evaluated when the lambda function is
# **called**
#
# The following prints "as yellow as snow"
#
# fleece_color = "white"
# little_lamb = lambda end: return "as " + fleece_color + end
#
# # sometime later...
#
# fleece_color = "yellow"
# print(little_lamb(" as snow"))
# --------------------------------------------------
replace_all.map = map
replace_all.join = str.join