Desenvolvimento de Sistemas pelo IFSP / Engenharia de Software pela PUC-SP Profissional: 11 anos em TI, atualmente Engenheiro de Software no Mercado Bitcoin Hobby: Netflix / Fotografia Bio
mim é um pato. >>> l = [1, 2, 3] >>> type(l) <type 'list'> >>> ["l{}".format(i) for i in l] ['l1', 'l2', 'l3'] >>> t = tuple(l) >>> type(t) <type 'tuple'> >>> ["t{}".format(i) for i in t] ['t1', 't2', 't3'] Esse comportamento pode ser comparado com uma Interface em linguagens estáticas: Se um objeto implementa a interface pato, vou tratá-lo como um pato.
por operadores matemáticos, palavras chave da linguagem ou mesmo pelas sintaxes de acesso à elementos. Exemplos: • Atributos: __getattr__, __setattr__, __delattr__, ... • Classe como método: __call__ • Dicionários: __getitem__, __setitem__, __delitem__, ... • Matemática: __add__, __sub__, __div__, …
em tempo de execução. >>> aux = True >>> True = False >>> False = True >>> print True False >>> print False True ATENÇÃO: Esse exemplo é ilustrativo e só funciona com Python2, não use em produção!
e/ou depois de sua execução. def grava_log_acesso(func): def decorator(*args, **kwargs): print(“Isso é um decorator”) print( “Vai chamar {}”.format( repr(func))) result = func( *args, **kwargs) print(“Chamou a função”) return result return decorator @grava_log_acesso def meu_print(texto): print(texto) >>> meu_print(“Oi PyBR2018”) Isso é um decorator Vai chamar <function meu_print at 0x7f46d229e598> Oi PyBR2018 Chamou a função