SlideShare uma empresa Scribd logo
1 de 26
INFRASTRUCTURE
Python Type Hinting
Como, Onde, Porque
Guilherme Loch Waltrick Goes - glwgoes
Guilherme Loch Waltrick Goes
glwgoes@fb.com
• Por que usar type hinting?
• Sintaxe
• O module typing
• Gradual typing
Agenda
def foo(items):
for item in items:
item.bar.process()
Porque usar type hinting?
• Compreensão do código com agilidade
• Validar as Idéias do desenvolvedor
• Minimizar a quantidade de informação processada
• Encontrar bugs atuais e futuros 
Porque usar type hinting?
def foo(bar):
…
Sintaxe
def foo(bar: blah) -> zorg:
…
Sintaxe
def foo(arg: str):
def foo(arg: int):
def foo(arg: ipaddress):
def foo(arg: NetworkSwitch):
def foo() -> str:
def foo() -> int:
def foo() -> None:
def foo() -> NetworkSwitch:
• Função que retorna qualquer coisa?
• Função que recebe uma lista de strings?
Dicionário?
• Função com valor default?
• Função que rece classA ou classB?
• Função que recebe uma classe?
Questões do Cotidiano
O Modulo typing tem a solução =)
from typing import Any
def func() -> Any:
…
Função que retorna qualquer
coisa?
Função que recebe uma lista de
strings?
from typing import List
def func(arg: List[str]) -> Any:
…
Função que recebe um dicionário?
from typing import Dict
def func(arg: Dict[str, str]) -> Any:
…
Função com valor default?
def func(arg: str = ‘foo’) -> Any:
…
Função que int ou None?
from typing import Optional
def func(arg: int) -> Optional[int]:
…
Função que recebe mais de um
tipo?
from typing import Union
def func(arg: Union[clsA, clsB]) -> Any:
…
Função que retorna o mesmo tipo
que recebeu?
from typing import TypeVar
T = TypeVar(‘T’)
def func(arg: T) -> T:
…
Função que retorna o mesmo tipo
que recebeu?
from typing import List, TypeVar
T = TypeVar(‘T’)
def func(arg: List[T]) -> T:
…
Função que recebe uma classe e
não um objeto?
from typing import Type
def func(arg: Type[Model]) -> Model:
…
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from foo import bar
def zorg() -> bar:
Dependências Circulares
• Quando uma variável recebe um valor o type checker
faz a inferencia do tipo:
• foo = ‘bar’ # reveal_type(foo) -> str
• foo = [1, 2, 3] # reveal_type(foo) -> List[int]
• foo = [] # error: need type annotation for variable
• foo: List[int] = [] # reveal_type(foo) -> List[int]
Type Inference
• Pode-se introduzir typing em uma base de código
existente
• O type checker irá levantar os erros nas funções
anotadas e também onde essas funções são
chamadas
Gradual Typing
1) Anote as funções mais criticas/mais chamadas
primeiro
2) Habilitar o linter de arquivos cedo
3) Utilizar type checking com CI
4) Seja flexível com o que você recebe e estrito com
o que retorna
Gradual Typing
http://bit.ly/tdc_py_type_hinting
Perguntas?
INFRASTRUCTURE

Mais conteúdo relacionado

Semelhante a TDC2018FLN | Trilha Python - Python Type Hinting - Onde, Como e Por Que

Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
Luciano Ramalho
 

Semelhante a TDC2018FLN | Trilha Python - Python Type Hinting - Onde, Como e Por Que (10)

Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Python e seus desafios
Python e seus desafiosPython e seus desafios
Python e seus desafios
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Aula3PythonBasico (1).ppt
Aula3PythonBasico (1).pptAula3PythonBasico (1).ppt
Aula3PythonBasico (1).ppt
 
Aula3PythonBasico.ppt
Aula3PythonBasico.pptAula3PythonBasico.ppt
Aula3PythonBasico.ppt
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxe
 

Mais de tdc-globalcode

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
azulassessoria9
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
profbrunogeo95
 

Último (20)

Alemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf HitlerAlemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf Hitler
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
 
Maio Laranja - Combate à violência sexual contra crianças e adolescentes
Maio Laranja - Combate à violência sexual contra crianças e adolescentesMaio Laranja - Combate à violência sexual contra crianças e adolescentes
Maio Laranja - Combate à violência sexual contra crianças e adolescentes
 
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
 
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASAPRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
 
As teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.pptAs teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.ppt
 
Currículo Professor Pablo Ortellado - Universidade de São Paulo
Currículo Professor Pablo Ortellado - Universidade de São PauloCurrículo Professor Pablo Ortellado - Universidade de São Paulo
Currículo Professor Pablo Ortellado - Universidade de São Paulo
 
Modelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autoresModelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autores
 
662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - GeoprocessamentoDados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
 
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
 
Projeto envolvendo as borboletas - poema.doc
Projeto envolvendo as borboletas - poema.docProjeto envolvendo as borboletas - poema.doc
Projeto envolvendo as borboletas - poema.doc
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
FUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - materialFUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - material
 

