Я хотел бы знать, есть ли возможность установить тип переменной в зависимости от значения другой переменной. , TCP или Unix Socket), когда получено сообщение, мы можем прочитать сообщение в функции, записанной таким образом: < /p>
def _message_received(path: str, types: str, args: tuple):
# Each character of 'types' defines the type of args items
# for example if types == 'sifb'
# it means that 'args' is of type tuple[str, int, float, bytes]
...
< /code>
Итак, конечно, я могу распаковывать аргументы таким образом: < /p>
def _message_received(path: str, types: str, args: tuple):
if types == 'sif':
args: tuple[str, int, float]
value_str, value_int, value_f = args
< /code>
Интересно, возможно ли автоматизировать этот процесс, например, определение функции < /p>
def typed_args(args: tuple, types: str):
ret_args = []
for i in range(len(types)):
type_ = types[i]
arg = args[i]
if type_ == 's':
ret_args.append(str(arg))
elif type_ == 'f':
ret_args.append(float(arg))
elif type_ == 'i':
ret_args.append(int(arg))
return tuple(ret_args)
def _message_received(path: str, types: str, args: tuple):
if types == 'sif':
args = typed_args(args, types)
# of course here, pylance can't know the type of 'args'.
# I wonder if there is a way to force it to execute 'typed args'
# with the fact it knows that types == 'sif'
< /code>
Могу ли я написать функцию, чтобы Pylance знал типы переменной 'args'? Все, что я могу знать на данный момент, это то, что Args имеет тип кортежа [str | int | Поплавок | Байты]
, но Pylance не может знать, ни его длину, ни типы его предметов для кортежа. Было бы удобно при их распаковке.
Я хотел бы знать, есть ли возможность установить тип переменной в зависимости от значения другой переменной. , TCP или Unix Socket), когда получено сообщение, мы можем прочитать сообщение в функции, записанной таким образом: < /p> [code]def _message_received(path: str, types: str, args: tuple): # Each character of 'types' defines the type of args items # for example if types == 'sifb' # it means that 'args' is of type tuple[str, int, float, bytes] ... < /code> Итак, конечно, я могу распаковывать аргументы таким образом: < /p> def _message_received(path: str, types: str, args: tuple): if types == 'sif': args: tuple[str, int, float] value_str, value_int, value_f = args < /code> Интересно, возможно ли автоматизировать этот процесс, например, определение функции < /p> def typed_args(args: tuple, types: str): ret_args = []
for i in range(len(types)): type_ = types[i] arg = args[i] if type_ == 's': ret_args.append(str(arg)) elif type_ == 'f': ret_args.append(float(arg)) elif type_ == 'i': ret_args.append(int(arg))
return tuple(ret_args)
def _message_received(path: str, types: str, args: tuple): if types == 'sif': args = typed_args(args, types) # of course here, pylance can't know the type of 'args'. # I wonder if there is a way to force it to execute 'typed args' # with the fact it knows that types == 'sif' < /code> Могу ли я написать функцию, чтобы Pylance знал типы переменной 'args'? Все, что я могу знать на данный момент, это то, что Args имеет тип кортежа [str | int | Поплавок | Байты] [/code], но Pylance не может знать, ни его длину, ни типы его предметов для кортежа. Было бы удобно при их распаковке.
Я хотел бы знать, есть ли возможность установить тип переменной в зависимости от значения другой переменной. , TCP или Unix Socket), когда получено сообщение, мы можем прочитать сообщение в функции, записанной таким образом:
def...