Funções embutidas
Definição
Funções embutidas (built-in) são funções que já estão disponíveis no Python para utilização (não há a necessidade de importá-las de algum módulo). A próxima seção discute as funções embutidas do Python 3.10: abs(), aiter(), all(), any(), anext(), ascii(), bin(), bool(), breakpoint(), bytearray(), bytes(), callable(), chr(), classmethod(), compile(), complex(), delattr(), dict(), dir(), divmod(), enumerate(), eval(), exec(), filter(), float(), format(), frozenset(), getattr(), globals(), hasattr(), hash(), help(), hex(), id(), input(), int(), isinstance(), issubclass(), iter(), len(), list(), locals(), map(), max(), memoryview(), min(), next(), object(), oct(), open(), ord(), pow(), print(), property(), range(), repr(), reversed(), round(), set(), setattr(), slice(), sorted(), staticmethod(), str(), sum(), super(), tuple(), type(), vars(), zip(), __import__()
Exemplos
- abs(x) – Retorna o valor absoluto (não negativo) de um número.
a = -4 b = -3.65 c = -3.10 d = -3.4 + 2.3j print("abs(a) =", abs(a), "abs(b) =", abs(b), "abs(c) =", abs(c), "abs(d) =", abs(d))
A resposta do programa é
abs(a) = 4 abs(b) = 3.65 abs(c) = 3.1 abs(d) = 4.104875150354758
- aiter() – Retorna um iterador assíncrono para um iterável assíncrono. No exemplo abaixo, temos a classe Numeros com dois métodos: __aiter__ e __anext__. O método __aiter__ é usado para inicializar o objeto e o método __anext__ é executado a cada iteração. Logo, a função aiter() retorna a instância de um objeto (iterador assíncrono) da classe Numeros (iterável assíncrono) com i igual a zero; e a função anext() incrementa i, toda vez que é chamada, após dormir por 1 segundo.
from asyncio import sleep, run class Numeros: def __aiter__(self): self.i = 0 return self async def __anext__(self): await sleep(1) self.i += 1 return self.i async def gerarNumeros(): ObjFuncao = aiter(Numeros()) try: while True: num = await anext(ObjFuncao) print(num) if num >= 5: break except StopAsyncIteration: return run(gerarNumeros())
- all(item) – Retorna True se todos os elementos de item são verdadeiros ou se item for vazio.
lista1 = [1, 6, "abc", True] print("lista1 =", all(lista1)) lista2 = [] print("lista2 =", all(lista2)) lista3 = [1, False, "abc", True] print("lista3 =", all(lista3))
A saída mostrada pelo programa:
lista1 = True lista2 = True lista3 = False
- any(item) – Retorna True se algum elemento de item for verdadeiro. Se item for vazio, retorna False.
lista1 = [1, 6, "abc", True] print("lista1 =", any(lista1)) lista2 = [] print("lista2 =", any(lista2)) lista3 = [1, False, "abc", True] print("lista3 =", any(lista3))
Ao final da execução, o programa mostra:
lista1 = True lista2 = False lista3 = True
- anext() – Retorna o próximo item de um iterador assíncrono. Veja aiter() para um exemplo.
- ascii(objeto) – Substitui qualquer caractere não ascii do objeto por sequências de escapes \x, \u or \U.
frase1 = "Que ninguém se engane, só se consegue a simplicidade através de muito trabalho" frase2 = "äçïÜ" frase3 = '''Frase com quebra de linha''' lista = ["maça", "limão", "constituição"] print("\x50\x79\x74\x68\x6f\x6e\x20\xe9\x20\x31\x30\x21") print(ascii(frase1)) print(ascii(frase2)) print(ascii(frase3)) print(ascii(lista))
A resposta do programa é
Python é 10! 'Que ningu\xe9m se engane, s\xf3 se consegue a simplicidade atrav\xe9s de muito trabalho' '\xe4\xe7\xef\xdc' 'Frase com\nquebra de linha' ['ma\xe7a', 'lim\xe3o', 'constitui\xe7\xe3o']
- bin(x) – Retorna o valor binário de um número inteiro. Como esta função retorna o valor com o prefixo ‘0b’, pode-se usar a função format() no lugar da bin() para omitir o prefixo.
a = 12 b = 1560 c = -12 print("*** com '0b'") print("a =", bin(a)) print("b =", bin(b)) print("c =", bin(c)) print("\n*** sem '0b'") print("a =", format(12, 'b')) print("b =", format(1560, 'b')) print("c =", format(-12, 'b'))
A saída do programa é mostrada abaixo.
*** com '0b' a = 0b1100 b = 0b11000011000 c = -0b1100 *** sem '0b' a = 1100 b = 11000011000 c = -1100
- bool(x) – Retorna um valor booleano (True ou False). Se x é falso, zero ou foi omitido, a função retorna False; senão a função retorna True.
a = [1, "aba", False] b = [] c = 2.56 d = False e = 0 print("a =", bool(a)) print("b =", bool(b)) print("c =", bool(c)) print("d =", bool(d)) print("e =", bool(e))
O resultado do programa é:
a = True b = False c = True d = False e = False
- breakpoint() – Para a execução do programa e entra no modo de depuração do Python.
a = 10 b = 5 if a + b == 15: breakpoint() print("a + b =", a + b) print("*** Fim do programa")
Note que a função breakpoint() é chamada dento da estrutura if. É então aberto uma linha de comandos para que o usuário possa interagir com o programa. No exemplo abaixo, são verificados os valores das variáveis a e b. Depois o caractere c é digitado para que a execução do programa continue. A sigla pdb corresponde a “Python Debugger”.
> /home/morganna/Área de Trabalho/teste.py(5)<module>() -> print("a + b =", a + b) (Pdb) print(a) 10 (Pdb) print(b) 5 (Pdb) print(a**b) 100000 (Pdb) c a + b = 15 *** Fim do programa
São outros exemplos de comandos que podem ser usados no depurador:
h(elp) h(help) – lista os comandos disponíveis no depurador.
(Pdb) h Documented commands (type help <topic>): ======================================== EOF c d h list q rv undisplay a cl debug help ll quit s unt alias clear disable ignore longlist r source until args commands display interact n restart step up b condition down j next return tbreak w break cont enable jump p retval u whatis bt continue exit l pp run unalias where Miscellaneous help topics: ========================== exec pdb
l(list) – lista o código fonte do programa.
(Pdb) l 1 a = 10 2 b = 5 3 if a + b == 15: 4 breakpoint() 5 -> print("a + b =", a + b) 6 print("*** Fim do programa") [EOF]
- bytearray() – Retorna um objeto bytearray (vetor de bytes). Esta função pode ter três argumentos: source (se for um valor inteiro, indica o tamanho do vetor com bytes nulos; se for uma string, define o conteúdo do vetor; se for um objeto, é usado para inicializar um vetor); encoding (codificação usada com a string); error (especifica o que fazer no caso de erro). Sem nenhum argumento é definido, é criado um vetor de tamanho zero. Um objeto bytearray pode ser modificado.
vetor1 = bytearray("Python é 10!", 'utf-8') print("vetor1 = ", vetor1, ", tam =", len(vetor1)) vetor2 = bytearray("Python é 10!", 'utf-16') print("vetor2 = ", vetor2, ", tam =", len(vetor2)) vetor3 = bytearray(3) print("vetor3 = ", vetor3, ", tam =", len(vetor3)) vetor4 = bytearray([1, 23, 18]) print("vetor4 = ", vetor4, ", tam =", len(vetor4)) vetor5 = bytearray() print("vetor5 = ", vetor5, ", tam =", len(vetor5))
A saída mostrada pelo programa é
vetor1 = bytearray(b'Python \xc3\xa9 10!') , tam = 13 vetor2 = bytearray(b'\xff\xfeP\x00y\x00t\x00h\x00o\x00n\x00 \x00\xe9\x00 \x001\x000\x00!\x00') , tam = 26 vetor3 = bytearray(b'\x00\x00\x00') , tam = 3 vetor4 = bytearray(b'\x01\x17\x12') , tam = 3 vetor5 = bytearray(b'') , tam = 0
É possível modificar um objeto bytearray como mostra o exemplo abaixo.
vetor = bytearray("abc", 'utf-8') print("vetor = ", vetor, ", tam =", len(vetor)) vetor[1:2] = b'x' print("vetor = ", vetor, ", tam =", len(vetor))
Note que apenas um byte foi modificado.
vetor = bytearray(b'abc') , tam = 3 vetor = bytearray(b'axc') , tam = 3
- bytes() – Retorna um objeto bytes (vetor de bytes). Esta função pode ter três argumentos: source (se for um valor inteiro, indica o tamanho do vetor com bytes nulos; se for uma string, define o conteúdo do vetor; se for um objeto, é usado para inicializar um vetor); encoding (codificação usada com a string); error (especifica o que fazer no caso de erro). Sem nenhum argumento é definido, é criado um vetor de tamanho zero. Um objeto bytes não pode ser modificado.
vetor1 = bytes("Python é 10!", 'utf-8') print("vetor1 = ", vetor1, ", tam =", len(vetor1)) vetor2 = bytes("Python é 10!", 'utf-16') print("vetor2 = ", vetor2, ", tam =", len(vetor2)) vetor3 = bytes(3) print("vetor3 = ", vetor3, ", tam =", len(vetor3)) vetor4 = bytes([1, 23, 18]) print("vetor4 = ", vetor4, ", tam =", len(vetor4)) vetor5 = bytes() print("vetor5 = ", vetor5, ", tam =", len(vetor5))
O resultado do programa é
vetor1 = b'Python \xc3\xa9 10!' , tam = 13 vetor2 = b'\xff\xfeP\x00y\x00t\x00h\x00o\x00n\x00 \x00\xe9\x00 \x001\x000\x00!\x00' , tam = 26 vetor3 = b'\x00\x00\x00' , tam = 3 vetor4 = b'\x01\x17\x12' , tam = 3 vetor5 = b'' , tam = 0
- callable(objeto) – Retorna True se o objeto é chamável e retorna False no caso contrário. Um objeto é chamável quando pode ser chamado usando o operador ().
x = 10 def teste(): print("ok") print("x é chamável =", callable(x)) print("teste é chamável =", callable(teste))
A resposta é
x é chamável = False teste é chamável = True
- chr(x) – Retorna o caractere que corresponde ao inteiro x no código Unicode.
print("char 65 (Hex 41) =", chr(65)) print("char 97 (Hex 61) =", chr(97)) print("char 956 (Hex 03BC) =", chr(956)) print("char 9757 (Hex 261D) =", chr(9757)) print("char 65312 (Hex FF20) =", chr(65312)) print("char 128522 (Hex 1F60A) =", chr(128522))
O programa apresenta a seguinte saída:
char 65 (Hex 41) = A char 97 (Hex 61) = a char 956 (Hex 03BC) = μ char 9757 (Hex 261D) = ☝ char 65312 (Hex FF20) = @ char 128522 (Hex 1F60A) = 😊
- classmethod() – Transforma um método de instância em um método de classe. Um método de instância pode acessar livremente atributos e outros métodos da classe do objeto instanciado. Um método de classe é uma função que não depende do conteúdo de um objeto ou da execução da instância de uma classe. O exemplo abaixo mostra o uso de um método de instância. Note que é necessário criar um objeto, antes de usar o método.
class Aluno: nome = "Maria Flor" idade = 18 def dadosAluno(info): print("Nome:", info.nome, ", idade:", info.idade) estudante = Aluno() estudante.dadosAluno()
Entretanto, é possível transformar o método dadosAluno() em método de classe e usá-lo sem a necessidade de criar um objeto da classe Aluno.
class Aluno: nome = "Maria Flor" idade = 18 def dadosAluno(info): print("Nome:", info.nome, ", idade:", info.idade) Aluno.dadosAluno=classmethod(Aluno.dadosAluno) Aluno.dadosAluno()
Outra forma de fazer essa transformação é usar o decorador @classmethod.
class Aluno: nome = "Maria Flor" idade = 18 @classmethod def dadosAluno(info): print("Nome:", info.nome, ", idade:", info.idade) Aluno.dadosAluno()
docs.python.org/pt-br/3/library/functions.html#exec(abrir em uma nova aba)
Todos os programas acima apresentam a mesma saída:
Nome: Maria Flor , idade: 18
- compile() – Compila o argumento em código ou em objeto AST (Abstract Syntax Tree). O código pode ser executado por exec() ou eval(). O primeiro exemplo, mostrado abaixo, compila o código que apresenta o resultado da multiplicação de duas variáveis x e y. O segundo argumento de compile(), representado por uma string vazia, corresponde ao nome do arquivo onde o código poderia ser lido.
programa = 'x=5\ny=10\nprint("resultado =",x * y)' codigo = compile(programa, '', 'exec') exec(codigo)
O segundo exemplo lê um arquivo Python, cria uma string e executa o script lido. Note que o segundo parâmetro da função compile() não precisa novamente ser definido.
arq = open('teste.py', 'r') programa = arq.read() arq.close() codigo = compile('programa', '', 'exec') exec(programa)
A função eval() do Python avalia dinamicamente uma expressão. O terceiro exemplo de compile() verifica uma expressão lógica (10 < 20 ?) e em seguida calcula o resultado de 10^2. O resultado do programa é: True e 100.
x = 10 res = compile('x < 20', '', 'eval') print(eval(res)) res = compile('x ** 2', '', 'eval') print(eval(res))
O quarto exemplo cria um objeto AST. AST é uma ferramenta Python usada para interagir diretamente com o código python e modificá-lo. Dado um código-fonte, o compilador identifica palavras-chave e cria tokens. Cada token representa um “átomo” de uma instrução. Os tokens são então organizados em uma árvore onde os nós são os “átomos” das instruções. O compilador pode aplicar várias otimizações ao AST e, finalmente, convertê-lo em código binário.
import ast astparse = ast.parse(''' a = 10 b = 20 print(a+b) ''') print() exec(compile(astparse, filename="", mode="exec"))
Para ver a estrutura do objeto AST do programa acima use:
print(ast.dump(astparse, indent=5))
A resposta é
Module( body=[ Assign( targets=[ Name(id='a', ctx=Store())], value=Constant(value=10)), Assign( targets=[ Name(id='b', ctx=Store())], value=Constant(value=20)), Expr( value=Call( func=Name(id='print', ctx=Load()), args=[ BinOp( left=Name(id='a', ctx=Load()), op=Add(), right=Name(id='b', ctx=Load()))], keywords=[]))], type_ignores=[])
- complex() – Retorna um número complexo com o valor real + imag*1j ou converte uma string ou número para um número complexo.
z = complex(4, -2) print("(1) z =", z) z = complex(1) print("(2) z =", z) z = complex() print("(3) z =", z) z = complex("4-7j") print("(4) z =", z)
A saída do programa mostra:
(1) z = (4-2j) (2) z = (1+0j) (3) z = 0j (4) z = (4-7j)
- delattr() – Remove um atributo de um objeto. No exemplo abaixo, o atributo email é deletado da classe Aluno. Note que estudante é um objeto da classe Aluno.
class Aluno: matricula = 202212100076 nome = "Maria Flor" email = "flor@gmail.com" estudante = Aluno() print(dir(estudante), "\n") delattr(Aluno,'email') print(dir(estudante))
Como consequência, o atributo email é deletado do objeto estudante que é uma instância de Aluno. Não é possível deletar atributos de objetos.
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'email', 'matricula', 'nome'] ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'matricula', 'nome']
- dict() – Cria um novo dicionário.
dicionario = dict(nome = "Maria Flor", idade = 18, curso = "BSI") print(dicionario) print("nome =", dicionario["nome"])
- dir() – Devolve a lista de nomes no escopo local atual se nenhum argumento for passado. Devolve a lista de atributos válidos para o argumento passado.
class Aluno: matricula = 202212100076 nome = "Maria Flor" email = "flor@gmail.com" lista = [1, "abc"] num = 12.5 print("***** dir() =", dir(), "\n") print("***** dir(Aluno) =", dir(Aluno), "\n") print("***** dir(lista) =", dir(lista), "\n") print("***** dir(num) =", dir(num))
A saída do programa é:
***** dir() = ['Aluno', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'lista', 'num'] ***** dir(Aluno) = ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'email', 'matricula', 'nome'] ***** dir(lista) = ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] ***** dir(num) = ['__abs__', '__add__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__setattr__', '__setformat__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
- divmod() – retorna o quociente (valor inteiro) e o resto da divisão.
a = 4.3 b = 1.5 print(divmod(a, b)) print(divmod(b, a))
Abaixo a resposta do programa. Note que: a) 2.0 \times 1.5 + 1.2999 \approx 4.3 ; b) 0 \times 4.3 + 1.5 = 1.5 .
(2.0, 1.2999999999999998) (0.0, 1.5)
- enumerate() – Devolve um objeto enumerado. O argumento precisa ser um objeto que suporta iteração.
alunos = ['Maria', 'Pedro', 'José', 'Tereza'] numeros = {1, 5, 91, 102} dicionario = dict(nome = "Maria Flor", idade = 18, curso = "BSI") print(list(enumerate(alunos))) print(list(enumerate(numeros, start=2))) print(list(enumerate(dicionario, start=5)))
Abaixo a resposta.
[(0, 'Maria'), (1, 'Pedro'), (2, 'José'), (3, 'Tereza')] [(2, 1), (3, 91), (4, 5), (5, 102)] [(5, 'nome'), (6, 'idade'), (7, 'curso')]
- eval() – avalia o argumento passado.
a = 5 print(eval('a**3')) b = eval('5 > 3') print(b) eval('print("a =", a)') expressao = 'a*(a+1)*(a+2)' print(eval(expressao))
A saída apresentada pelo programa é:
125 True a = 5 210
- exec() – executa código Python.
programa = 'a = 10\nb=5\nprint("Resultado =", a*b)' exec(programa)
O programa tem como resposta:
Resultado = 50
- filter() – Recebe dois argumentos: um elemento iterável e uma função. Os elementos que compõem o elemento interável são testados pela função. Se o resultado do teste for False, o elemento é descartado; se o resultado do teste for True, o elemento é retornado. Se a função fornecida for None, todos os elementos considerados False são removidos (o objeto None no Python denota falta de valor).
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NumeroPar = filter(lambda x: (x%2 == 0), numeros) print("Numeros pares:", list(NumeroPar)) lista = ["a", "0", 0, "None", None, "2", 2] nova_lista = filter(None, lista) print("Valores verdadeiros:", list(nova_lista))
O programa acima apresenta dois exemplos do uso da função filter(). O primeiro exemplo seleciona os números pares em uma lista que possui valores de 1 a 10. O segundo exemplo retira os elementos None e 0 da lista, pois eles correspondem ao valor booleano False. Note que os elementos “None” e “0” não são removidos.
Numeros pares: [2, 4, 6, 8, 10] Valores verdadeiros: ['a', '0', 'None', '2', 2]
- float() – Recebe um número ou uma string e retorna um número de ponto flutuante.
print(float('+1.2345')) print(float(' -12345')) print(float('1e-00012345')) print(float('+1.2345E6')) print(float('+1.2345E-6')) print(float('-Infinity')) print(float('+Infinity'))
A resposta do programa é:
1.2345 -12345.0 0.0 1234500.0 1.2345e-06 -inf inf
- format() – formata o(s) valor(es) especificado(s) e os insere dentro do espaço reservado da string. O espaço reservado é definido usando colchetes.
txt = "{}, é {}! Vamos {}?" print(txt.format("Python", "10", "aprender")) import math txt = chr(928) + " = {:.6f}" print(txt.format(math.pi))
O programa apresenta dois exemplos com a função format(). No primeito exemplo, três argumentos são passados para a função. No segundo exemplo, o valor de \pi é mostrado com seis casas decimais. Abaixo a resposta do programa.
Python, é 10! Vamos aprender? Π = 3.141593
Outros formatos podem ser usados com a função format(). Veja a página da w3school para mais detalhes.
- frozenset() – Cria um conjunto (set) imutável a partir de um conjunto mutável. Isto significa que os elementos do novo conjunto não podem ser nem alterados e nem deletados. Além disso, novos elementos não podem ser incluídos.
letras = ('a', 'b', 'c', 'd', 'e') conj_imut = frozenset(letras) print('O conjunto imutável:', conj_imut) try: conj_imut.add('f') except: print("Não é possível incluir um novo elemento no conjunto") try: conj_imut.remove('b') except: print("Não é possível excluir um elemento do conjunto")
Veja que após criar o conjunto imutável, o Python não permite incluir ou deletar elementos nesse conjunto.
O conjunto imutável: frozenset({'b', 'e', 'a', 'd', 'c'}) Não é possível incluir um novo elemento no conjunto Não é possível excluir um elemento do conjunto
- getattr() – Retorna o valor de um determinado atributo de um objeto.
class Aluno: nome = "Maria Flor" idade = 18 curso = "BSI" nome = getattr(Aluno, 'nome') curso = getattr(Aluno, 'curso') print(nome, "faz o curso", curso, "da UNIRIO")
O programa fornece a seguinte resposta:
Maria Flor faz o curso BSI da UNIRIO
- globals() – Usado para atualizar variáveis globais e para retornar informações sobre as variáveis globais. No exemplo mostrado abaixo, temos uma variável global ‘a’ e uma variável local ‘a’ dentro da função teste(). A variável global ‘a’ é alterada dentro da função teste().
a = 5 print("A variável 'a' no início do programa:",a) def teste(): globals()['a'] = 25 a = 30 print("A variável local 'a' dentro da função teste:",a) teste() print("A variável global 'a' depois da função teste:",a) print("\n", globals())
A saída do programa é:
A variável 'a' no início do programa: 5 A variável local 'a' dentro da função teste: 30 A variável global 'a' depois da função teste: 25 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f0ff08e5270>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/morganna/Área de Trabalho/Python_220330/testes/teste_funcao.py', '__cached__': None, 'a': 25, 'teste': <function teste at 0x7f0ff094a0e0>}
- hasattr() – Responde com True se o argumento é um dos atributos do objeto, e responde com False no caso contrário.
class Aluno: nome = "Maria Flor" idade = 18 curso = "BSI" if hasattr(Aluno, 'nome'): print("Existe atributo nome no objeto Aluno") else: print("Não existe atributo nome no objeto Aluno") if hasattr(Aluno, 'cidade'): print("Existe atributo cidade no objeto Aluno") else: print("Não existe atributo cidade no objeto Aluno")
Abaixo a resposta mostrada pelo programa.
Existe atributo nome no objeto Aluno Não existe atributo cidade no objeto Aluno
- hash() – Retorna o valor hash de um objeto (se houver um). Explicação: hash é um algoritmo matemático no qual ocorre uma transformação do dado em um número.
print('Hash para 12345:', hash(12345)) print('Hash para 12.345:',hash(12.345)) print('Hash para "Python é 10!":', hash('Python é 10!')) print('Hash para (1,2,3,4,5):', hash((1,2,3,4,5)))
Abaixo a resposta do programa.
Hash para 12345: 12345 Hash para 12.345: 795515838178725900 Hash para "Python é 10!": 9085620290049123719 Hash para (1,2,3,4,5): -5659871693760987716
- help() – Invoca o sistema de ajuda embutido.
x = help(print) print(x)
- hex() – Converte um número inteiro para uma string hexadecimal.
print("Hexadecimal de 23 é " + hex(23)) print("Hexadecimal de -23 é " + hex(-23)) print("Hexadecimal de 'a' é " + hex(ord('a'))) print("Hexadecimal de 2.3 é " + float.hex(2.3))
O resultado do programa é mostrado abaixo.
Hexadecimal de 23 é 0x17 Hexadecimal de -23 é -0x17 Hexadecimal de 'a' é 0x61 Hexadecimal de 2.3 é 0x1.2666666666666p+1
- id() – Retorna a identidade de um objeto. Esta identidade é única e constante para o objeto durante a sua existencia.
a = "Python" print("id(a) =", id(a)) b = "Python" print("id(b) =", id(b)) if id(a) == id(b): print("id(a) = id(b)") else: print("id(a) não é = id(b)") lista = ["abc", "Python", "123"] print("id(lista[0]) =", id(lista[0])) print("id(lista[1]) =", id(lista[1])) print("id(lista[2]) =", id(lista[2])) print("id(lista) =", id(lista)) print("id(21) =", id(21)) print("id(99) =", id(99))
A resposta do programa é mostrada abaixo. Note que as variáveis ‘a’ e ‘b’ são dois nomes para um mesmo valor.
id(a) = 140199966322352 id(b) = 140199966322352 id(a) = id(b) id(lista[0]) = 140199966311600 id(lista[1]) = 140199966322352 id(lista[2]) = 140199966628912 id(lista) = 140199968098304 id(21) = 140199967097712 id(99) = 140199967100208
- input() – Recebe uma entrada na linha de comando e retorna uma string.
nome = input('Entre com o seu nome: ') print('Olá, ' + nome)
- int() – Devolve um objeto inteiro construído a partir de um número ou de uma string. Devolve zero se nenhum argumento for fornecido.
a = '12' b = 6 print('a + b = ', int(a) + b) c = 12.78 print("c = ", int(c))
A resposta é
a + b = 18 c = 12
- isinstance() – Retorna True se um objeto é instância de uma determinada classe.
if isinstance(5, int): print("5 é um número inteiro") if isinstance("abc", str): print("'abc' é uma string") class Aluno: nome = "Maria" x = Aluno() if isinstance(x, Aluno): print("x é uma instância da classe Aluno")
- issubclass() – Retorna True se uma classe é uma subclasse de uma outra classe.
print('bool é uma subclasse de int: ', issubclass(bool, int)) class meuCurso: curso = 'BSI' class meusDados(meuCurso): nome = "Maria Flor" curso = meuCurso if issubclass(meusDados, meuCurso): print("meusDados é uma subclasse de meuCurso")
A resposta fornecida pelo programa é
bool é uma subclasse de int: True meusDados são uma subclasse de meuCurso
- iter() – Retorna um objeto iterável.
lista = iter([1, "ab", 13, 2.4, False]) for i in range(0, 5): print(next(lista))
O resultado do programa é mostrado abaixo.
1 ab 13 2.4 False
- len() – Devolve o comprimento (o número de itens) de um objeto.
string = "Python é 10!" lista = [1, "ab", 13, 2.4, False] conjunto = {1, "teste", "abc"} print("Tamanho da string = ", len(string)) print("Tamanho da lista = ", len(lista)) print("Tamanho do conjunto = ", len(conjunto))
O programa responde:
Tamanho da string = 12 Tamanho da lista = 5 Tamanho do conjunto = 3
- list() – Cria uma lista.
string = "Python é 10!" lista = [1, "ab", 13, 2.4, False] conjunto = {1, "teste", "abc"} print("De uma string = ", list(string)) print("De uma lista = ", list(lista)) print("De um conjunto = ", list(conjunto))
A resposta é:
De uma string = ['P', 'y', 't', 'h', 'o', 'n', ' ', 'é', ' ', '1', '0', '!'] De uma lista = [1, 'ab', 13, 2.4, False] De um conjunto = [1, 'teste', 'abc']
- locals() – Retorna informações sobre as variáveis locais.
def teste(): a = 10 b = 15 print("\nDentro da função teste()") print(locals()) teste() c = 30 print("\nNo escopo global") print(locals())
A resposta é:
Dentro da função teste() {'a': 10, 'b': 15} No escopo global {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f86b34ad270>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/morganna/Área de Trabalho/testes/teste_funcao.py', '__cached__': None, 'teste': <function teste at 0x7f86b35120e0>, 'c': 30}
- map() – Aplica uma função em cada item do iterador.
def funcao1(a): return len(a) x = map(funcao1, ('UNIRIO', 'BSI', 'CCET')) print(list(x)) lista1 = [1, 2, 3] lista2 = [4, 5, 6] x = map(lambda a, b: a + b, lista1, lista2) print(list(x)) def funcao2(a, b): return a + b x = map(funcao2, ('UNIRIO: ', 'BSI: ', 'CCET: '), ('universidade', 'curso', 'centro')) print(list(x)) lista = [2, 4, 6, 8, 10] def funcao3(num): return num * num x = map(funcao3, lista) print(list(x))
Abaixo a resposta do programa.
[6, 3, 4] [5, 7, 9] ['UNIRIO: universidade', 'BSI: curso', 'CCET: centro'] [4, 16, 36, 64, 100]
- max() – Devolve o maior item em um iterável ou o maior de dois ou mais argumentos.
x = max("Maria", "João", "Anatália") print(x) x = max([2, 78, 101, 4, 31]) print(x) x = max(3, 7) print(x)
Abaixo é mostrada a resposta.
Maria 101 7
- memoryview() – Devolve um objeto de “visão da memória” criado a partir do argumento fornecido.
vetor = bytearray('ABC', 'utf-8') print('Antes atualização:', vetor) res = memoryview(vetor) print(res[1]) print(bytes(res[1:2])) res[1] = 90 print('Depois da atualização:', vetor) print(res[1]) print(bytes(res[1:2]))
Resposta do programa é:
Antes atualização: bytearray(b'ABC') 66 b'B' Depois da atualização: bytearray(b'AZC') 90 b'Z'
- min() – Devolve o menor item em um iterável ou o menor de dois ou mais argumentos.
x = min("Maria", "João", "Anatália") print(x) x = min([2, 78, 101, 4, 31]) print(x) x = min(3, 7) print(x)
A saída do programa é:
Anatália 2 3
- next() – Retorna o próximo item de um iterador.
lista= iter(["UNIRIO", "BSI", "CCET"]) while True: item = next(lista, 'fim') if item == 'fim': print('*** Fim da lista') break else: print(item)
A resposta é mostrada abaixo.
UNIRIO BSI CCET *** Fim da lista
- object() – Retorna um objeto vazio. Não é possível adicionar propriedades e métodos ao objeto criado.
objeto = object() print("Tipo do objeto : ", type(objeto)) print("Atributos do objeto : ") print(dir(objeto))
A saída do programa é:
Tipo do objeto : <class 'object'> Atributos do objeto : ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
- oct() – Converte um número inteiro para uma string em base octal.
print(oct(12)) print(oct(26)) print(oct(int('32')))
Abaixo a resposta do programa.
0o14 0o32 0o40
- open() – Abre um arquivo. O exemplo abaixo abre um arquivo para a escrita, escreve no arquivo, fecha o arquivo e depois abre o arquivo para leitura.
arq = open("teste.txt", "w") arq.write("Primeira linha do arquivo novo\n") arq.write("Segunda linha do arquivo\n") arq.write("Fim do arquivo") arq.close() arq = open("teste.txt", "r") print(arq.read())
Abaixo a resposta da execução do programa.
Primeira linha do arquivo novo Segunda linha do arquivo Fim do arquivo
A tabela a seguir mostra outros modos de abrir um arquivo.
Caractere | Significado |
‘r’ | Abre para leitura |
‘w’ | Abre para escrita |
‘x’ | Abre o arquivo para escrita, falha se o arquivo já existe |
‘a’ | Abre, no final do arquivo, para escrita |
‘b’ | Abre no modo binário |
‘t’ | Abre no modo texto |
‘+’ | Abre para atualizações (leitura e escrita) |
- ord() – Retorna o código Unicode de um caractere.
print("a =", ord("a")) print("A =", ord("A")) print("$ =", ord("$")) print("# =", ord("#")) print("@ =", ord("@"))
O programa mostra a resposta abaixo.
a = 97 A = 65 $ = 36 # = 35 @ = 64
- pow() – Retorna a potência de um número. Se um terceiro número é fornecido, a função retorna o resto da divisão da potência por um número.
x = pow(5, 3) print("5 ** 3 =", x) x = pow(5, -3) print("5 ** -3 =", x) x = pow(-5, -3) print("-5 ** -3 =", x) x = pow(5, 3, 2) print("(5 ** 3) % 2 =", x)
Abaixo a resposta do programa.
5 ** 3 = 125 5 ** -3 = 0.008 -5 ** -3 = -0.008 (5 ** 3) % 2 = 1
- print() – Imprime uma mensagem na saída padrão.
print("Python é 10!") a = "Python é" b = " 10!" print(a + b) x = 10 / 3 print("x = ", x)
A resposta é:
Python é 10! Python é 10! x = 3.3333333333333335
- property() – Cria e retorna um atributo de propriedade. No exemplo abaixo, a propriedade area retorna o valor da área de um retângulo.
class Retangulo(object): def __init__(self, largura, altura): self.largura = largura self.altura = altura def area(self): return self.largura * self.altura area = property(area) objeto = Retangulo(4, 7) print("área =", objeto.area)
A saída do programa é
área = 28
- range() – Retorna uma sequência de números dado o valor inicial, o valor final e o incremento (por padrão é o valor 1).
print("Números ímpares menores que 20:") for i in range(1, 21, 2): print(i)
Abaixo o resultado da execução do programa.
Números ímpares menores que 20: 1 3 5 7 9 11 13 15 17 19
- repr() – Retorna uma string contendo uma representação imprimível de um objeto.
print(repr(12)) print(repr(12.45)) print(repr(True)) print(repr((5+7)/3)) class Aluno: nome = "Maria Flor" def __repr__(self): return repr(self.nome) print(repr(Aluno()))
Abaixo a resposta.
12 12.45 True 4.0 'Maria Flor'
- reversed() – Retorna um iterador reverso.
print(list(reversed([21, 19, -40, 33, -3]))) print(list(reversed("Python é 10!"))) print(list(reversed(('P', 'y', 't', 'h', 'o', 'n')))) for i in reversed(["a", "e", "i", "o", "u"]): print(i)
O programa mostra como saída:
[-3, 33, -40, 19, 21] ['!', '0', '1', ' ', 'é', ' ', 'n', 'o', 'h', 't', 'y', 'P'] ['n', 'o', 'h', 't', 'y', 'P'] u o i e a
- round() – Arredonda o valor de um número dado um determinado número de casas decimais. Se o numero de casas decimais não for fornecido, o número é arredondado para o valor inteiro mais próximo.
import math pi = math.pi print("pi =", pi) print("pi =", round(pi, 3)) print("pi =", round(pi, 2)) print("pi =", round(pi, 1)) print("pi =", round(pi))
A resposta é:
pi = 3.141592653589793 pi = 3.142 pi = 3.14 pi = 3.1 pi = 3
- set() – retorna um conjunto.
a = set() print("a =", a) b = set(("UNIRIO", "BSI", "CCET")) print("b =", b) def numPar(num): if num % 2 == 0: return num pares = filter(numPar,[3, 6, 18, 12, 71, 23, 42]) c = set(pares) print("c =", c)
A resposta do programa é mostrada abaixo.
a = set() b = {'CCET', 'BSI', 'UNIRIO'} c = {18, 12, 42, 6}
- setattr() – Permite alterar ou incluir um atributo.
class Aluno: nome = "" curso = "" def __init__(self, nome, curso): self.nome = nome self.curso = curso aluno = Aluno("Maria Flor", "Matemática") print("*** Dados originais") print("Nome =", aluno.nome) print("Curso =", aluno.curso) setattr(aluno, 'curso','BSI') setattr(aluno, 'email','flor@unirio') print("*** Dados modificados") print("Nome =", aluno.nome) print("Curso =", aluno.curso) print("Email =", aluno.email)
A saída do programa é:
*** Dados originais Nome = Maria Flor Curso = Matemática *** Dados modificados Nome = Maria Flor Curso = BSI Email = flor@unirio
- slice() – Retorna um objeto fatiado. A função permite especificar o início e o fim do fatiamento de uma sequência (string, tupla, lista, range ou bytes). Note que o índice final da função não entra no fatiamento.
tupla = ("a", "b", "c", "d", "e", "f", "g", "h") print("Tupla =", tupla) print("Tupla(3) =", tupla[slice(3)]) print("Tupla(2,6) =", tupla[slice(2,6)]) print("Tupla(1,7,2) =", tupla[slice(1,7,2)]) print() string = 'Python é 10!' print("String =", string) print("String(3) =", string[slice(3)]) print("String(3,8) =", string[slice(3,8)]) print("String(1,8,2) =", string[slice(1,8,2)]) print() lista = [1, 'ab', 64, 'teste', 2.3, 12, 'BSI'] print("Lista = ", lista) print("Lista(2) =", lista[slice(2)]) print("Lista(1,4) =", lista[slice(1,4)]) print("Lista(2,6,2) =", lista[slice(2,6,2)]) print() r = range(10) print("Range = ", r) print("Range(3) =", r[slice(3)]) print("Range(3,8) =", r[slice(3,8)]) print("Range(2,6,2) =", r[slice(2,6,2)]) print() string = 'Python é 10!' bytes = bytes(string, 'utf-8') print("Bytes =", bytes) print("Bytes(3) =", bytes[slice(3)]) print("Bytes(3,8) =", bytes[slice(3,8)]) print("Bytes(1,8,2) =", bytes[slice(1,8,2)])
A resposta do programa é mostrada abaixo.
Tupla = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') Tupla(3) = ('a', 'b', 'c') Tupla(2,6) = ('c', 'd', 'e', 'f') Tupla(1,7,2) = ('b', 'd', 'f') String = Python é 10! String(3) = Pyt String(3,8) = hon é String(1,8,2) = yhné Lista = [1, 'ab', 64, 'teste', 2.3, 12, 'BSI'] Lista(2) = [1, 'ab'] Lista(1,4) = ['ab', 64, 'teste'] Lista(2,6,2) = [64, 2.3] Range = range(0, 10) Range(3) = range(0, 3) Range(3,8) = range(3, 8) Range(2,6,2) = range(2, 6, 2) Bytes = b'Python \xc3\xa9 10!' Bytes(3) = b'Pyt' Bytes(3,8) = b'hon \xc3' Bytes(1,8,2) = b'yhn\xc3'
- sorted() – Retorna uma lista ordenada.
tupla = ("b", "g", "a", "d", "f", "c", "h", "e") print("Tupla ordenada =", sorted(tupla)) print("Tupla reversa =", sorted(tupla, reverse=True))
Abaixo a resposta do programa.
Tupla ordenada = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] Tupla reversa = ['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
- staticmethod() – Transforma um método de classe em um método estático. Um método estático não requer uma criação de instância de classe e apenas lida com os parâmetros. O exemplo abaixo mostra duas formas de fazer essa transformação: usando a função staticmethod() e usando o decorador @staticmethod.
class Calculadora: def soma_numeros(num1, num2): return num1 + num2 @staticmethod def multiplica_numeros(num1, num2): return num1 * num2 Calculadora.soma_numeros = staticmethod(Calculadora.soma_numeros) print('Soma =', Calculadora.soma_numeros(5, 31)) print("Multiplicação =", Calculadora.multiplica_numeros(4, 8))
A saída do programa é:
Soma = 36 Multiplicação = 32
- str() – Converte um determinado valor em uma string.
a = str(3.5 + 2.4) b = str(4.5) print("a =", a, ", type =", type(a)) print("b =", b, ", type =", type(b))
Abaixo a resposta do programa.
a = 5.9 , type = <class 'str'> b = 4.5 , type = <class 'str'>
- sum() – soma todos os itens de um iterável. Se um valor é fornecido, assume que a soma tem inicialmente este valor.
tupla = (1, 2, 3, 4, 5) print("Tupla =", tupla) print("Soma tupla =", sum(tupla)) print("Soma tupla + 10 =", sum(tupla, 10))
A resposta é:
Tupla = (1, 2, 3, 4, 5) Soma tupla = 15 Soma tupla + 10 = 25
- super() – Retorna um objeto que representa a classe pai.
class Pai: def __init__(self, texto): self.mensagem = texto def mostraMensagem(self): print(self.mensagem) class Filho(Pai): def __init__(self, texto): super().__init__(texto) objeto = Filho("Python é 10!") objeto.mostraMensagem()
O programa apresenta a seguinte resposta:
Python é 10!
- tuple() – Retorna uma tupla.
string = "Python" print("Tupla a partir de uma string =", tuple(string)) lista = [1, 2, 3] print("Tupla com 3 itens =", tuple(lista)) num = 21.5 dicionario = { 'nome' : 'Maria Flor', 'Curso' : 'BSI' } print("Tupla a partir de um dicionário =", tuple(dicionario))
A resposta do programa é:
string = "Python" print("Tupla a partir de uma string =", tuple(string)) lista = [1, 2, 3] print("Tupla com 3 itens =", tuple(lista)) dicionario = { 'nome' : 'Maria Flor', 'Curso' : 'BSI' } print("Tupla a partir de um dicionário =", tuple(dicionario))
- type() – Retorna o tipo do objeto.
string = "Python" print("Tipo =", type(string)) lista = [1, 2, 3] print("Tipo =", type(lista)) tupla = (1, 2, 3) print("Tipo =", type(tupla)) conjunto = {1, 2, 3} print("Tipo =", type(conjunto)) num = 21 print("Tipo =", type(num)) num = 21.5 print("Tipo =", type(num)) dicionario = { 'nome' : 'Maria Flor', 'Curso' : 'BSI' } print("Tipo =", type(dicionario))
A saída do programa é:
Tipo = <class 'str'> Tipo = <class 'list'> Tipo = <class 'tuple'> Tipo = <class 'set'> Tipo = <class 'int'> Tipo = <class 'float'> Tipo = <class 'dict'>
- vars() – Retorna o atributo dict de um objeto. O atributo dict é um dicionário que contém os atributos alteráveis do objeto.
class Aluno: nome = 'Maria Flor' Curso = 'BSI' idade = 18 print(vars(Aluno))
O programa apresenta a seguinte saída:
{'__module__': '__main__', 'nome': 'Maria Flor', 'Curso': 'BSI', 'idade': 18, '__dict__': <attribute '__dict__' of 'Aluno' objects>, '__weakref__': <attribute '__weakref__' of 'Aluno' objects>, '__doc__': None}
- zip() – Retorna um iterador de tuplas onde o primeiro item do iterador corresponde aos primeiros itens das tuplas, o segundo item corresponde aos segundos itens das tuplas, e assim por diante. Se os iteradores tiverem comprimentos diferentes, o iterador com menos itens decide o comprimento do novo iterador.
a = ("UNIRIO", "BSI", "CCET") b = ("univesidade", "curso", "centro") c = (1, 2, 3, 4, 5) print(list(zip(a,b,c)))
Abaixo a resposta do programa.
[('UNIRIO', 'univesidade', 1), ('BSI', 'curso', 2), ('CCET', 'centro', 3)]
- __import__() – É chamada pela instrução de importação.
num = __import__('math') print("pi = ", num.pi)
A resposta é:
pi = 3.141592653589793