TDC2018FLN | Trilha Python - Python Type Hinting - Onde, Como e Por Que

  • 2. Python Type Hinting Como, Onde, Porque Guilherme Loch Waltrick Goes - glwgoes
  • 3. Guilherme Loch Waltrick Goes glwgoes@fb.com
  • 4. • Por que usar type hinting? • Sintaxe • O module typing • Gradual typing Agenda
  • 5. def foo(items): for item in items: item.bar.process() Porque usar type hinting?
  • 6. • Compreensão do código com agilidade • Validar as Idéias do desenvolvedor • Minimizar a quantidade de informação processada • Encontrar bugs atuais e futuros  Porque usar type hinting?
  • 8. def foo(bar: blah) -> zorg: … Sintaxe def foo(arg: str): def foo(arg: int): def foo(arg: ipaddress): def foo(arg: NetworkSwitch): def foo() -> str: def foo() -> int: def foo() -> None: def foo() -> NetworkSwitch:
  • 9.
  • 10.
  • 11. • Função que retorna qualquer coisa? • Função que recebe uma lista de strings? Dicionário? • Função com valor default? • Função que rece classA ou classB? • Função que recebe uma classe? Questões do Cotidiano O Modulo typing tem a solução =)
  • 12. from typing import Any def func() -> Any: … Função que retorna qualquer coisa?
  • 13. Função que recebe uma lista de strings? from typing import List def func(arg: List[str]) -> Any: …
  • 14. Função que recebe um dicionário? from typing import Dict def func(arg: Dict[str, str]) -> Any: …
  • 15. Função com valor default? def func(arg: str = ‘foo’) -> Any: …
  • 16. Função que int ou None? from typing import Optional def func(arg: int) -> Optional[int]: …
  • 17. Função que recebe mais de um tipo? from typing import Union def func(arg: Union[clsA, clsB]) -> Any: …
  • 18. Função que retorna o mesmo tipo que recebeu? from typing import TypeVar T = TypeVar(‘T’) def func(arg: T) -> T: …
  • 19. Função que retorna o mesmo tipo que recebeu? from typing import List, TypeVar T = TypeVar(‘T’) def func(arg: List[T]) -> T: …
  • 20. Função que recebe uma classe e não um objeto? from typing import Type def func(arg: Type[Model]) -> Model: …
  • 21. from typing import TYPE_CHECKING if TYPE_CHECKING: from foo import bar def zorg() -> bar: Dependências Circulares
  • 22. • Quando uma variável recebe um valor o type checker faz a inferencia do tipo: • foo = ‘bar’ # reveal_type(foo) -> str • foo = [1, 2, 3] # reveal_type(foo) -> List[int] • foo = [] # error: need type annotation for variable • foo: List[int] = [] # reveal_type(foo) -> List[int] Type Inference
  • 23. • Pode-se introduzir typing em uma base de código existente • O type checker irá levantar os erros nas funções anotadas e também onde essas funções são chamadas Gradual Typing
  • 24. 1) Anote as funções mais criticas/mais chamadas primeiro 2) Habilitar o linter de arquivos cedo 3) Utilizar type checking com CI 4) Seja flexível com o que você recebe e estrito com o que retorna Gradual Typing

Notas do Editor

  1. [SLIDE INSTRUCTIONS] Initial Slide: should be displayed until the presenter starts speaking (e.g. while presenter is introduced or before going on stage) Always grab the latest version of this template from https://our.intern.facebook.com/intern/wiki/Infrastructure/FB_Infrastructure_Templates_and_Icons/
  2. glwgoes @ linkedin/facebook/Instagram/geocites/orkut/myspace/bla bla Agradecer Poline, Monalisa e Rodolfo
  3. Python is awesome and is a dynamic language, why to I need to polute my code with hints? Is this Java? Python é extremamente amigável e alguns dizem que é quase pseudo-código executável Help! Ajuda a compreender o código que esta sendo escrito O que são os items? O que process faz? Advinhação por contexto
  4. Mais importante: compreensão Code review Ajuda no onboarding de membros ao time Future proofing
  5. docstrings No to docstrings! Docstrings podem ser perigosas, ficam desatualizadas com facilidade Docsstrings são escritas por humanos e nunca validadas
  6. Usar py3 -> já estamos em 2018, além de type hinting traz vários outros benefícios: menor uso de memória, asyncio, f strings, native type hinting
  7. debugging simplificado detectar erros antes da execução
  8. O module typing tem a sua solução =)
  9. Não abuse o any Interessante para migração de code base
  10. Uma lista ou qualquer outra collection pode conter um misto de tipos, não é muito comum na prática
  11. Não absuar do optional!
  12. Não é o caso de subclasses, essas são cobertas por herança
  13. Generics!
  14. Estes são os os casos mais comuns, mais detalhes podem ser encontrados na documentação Se nós tivessemos que anotar todas as váriavéis isso seria massante, ao invés disso temos type inference
  15. Não existe mágica, para uma lista em branco precisamos anotar a variável Variable annotation requer py3.6, py3,5 is ugly: faz uso de comentários para o mesmo efeito
  16. Mypy - full program analysis, way slower than just file checking
  17. [SLIDE INSTRUCTIONS] Initial Slide: should be displayed until the presenter starts speaking (e.g. while presenter is introduced or before going on stage) Always grab the latest version of this template from https://our.intern.facebook.com/intern/wiki/Infrastructure/FB_Infrastructure_Templates_and_Icons/