, чтобы загрузить KeyStore, вам нужно указать ему тип хранилища ключей (вероятно, jceks), предоставить входной поток и пароль. то вы можете загрузить его так:
KeyStore ks = KeyStore.getInstance(TYPE_OF_KEYSTORE);
ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD);
это может вызвать исключение KeyStoreException, поэтому вы можете окружать блок try, если хотите, или повторно бросить. Имейте в виду, что хранилище ключей может содержать несколько ключей, поэтому вам нужно найти свой ключ с псевдонимом, вот пример с симметричным ключом:
SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD));
SecretKey someKey = entry.getSecretKey();
nums
различны, и они указывают на один и тот же объект или на два разных объекта, хотя они имеют одинаковое имя. func1(nums)
, означает, что вы передаете Справка. Теперь переменная 2 nums
указывает на тот же объект. (2 переменные, 1 объект) func1
, внутренняя переменная nums
будет указывать на новый объект, внешний объект все равно остается неизменным (2 переменные, 2 объекта) print nums
, тогда nums
является внешней переменной, В этом конкретном случае это потому, что list
s являются mutable .
В результате их в глобальном пространстве имен или даже переданный через функцию , означает, что они будут изменены, поскольку Python содержит ссылку на изменяемый объект, а не его копию.
Если вы попытаетесь сделать то же самое с tuple
s это не сработает, поскольку они immutable .
Способ избежать этого - предоставить копию списка функции, а не самому списку:
func2(list[:])
В то же время вы можете сделать это с помощью аргументов по умолчанию, где вы можете указать аргумент по умолчанию как []
, и если вы тогда .append()
что-то ему, этот аргумент по умолчанию будет навсегда удерживаться этот элемент внутри него для всех будущих вызовов (если вы не удалите его каким-либо образом).
Я понимаю, что я могу использовать глобальную инструкцию для доступа к глобальным переменным
blockquote>. Ваше понимание неверно. Вы всегда можете получить доступ к глобальной переменной, если у вас нет локальной переменной с тем же именем. Вам понадобится инструкция
global
, когда вы собираетесь изменить , к какому объекту относится имя переменной. В вашемfunc2
вы этого не делаете; вы изменяете только содержимое объекта.nums
по-прежнему относится к тому же списку.