Вы можете использовать eval в декораторе:
#this replaces the original printNumber with a lambda-function,
#which takes no arguments and which calls the old function with
#the number 10
@eval("lambda fun: lambda: fun(10)")
def printNumber(i: int) -> None:
print("The number is %i", i)
#call
printNumber()
, в то время как вы не можете использовать сложные выражения, такие как
@lambda fun: lambda: fun(10)
def ...
и
@(lambda fun: lambda: fun(10))
def ...
Вы не может использовать там лямбда-выражение, потому что декоратор должен быть либо идентификатором:
@myModule.functionWithOneArg
, либо вызовом функции:
@functionReturningFunctionWithOneArg(any, "args")
Вы видите, что вызов функции eval со строкой имеет действительный синтаксис здесь, но лямбда-выражение отсутствует. (-> https://docs.python.org/3/reference/compound_stmts.html#function-definitions )
Я использовал ms-rest-azure версии 2.6.0 и azure-arm-resource версии 7.3.0, и он работал нормально для меня с тем же кодом.
Я думаю, что это безопасно для аутентификации, используя способ аутентификации субъекта службы или обычную аутентификацию, а не способ интерактивной аутентификации входа. У нас есть шаги этих других способов аутентификации здесь -> https://github.com/Azure/azure-sdk-for-node/blob/master/Documentation/Authentication.md#using-authentication-in -your-nodejs-script , который вы можете попробовать, если хотите.
Кроме того, поскольку вы в идеале ищете приложение в Azure для доступа к API ARM, поэтому я думаю, что стоит прочитать эту статью -> https://docs.microsoft.com/en- us / azure / azure-resource-manager / resource-manager-api-authentication
Надеюсь, это поможет !!