В принципе, переназначение параметров объекта не влияет на аргумент, например,
private void foo(Object bar) {
bar = null;
}
public static void main(String[] args) {
String baz = "Hah!";
foo(baz);
System.out.println(baz);
}
будет печатать "Hah!"
вместо null
. Причина этого в том, что bar
является копией значения baz
, что является лишь ссылкой на "Hah!"
. Если бы это была фактическая ссылка, то foo
изменила бы baz
на null
.
shutil
уже содержит функцию ignore_pattern
, поэтому вам не нужно предоставлять свои собственные. Прямо из документации :
from shutil import copytree, ignore_patterns copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
Это скопирует все, кроме
< / blockquote>.pyc
файлов и файлов или каталогов, чье имя начинается сtmp.
Немного сложно (и не обязательно) объяснять, что происходит:
ignore_patterns
возвращает функцию_ignore_patterns
в качестве возвращаемого значения, эта функция добавляется вcopytree
в качестве параметра, аcopytree
вызывает эту функцию по мере необходимости, поэтому вам не нужно знать или ухаживать, как вызвать эту функцию_ignore_patterns
. Это просто означает, что вы можете исключить некоторые ненужные файлы трещины (например,*.pyc
). Тот факт, что имя функции_ignore_patterns
начинается с подчеркивания, - это намек на то, что эта функция представляет собой деталь реализации, которую вы можете игнорировать.
copytree
ожидает, что папкаdestination
не существует все же. Не проблема в том, что эта папка и ее подпапки появляются после того, какcopytree
начинает работать,copytree
знает, как с этим справиться.Теперь
include_patterns
написано, чтобы сделать обратное: игнорировать все, что явно не включено. Но он работает так же: вы просто называете это, он возвращает функцию под капотом, аcoptytree
знает, что делать с этой функцией:copytree(source, destination, ignore=include_patterns('*.dwg', '*.dxf'))