Типы python3 в качестве аргументов функции

Можно ли передавать типы как аргументы функций, как в приведенном ниже примере?

def test(*args):
    '''decorator implementation with asserts'''
    ...


@test(str, int)
def fn1(ma_chaine, mon_entier):
    return ma_chaine * mon_entier

@test(int, int)
def fn2(nb1, nb2):
    return nb1 * nb2

или я должен передать их как строки (например, @test('str', 'int)), а внутри тестовой функции использовать их с if и elif?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это работает?

def test(obj, typ):
    if isinstance(obj, typ):
        print('Type Matches')
        return True
    return False

test('mystring', str)

"Type Matches"

да.

Должны ли вы это сделать?

Возможно нет

И еще немного информации о проверке типов

Спасибо за ваш ответ. Я также понимаю по вашей ссылке, что явное предварительное условие намного лучше, чем это. код

david 23.07.2019 11:26

Делая это, вы фактически пытаетесь превратить Python в язык со статической типизацией, что не очень похоже на питон. Если вы используете Python 3.6 или выше, я бы порекомендовал взглянуть на тип подсказки, который обеспечивает некоторый уровень статической проверки типов. Официальный PEP

PyPingu 23.07.2019 11:30

Аргумент функции Python не заботится о своем типе.

Вы можете передавать аргументы любого типа и можете проверять тип аргументов.

Это просто, вы можете проверить тип аргументов, которые вы получаете.

пытаться

def fn1(ma_chaine, mon_entier):
    if type(ma_chaine) == int && type(mon_entier) == int:
        return ma_chaine * mon_entier
    else:
        raise TypeError("Arguments should be 'int' type. Got '{}' type and '{}' type.".format(type(ma_chaine), type(mon_entier))

В качестве примечания следует уточнить, что type() == будет вести себя иначе, чем isinstance(). Ознакомьтесь с ответами здесь. Они также по-разному обрабатывают логические значения.

PyPingu 23.07.2019 11:11

Спасибо за комментарий! Я знал только о том, что «if ~ is~:» отличается от «if ~ == ~», но я не знал о функции isinstance(). Я узнаю еще один из вашего комментария. Еще раз спасибо @PyPingu!

nsbb 23.07.2019 12:05

Другие вопросы по теме