No Python a sintaxe se refere ao uso correto da linguagem de programação nas instruções e a semântica se refere ao uso correto da lógica na programação.
Se o programa contiver um erro de sintaxe, o erro será apresentado no console e o o programa será encerrado.
O código Python a seguir faz parte de um programa que atribui textos para as variáveis a, b e c.
Textos são sequências de caracteres entre aspas simples ou duplas.
A sintaxe está correta nas declarações das variáveis a e b, que recebem textos delimitados por aspas simples e duplas, respectivamente.
Entretanto na atribuição da variável c o texto inicia com aspas simples e finaliza com aspas duplas, causando erro de sintaxe durante a interpretação da instrução, causando a interrupção do programa.
...
b = 'A'
a = "B"
c = "C'
...
Se o programa contiver um erro de semântica, o erro funcionará normalmente entretanto sem atender ao seu objetivo.
O código Python a seguir faz parte de um programa que executa um laço de repetição, encerrando o laço com a condição da variável i, iniciada com 0, ficar menor que 1000.
Sem incrementar a variável, o laço se torna "infinito", as instruções no seu bloco serão executadas indefinidamente.
...
i = 0
while i < 1000:
a = i + 1
...
Os erros de sintaxe são detectados assim que ocorrem, durante a execução do programa.
Erros de semântica dependem do programador, de utilizar corretamento os recursos de programação disponíveis e aplicar a lógica correta às instruções.
Sintaxe é a parte da gramática que estuda as palavras enquanto elementos de uma frase, as suas relações de concordância, de subordinação e de ordem, sendo componente do sistema linguístico que determina as relações formais que interligam os constituintes da sentença, atribuindo-lhe uma estrutura.
A sintaxe do Python tem palavras, siglas e simbolos que estabelecem relações uns com os outros construindo a funcionalidade da linguagem através de estruturas de código.
O Python executa comandos que disparam um instrução ou conjuntos de instruções executadas em sequência.
Por exemplo uma função, que é um conjunto de instruções, pode ser executada pelo Python a partir do prompt de comandos.
A programação básica do Python é realizada com a declaração de instruções simples e blocos de instruções.
O python realiza diferentes tipos de instruções:
O Python é um programa que roda programas.
Portanto, alguns conceitos de programação que utiliza na interpretação dos programas que executa, utiliza na sua própria programação.
Classes e objetos são o conceito de partida, pois todos os dados do Python são objetos.
Ao atribuir um literal a uma variável, é instanciado um objeto da classe int e o endereço do objeto é atribuido à variável, que passa a apontar para o objeto.
As classes são os modelos dos objetos. Todos os objetos no Python são de determinada classe, e o Python tem diversas classes nativas implementadas na linguagem:
As classes são definições de propriedades e métodos estrututurados juntos.
As classes contêm propriedades e métodos. Propriedades são variáveis das classes e os são funções das classes.
Quando uma classe é instanciada na memória, é alocado um objeto.
Todos os tipos de dados do Python são objetos.
Quando você declara um dado inteiro, ou texto, ou lógico, são todos objetos com métodos próprios relacionados a cada tipo.
As operações são instruções envolvendo um ou dois termos conectados por um operador de alguma natureza, de atribuição, matemáticos, lógicos, textuais etc.
Os termos são variáveis, valores constantes ou expressões nas operações.
# o termo representado pela variável x
# recebe o valor do termo representado
# pelo valor constante 10.
#
x = 10
#
# o termo representado pela variável y
# recebe o valor do termo representado
# pela expressão x * x.
#
y = x * x
#
Temos dois tipos de operações: unitárias e compostas.
As operações unitárias envolvem apenas um termo, implicando que o resultado retornado pelo termo seja direcionado para o console do Python.
1 [ENTRAR]
As operações compostas envolvem dois termos, em dois tipos de operadores: operadores de atribuição e operadores de expressão.
Os operadores de atribuição permitem a declaração de variáveis como o termo da esquerda recebendo o resultado dos termos do termo da direita.
x = 1 [ENTRAR]
As expressões são operações envolvendo dois termos ligado por um operador retornando um resultado.
2 + 2 [ENTRAR]
As instruções a seguir imprimem os resultados das expressões na tela:
2 + 2
True and False
"ABC" + "DEF"
4
False
ABCDEF
As instruções com operações de atribuição permitem o armazenamento de valores nas variáveis.
a = 1
b = 2.2
c = "ABC"
d = "DEF"
e = a + b
f = c + d
print("a = {}, b = {}, c = {}, d = {}, e = {}, f = {}".format(a,b,c,d,e,f))
As instruções de blocos condicionais ou de repetição utilizam recuo para agrupar instruções.
Blocos condicionais:
a = 10
b = 5
if (a > b):
c = a / b
print(c)
Blocos de repetição:
lista = [1,2,3]
for item in lista:
print(item)
Função | Significado |
---|---|
abs() | Valor absoluto; módulo no caso de complexo |
x.add(y) | Insere o elemento y no conjunto x |
all() | Retorna True se todos os elementos do argumento são verdadeiros |
any() | Retorna True se algum elemento do argumento é verdadeiro |
basestring() | Classe base para str e unicode |
bin() | Converte um int em binário |
x.bit_length() | Comprimento de bits significativos do binário x |
bool() | Retorna True se o argumento é verdadeiro, False se não há argumento ou ele é falso |
bytearray() | Retorna um array de bytes |
callable() | Retorna True se o argumento é uma função ou método |
chr() | Caractere correspondente ao código ASCII do argumento (entre 0 e 255) |
classmethod() | Retorna um método de classe |
clear(x) | Remove todos os elementos do conjunto x |
cmp(x,y) |
Dá um int negativo se x |
compile() | Retorna um objeto de código compilado |
complex(re,im) | Converte em complexo com parte real re e imag. im |
x.conjugate() | Dá o conjugado do complexo x |
delattr() | Remove o atributo do objeto |
dict() | Retorna um dicionário |
dir() | Retorna uma lista de atributos do objeto |
x.discard(y) | Remove o elemento y do conjunto x, se y está em x |
divmod(x,y) | Dá a dupla ordenada (x // y, x % y) |
enumerate() | Retorna um iterador de tuplas (índice, valor) |
eval() | Avalia uma string como uma expressão Python |
execfile() | Executa um arquivo Python |
file() | Retorna um objeto de arquivo |
filter(f, L) | Aplica a função f a cada elemento da lista L, e resulta nos elementos de L para os quais f for True |
float() | Converte para float |
format() | Retorna uma string formatada |
frozenset() | Constroi um conjunto que não pode ser mudado |
getattr() | Retorna o valor do atributo do objeto |
globals() | Retorna um dicionário com os nomes globais |
hasattr() | Retorna True se o objeto tem o atributo |
hash() | Retorna o hash do objeto |
help() | No modo interativo (IDLE), dá a documentação do argumento |
hex() | Converte um int para um hexadecimal |
id() | Retorna o identificador do objeto |
input() | Dá o valor da entrada de um dado em forma de string; pode exibir uma mensagem |
int() | Converte para int |
x.isdisjoint(y) | True se o conjunto x é disjunto do conjunto y, False em caso contrário |
isinstance() | Retorna True se o objeto é uma instância da classe |
issubclass() | Retorna True se a classe é subclasse da classe |
iter() | Retorna um iterador |
s.join(x) | Método da classe string. Concatena as partes da lista, tupla ou conjunto x, separando-as com a string s. |
len(x) | Dá o número de elementos de uma string, lista, n-pla ou conjunto (neste caso, a cardinalidade) |
list() | Converte os elementos de uma string ou n-pla em lista; sem argumento dá a lista vazia |
locals() | Retorna um dicionário com os nomes locais |
long() | Converte para long |
lower() | Converte as letras uma string para minúsculas |
s.lstrip("c"') | Método da classe string. Elimina todos os caracteres c do começo da string s, ignorando brancos até c; se c é omitido, elimina os brancos no começo de s |
map(f,L) | Aplica a função f a cada elemento de uma lista L |
max() | Dá o maior dos elementos do argumento |
memoryview() | Retorna um objeto de visualização de memória |
min() | Dá o menor dos elementos do argumento |
next() | Retorna o próximo elemento de um iterador |
object() | Retorna um objeto |
oct() | Converte para octal |
open() | Retorna um objeto de arquivo |
ord() | Contrário de chr |
x.pop() | Dá e remove um elemento arbitrário do conjunto x |
pow(x.y) | Equivalente a x**y |
print() | Saída de dados |
property() | Retorna uma propriedade |
range() | Cria uma lista com uma faixa de itens |
raw_input() | Dá o valor da entrada de um dado em forma de string; pode exibir uma mensagem |
reduce() | Aplica uma função a uma sequência de elementos |
reload() | Recarrega um módulo |
repr() | Retorna uma string que representa o objeto |
reversed() | Retorna um iterador reverso |
s.rstrip(c) | Idem a lstrip, elimina a string c à direita da string s |
round(x,n) | x arredondado na n-ésima casa decimal; sem n arredonda para o inteiro |
set() | Constroi um conjunto que pode ser mudado |
setattr() | Define o valor do atributo do objeto |
slice() | Retorna um objeto de fatia |
s.split(sep) | Método da classe string. Gera uma lista com os elementos da string s separados pela string sep; se sep for omitido, usa branco como separador |
sorted() | Ordena uma lista |
staticmethod() | Retorna um método estático |
str() | Converte int ou float para string |
s.strip(s) | Método da classe string. Dá a string s sem a string c no começo e no fim. Sem o c, considera brancos. Ver também lstrip e rstrip |
sum() | Soma os elementos de uma lista, n-pla ou conjunto |
super() | Retorna um objeto proxy que delega os métodos para a classe pai |
tuple() | Dá uma lista ordenada |
type() | Se o argumento for uma variável, dá seu tipo; se for um objeto, o tipo do mesmo |
upper() | Converte as letras de uma string para maiúsculas |
unichr() | Contrário de unichr |
unicode() | Converte para unicode |
vars() | Retorna um dicionário com os atributos do objeto |
xrange() | Cria uma lista com uma faixa de itens |
zip() | Cria uma lista de tuplas, onde cada tupla é formada pelos elementos de uma lista |
__import__() | Importação de módulos. É o mesmo que o comando import. |
A seguir veremos sobre:
Variáveis são apontadores para objetos de dados armazenados na memória pelo Python.
Os dados criados pelo Python são objetos com propriedades e métodos, que podem ser unitários - como números, textos e boleanos - ou compostos - como coleções.
Todos os dados do Python são objetos, mesmo os unitários.
Ao ser atribuido um valor a uma variável, o objeto do dado é alocado na memória e a variável aponta para esse objeto.
Isso é conhecido popularmente na programação como "atribuição de valores a variáveis".
a = 1
b = True
c = "ABC"
print(a,b,c)
Python não declara variáveis sem a atribuição de um valor.
Para declarar uma variável para uso futuro atribui-se o valor None.
i = None
print(i)
print(type(i))
Uma variável é criada no momento em que é atribuido um valor a ela.
x = 5
y = "Alô, mundo!"
print("x = {}, y = {}".format(x,y))
As variáveis não precisam ser declaradas com nenhum tipo específico e podem mudar de tipo depois de terem sido definidas.
x = 4 # x é do tipo int
print(x)
x = "Roberto" # x agora é do tipo str
print(x)
Você pode obter o tipo de dado de uma variável com a função type().
x = 5
y = "John"
print(type(x))
print(type(y))
Para especificar o tipo de dado de uma variável use a conversão.
x = str(3) # x será '3'
y = int(3) # y será 3
z = float(3) # z será 3.
print(type(x))
print(type(y))
print(type(z))
Textos são declarados entre aspas simples ou duplas e atribuidos a variáveis.
x = "Roberto"
# é o mesmo que
y = 'Roberto'
print(x)
print(y)
Os nomes de variáveis diferenciam letras maiúsculas de minúsculas.
x = 4
X = "Roberto"
# X não irá sobrepor x
print("x =",x)
print("X =",X)
Variáveis podem armazenar valores de diferentes tipos, com diferentes funcionalidades.
O Python tem os seguintes tipos de dados:
Tipo de texto | str |
---|---|
Tipos Numéricos | int, float, complex |
Tipos de sequência | list, tuple, range |
Tipo de mapeamento | dict |
Tipos de conjunto | set, frozenset |
Tipo booleano | bool |
Tipos binários | bytes, bytearray, memoryview |
Nenhum Tipo | NoneType |
O tipo de dado de uma variável é obtido o método type().
x = 5
print(type(x))
Em Python, o tipo de dado é definido quando você atribui um valor a uma variável:
Atribuição da variável x | Tipo de x |
---|---|
x = "Hello World" | str |
x = 20 | int |
x = 20.5 | float |
x = 1j | complex |
x = ["maçã", "banana", "cereja"] | list |
x = ("maçã", "banana", "cereja") | tuple |
x = range(6) | range |
x = {"name" : "John", "age" : 36} | dict |
x = {"maçã", "banana", "cereja"} | set |
x = frozenset({"maçã", "banana", "cereja"}) | frozenset |
x = True | bool |
x = b"Hello" | bytes |
x = bytearray(5) | bytearray |
x = memoryview(bytes(5)) | memoryview |
x = None | NoneType |
Atribuição da variável x com especificação de tipo | Tipo de x |
---|---|
x = str("Hello World") | str |
x = int(20) | int |
x = float(20.5) | float |
x = complex(1j) | complex |
x = list(("maçã", "banana", "cereja")) | list |
x = tuple(("maçã", "banana", "cereja")) | tuple |
x = range(6) | range |
x = dict(name="Roberto", age=58) | dict |
x = set(("maçã", "banana", "cereja")) | set |
x = frozenset(("maçã", "banana", "cereja")) | frozenset |
x = bool(5) | bool |
x = bytes(5) | bytes |
x = bytearray(5) | bytearray |
x = memoryview(bytes(5)) |
O recuo definem blocos de instruções e refere-se aos espaços em branco no início de uma linha de código.
Blocos são necessários com determinadas estruturas da sintaxe do python agrupando uma ou mais instruções.
Onde em outras linguagens de programação o recuo no código tem efeito apenas na legibilidade, o recuo em Python faz parte da sintaxe, sendo, portanto, bastante importante.
O bloco principal de um script Python não tem espaços em branco no início da linha.
x = 2
y = 3
print (x + y)
Recuos são utilizados com blocos condicionais, blocos de repetição, funções e classes.
Blocos condicionais são aqueles em que as instruções são executadas somente se uma determinada condição for atendida com o uso da cláusula if/elif/else.
a = 1
b = 2
if (a > b):
print("a > b")
elif (a < b):
print("a < b")
else:
print("a = b")
Blocos de repetição são aqueles em que as instruções são executadas somente se uma determinada condição for atendida com o uso das cláusulas for/while.
Laço for:
for i in range(10): # de 0 a 9
print(i)
Laço while:
i = 0
while i < 10: # de 0 a 9
print(i)
i += 1
Os recuos devem ser utilizados com as cláusulas de bloco (condicionais, repetitivos, funções e classes) e seu uso sem necessidade gera erro.
Observe no script a seguir com um recuo de 4 espaços sem necessidade causando erro:
x = 5
O recuo serve para determinar um bloco de instruções.
if 5 > 2:
print("Cinco é maior que dois!")
Ocorrerá erro se o recuo não for respeitado.
if 5 > 2:
print("Cinco é maior que dois!")
O número de espaços fica ao critério do programador.
O uso mais comum são quatro espaços, entretanto pode ser qualquer quantidade de espaços, em um mesmo bloco de instruções.
if 5 > 2:
print("Um espaço!") # um espaço em branco, no bloco
if 5 > 2:
print("Oito espaços!") # oito espaços no bloco
Você precisa usar o mesmo número de espaços em um mesmo bloco de instruções, caso contrário, ocorrerá erro.
if 5 > 2:
print("Cinco é maior que dois!")
print("Cinco é maior que dois!")
Uma variável só está disponível dentro da região em que foi criada. Isso é chamado de escopo.
Uma variável criada dentro de uma função pertence ao escopo local dessa função e só pode ser usada dentro dela.
def funcao_x_local():
x = 300
print(x)
#
funcao_x_local()
Conforme explicado no exemplo acima, a variável x não está disponível fora da função, mas está disponível para qualquer função dentro da função.
Exemplo: a variável local pode ser acessada em uma função dentro da função.
def minha_funcao():
x = 300
#
def minha_funcao_interna():
print(x)
#
minha_funcao_interna()
#
minha_funcao()
Variáveis declaradas no corpo principal do código têm escopo global.
Podem ser acessadas nas funções e classes com a declaração da variável como global.
x = 300
#
def funcao_x_global():
global x
print(x)
#
funcao_x_global()
Se você operar com o mesmo nome de variável dentro e fora de uma função, o Python as tratará como duas variáveis diferentes, uma disponível no escopo global (fora da função) e outra disponível no escopo local (dentro da função).
x = 300
def minha_funcao():
x = 200
print('x dentro da função =', x)
minha_funcao()
print('x fora da função =', x)
Comentários são partes do código sem efeito, que são ignorados e não são interpretados pelo Python.
Os comentários começam com o simbolo "#" e o Python tratará o restante da linha como comentário.
# Este é um comentário.
print("Alô, mundo!")
Os comentários são usados para documentação diversa no código.
Comentários podem ser usados para tornar o código mais legível.
Os comentários podem ser usados para desabilitar a execução de código em testes.
Os comentários começam com #, e o Python ignorará o restante da linha em que aparece.
# Este é um comentário
print("Alô, mundo!")
O comentário pode ser colocado no final de uma linha com uma instrução e o interpretador irá ignorar o restante da linha.
print("Alô, mundo!") # Este é um comentário
Um comentário não precisa ser um texto que explique o código, ele também pode ser usado para impedir que o Python execute o código na linha durante testes.
# print("Alô, mundo!")
print("Abraço, companheiro!")
O Python não possui uma sintaxe para comentários de várias linhas.
Para comentar várias linhas inserimos # para cada linha.
# Este é um comentário
# escrito em
# mais de uma linha
print("Alô, mundo!")
Ou, não exatamente como pretendido, você pode usar um texto de várias linhas sem atribuir a nenhuma variável.
Como o Python ignora textos não atribuídos a variáveis, um texto contendo várias linhas (entre aspas triplas ''' ou """) pode ser incluído no código funcionando como comentário.
"""
Este é um texto
funcionando como comentário
escrito em mais do que
apenas uma linha
"""
print("Alô, mundo!")
Contando que a string não seja atribuída a uma variável, o Python interpretará o código, descartando texto, permitindo que funcione como um comentário de várias linhas.