O documento apresenta uma introdução ao desenvolvimento web com Python e Django, abordando a história e características da linguagem Python, o interpretador Python, tipos de dados, operadores, estruturas de controle e outros conceitos básicos da linguagem.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
O documento discute programação orientada a objetos em Python. Ele explica conceitos básicos como classes, objetos, métodos e atributos. Também descreve como definir classes em Python e criar instâncias de objetos, incluindo o uso do método especial __init__().
Minicurso apresentado na Jornada de Atualização em Computação, Elétrica e Eletrônica (JACEE) da Universidade Federal do Espírito Santo (UFES). São apresentados o mercado para Android, o histórico da plataforma, a sua arquitetura, as diferenças do processo de desenvolvimento Java e Android e os componentes básicos de aplicação. Também são descritos os passos para criação de dois aplicativos do início ao fim.
Python Módulo Básico - Introdução a linguagem Python
Este documento fornece um resumo de 3 frases ou menos sobre o documento:
O documento discute a história e uso da linguagem de programação Python, desde sua criação até versões atuais. A linguagem é de código aberto e licenciada pela Python Software Foundation. O documento também fornece instruções sobre como instalar e usar o interpretador Python em diferentes sistemas operacionais, incluindo Windows.
JavaScript é a linguagem do browser e mais popular do mundo. Foi criada em 1995 para o Netscape e adotada pela Microsoft em 1996. Apesar de sua má fama inicial devido a problemas como variáveis globais e parseInt, JavaScript possui "partes boas" como funções como valores, objetos dinâmicos e JSON que a tornaram uma linguagem importante.
O documento apresenta um curso introdutório sobre a linguagem de programação Python, abordando tópicos como:
1) O que é Python, incluindo sua tipagem dinâmica e delimitação por indentação;
2) Por que aprender Python, destacando sua simplicidade, expressividade e suporte a múltiplas plataformas;
3) Conceitos básicos da linguagem como tipos numéricos e de dados, listas e métodos.
O documento apresenta uma introdução ao JavaScript, definindo-o como uma linguagem de programação multiparadigma que funciona em navegadores, dispositivos móveis e servidores. Explica os principais tipos de dados como number, string e boolean, além de estruturas como objetos, arrays, variáveis, operadores, condicionais, loops e tratamento de erros.
O documento explica o que são ponteiros em C e como declará-los e utilizá-los. Os ponteiros armazenam endereços de memória e podem apontar para variáveis, arrays e estruturas. O documento também mostra como alocar e liberar memória dinamicamente usando funções como malloc(), free() e realloc().
Programando para web com python - Introdução a Python
O documento apresenta uma palestra sobre a linguagem de programação Python. Resume os principais pontos da seguinte forma:
1) Apresenta breve histórico da linguagem Python, criada em 1990 por Guido van Rossum com foco em usuários como físicos e engenheiros.
2) Discutem as principais características da linguagem como interpretação, tipagem dinâmica, controle de fluxo por indentação, orientação a objetos e biblioteca padrão rica.
3) Explicam porque Python é uma boa opção para
O documento introduz o conceito de Python como uma linguagem de programação interpretada e dinamicamente tipada. Apresenta alguns tópicos básicos como estruturas de dados como listas e dicionários, além de operadores e funções.
O documento descreve a história e características da linguagem de programação Python, desde sua criação por Guido van Rossum até versões atuais. Python tem tipagem dinâmica, sintaxe simples e é interpretada, possibilitando programação em diversas plataformas. Existem várias ferramentas para desenvolvimento com Python.
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
[1] O documento discute o desenvolvimento de aplicações web usando o framework Django, incluindo sua história, características e padrão MVC.
[2] É apresentada uma introdução ao Django, explicando o que é o framework e como ele pode ser usado para construir aplicações web de forma rápida e eficiente.
[3] São descritas as etapas para criar uma primeira aplicação web simples usando Django, incluindo a instalação do framework, criação de um projeto e execução de um servidor de desenvolvimento.
Este documento fornece exemplos de código Java para entrada de dados do usuário através do teclado, Scanner e caixas de diálogo. Inclui três exemplos de classes Java - Teclado.java, Entrada.java e InputDialog.java - que mostram diferentes maneiras de ler entrada do usuário e exibe um exercício para implementar as classes Entrada.java e InputDialog.java.
O documento apresenta um tutorial básico sobre programação orientada a objetos em Python ministrado por Ronaldo F. Ramos no IFCE em 20 de abril de 2017. O tutorial introduz conceitos como classes, objetos, herança, encapsulamento, construtores e importação de módulos e pacotes.
Aula 2 da disciplina Programação Orientada a Objetos, onde é apresentando o conceito inicial da linguagem JAVA, que será a base da aplicação prática na disciplina.
Slides para apresentação da linguagem Python. Trabalho para a matéria "Novas Tecnologias" na Universidade Metodista de São Paulo. Lembrando que eu tive que estudar muito sobre, pois nunca tive um contato "suficiente" com Python.
Python é uma linguagem de programação multi-paradigma, interpretada e de tipagem dinâmica que possui uma biblioteca extensa. O documento apresenta os objetivos, características, sintaxe básica, controle de fluxo, orientação a objetos, programação funcional e módulos em Python.
Python é uma linguagem de programação de alto nível, interpretada e orientada a objetos. Ela tem sintaxe limpa, tipagem forte e dinâmica e é utilizada em diversas áreas como desenvolvimento web, ciência de dados, desktop e muito mais. Python roda em diversas plataformas como Linux, Windows, MacOS e é de código aberto.
O documento apresenta uma introdução à sintaxe da linguagem Python, incluindo blocos por indentação, comentários, tipos de dados básicos como números, strings e listas, e operadores. Também discute execução de scripts Python, variáveis e atribuição.
1. O documento descreve operações básicas em Python como variáveis, entrada e saída de dados, e estruturas condicionais IF.
2. Variáveis armazenam valores e tipos de dados como inteiros, floats e strings. Comandos como print exibem saídas e input permitem entrada de dados do usuário.
3. Estruturas IF executam blocos de código condicionalmente dependendo de expressões booleanas, permitindo diferentes fluxos de execução.
O documento apresenta uma introdução básica à linguagem Python, abordando tópicos como: 1) impressão de "Hello World"; 2) tipos e operações básicas; 3) listas, strings e tuplas. Exemplos de código são fornecidos para exemplificar os conceitos apresentados.
O documento apresenta os principais conceitos básicos da linguagem Python, incluindo: 1) Como escrever o primeiro programa "Hello World"; 2) Tipos de dados como números, strings e suas operações; 3) Estruturas de dados como listas, dicionários e arquivos.
Este é um mini-curso básico de Python. Já foi aplicado na Semana de tecnologia de Universidade Católica e no encontro de tecnologia de Especializa (ZCon).
O documento apresenta as plataformas Arduino e Python, discutindo suas características e aplicações, como hardware e software livres para prototipagem e automação.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
Este documento apresenta uma palestra sobre a linguagem de programação Python. As principais ideias apresentadas são:
1) Python é uma linguagem de uso geral amplamente utilizada em diversas áreas como internet, computação gráfica, desktop, operações de empresas e computação científica.
2) Existem diversas implementações de Python como CPython, Jython, IronPython e PyPy. CPython é a implementação principal escrita em C.
3) Python tem evoluído gradualmente ao longo dos anos com novas versões lançadas a cada alguns anos que trazem melhor
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
O documento apresenta Python como linguagem de programação, discutindo seus objetivos, características e exemplos de programação. As principais seções incluem uma introdução à linguagem, características como tipagem dinâmica e multiplataforma, e exemplos de controle de fluxo, orientação a objetos, módulos e programas que utilizam Python.
Este documento apresenta uma agenda para um mini-curso gratuito sobre a linguagem de programação Go. A agenda inclui tópicos como motivação, configuração de ambiente, estrutura da linguagem, funções, valores compostos, tipos personalizados, módulos, execução concorrente e utilitários. O objetivo é fornecer uma introdução abrangente aos principais recursos e conceitos da linguagem Go.
Pymordida0 Semana de computação da SOCIESC - 2008/10
O documento apresenta uma introdução ao Python, abordando tópicos como:
- Blocos de código por indentação
- Tipos de dados básicos como números, strings, listas e dicionários
- Operadores e funções com esses tipos de dados
- Listas comprehensions para gerar listas de forma concisa
Python é uma linguagem de programação fácil de aprender e poderosa, orientada a objetos com vasta biblioteca de classes e funções. O documento descreve características de Python, quem a usa, versões, como instalar, editores, conceitos básicos como variáveis, strings, listas, desvios condicionais e laços, além de módulos e exemplos de uso.
O documento descreve uma linguagem de programação chamada Pascal. O Pascal foi criado em 1971 por Niklaus Wirth para promover o uso de código estruturado. O Pascal foi muito popular na década de 1980 e é frequentemente usado para ensinar conceitos básicos de programação. O documento explica elementos-chave do Pascal como variáveis, constantes, operadores, estruturas de decisão e repetição.
O documento apresenta uma introdução à linguagem de programação Python, descrevendo suas características, aplicações e exemplos de código. É feita uma comparação com outras linguagens, destacando as vantagens de Python como fácil aprendizagem, biblioteca abrangente e multiplataforma. Exemplos de uso no Brasil e no exterior também são apresentados.
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Cherrypy - um framework para desenvolvimento rápido de aplicações web
O documento fornece uma introdução ao framework CherryPy para desenvolvimento web em Python. Ele discute brevemente a história de Python e CherryPy, características e vantagens de Python, empresas que usam Python, e como usar CherryPy para desenvolvimento web rápido.
O documento introduz conceitos básicos de programação em C++, como:
- A estrutura de um programa C++ inclui diretivas, declaração de variáveis e a função main;
- Bibliotecas contêm funções pré-definidas utilizadas nos programas;
- O ambiente Dev-C++ pode ser usado para editar, compilar e executar programas C++.
O documento descreve a linguagem de programação Brainfuck, que opera em uma fita de memória unidimensional e possui apenas 8 instruções para mover e modificar valores nessa fita. O código exemplo incrementa o valor na primeira posição da fita e imprime o caractere A.
Nessa apresentação eu proponho uma abordagem para desenvolvimento de uma aplicação Web que, com poucas extensões (todas dentro do escopo dos protocolos da própria Web), permite o seu uso também como uma API REST.
The document presents the Manifesto for Agile Software Development. It values individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan. It was authored by seventeen individuals who have come to value these principles through their work developing software and helping others.
Como funciona um time remoto de desenvolvimento - Caipyra 2018
O documento discute como funciona um time de desenvolvimento remoto de forma efetiva. Ele aborda tópicos como mindset remoto, ferramentas para comunicação e colaboração à distância, cuidados para começar a trabalhar remotamente como foco na socialização e qualidade, e mitos versus verdades sobre trabalho remoto.
Como montar uma equipe, partindo do zero, para reescrever de toda a plataforma da empresa em 7 meses? Como ter acesso rápido aos profissionais mais qualificados do país? Como coordenar o trabalho desse time para garantir as entregas no prazo? Como garantir a qualidade das entregas?
Nessa apresentação mostraremos os caminhos e os desafios a serem enfrentados para tornar possível o trabalho remoto na sua empresa e mostrar quais as vantagens e desvantagens desse modelo. Entre os assuntos abordados:
- Como implantar o trabalho remoto na sua empresa;
- Os desafios de se manter um modelo híbrido (remoto e presencial);
- Como o trabalho remoto auxilia na contratação de profissionais;
- Como o modelo remoto impacta na produtividade e na qualidade dos times.
Plataforma distribuída de Microserviços ou, como a Olist funciona
The document describes Olist's migration from a monolithic to a microservices architecture. Some key points:
- The original version (V1) was built with AngularJS in a monolithic structure, which lacked scalability, reliability, and safety.
- The new architecture uses microservices with inter-service communication via APIs and asynchronous messaging. Services are independent and communicate through RESTful APIs or by publishing messages to queues.
- The architecture provides modularity, scalability, resilience, and safety compared to the monolithic version. Example workflows are described to show how different services interact to complete tasks.
- Development is remote using tools like GitHub, JIRA, Slack for collaboration and Her
This document lists three individuals: Richard Stallman, Steve Wozniak, and John Draper (Captain Crunch). Richard Stallman founded the Free Software Foundation and pioneered open-source software. Steve Wozniak co-founded Apple Computer and engineered the first Apple personal computers. John Draper, also known as Captain Crunch, was a famous hacker known for discovering a whistle embedded in a Captain Crunch cereal box that could be used to hack long-distance phone calls.
O documento discute como empreender com Python e Django, fornecendo instruções sobre como escolher uma ideia, desenvolver um produto mínimo viável, hospedar o site e obter feedback inicial.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Unicode es un estándar que asigna códigos numéricos únicos a más de 100,000 caracteres. Los caracteres Unicode se pueden codificar en formatos como UTF-8, UTF-16 y UTF-32 para su almacenamiento y transmisión como secuencias de bytes. Es importante codificar y decodificar cadenas al pasar entre representaciones internas de Unicode y formatos de bytes.
O documento descreve a jornada do autor desde a infância até se tornar um empreendedor e programador Python. Ele começou a programar sozinho em diferentes linguagens e fundou algumas empresas antes de descobrir Python. O autor incentiva outros a empreender usando ferramentas gratuitas e compartilha lições aprendidas.
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Unicode é um catálogo de todos os símbolos criados pela humanidade, mas computadores precisam codificar esses símbolos para armazenamento. Isso cria problemas quando diferentes codificações são usadas sem cuidado em Python 2. Para evitar erros, é importante entender como Unicode é abstração e como diferentes codificações funcionam, além de usar várias técnicas como BOM e Accept-Charset para descobrir a codificação correta.
O documento discute a implementação de uma plataforma para venda de conteúdo online chamada Ludeos, incluindo detalhes técnicos sobre streaming de vídeo e áudio, preços de assinatura e ferramentas recomendadas para gravação de conteúdo.
O documento discute o Google App Engine, uma plataforma que permite o desenvolvimento e hospedagem de aplicações na nuvem do Google de forma escalável. O App Engine oferece serviços como Datastore, Memcache, Task Queues e armazenamento de blobs de forma gratuita ou a preços acessíveis, permitindo a escalabilidade horizontal e vertical das aplicações. A plataforma suporta principalmente aplicações em Python de forma sandboxed, sem acesso ao sistema de arquivos ou sockets.
Palestra sobre Python apresentada na Fenasoft (uma das últimas edições).
Nesta época eu era sócio da Haxent. Hoje eu não sou mais e o conteúdo dessa apresentação, apesar de apresentar o nome da empresa, pode não representar mais a visão da mesma.
Este documento apresenta os membros do grupo WebLovers, que inclui 5 pessoas: Giancarlo Silva, Allyson Barros, Daniele Montenegro, Elionai Moura e Sedir Morais. Cada membro é graduando ou graduado em Análise e Desenvolvimento de Sistemas no IFRN e lidera o grupo WebLovers.
Este documento apresenta uma introdução à linguagem de programação Python. Ele discute as características e implementações da linguagem, tipos de dados como números, strings e listas, e conceitos como variáveis, funções, orientação a objetos e módulos. O documento é dividido em três partes cobrindo tópicos como apresentação, introdução e detalhes da linguagem.
Registros são variáveis compostas heterogêneas que armazenam dados de tipos diferentes em campos lógicos relacionados. São declarados usando a estrutura struct e seus campos são acessados usando o operador ponto (.). Vetores de registros permitem armazenar múltiplos registros do mesmo tipo.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
O documento discute programação orientada a objetos em Python. Ele explica conceitos básicos como classes, objetos, métodos e atributos. Também descreve como definir classes em Python e criar instâncias de objetos, incluindo o uso do método especial __init__().
Minicurso apresentado na Jornada de Atualização em Computação, Elétrica e Eletrônica (JACEE) da Universidade Federal do Espírito Santo (UFES). São apresentados o mercado para Android, o histórico da plataforma, a sua arquitetura, as diferenças do processo de desenvolvimento Java e Android e os componentes básicos de aplicação. Também são descritos os passos para criação de dois aplicativos do início ao fim.
Este documento fornece um resumo de 3 frases ou menos sobre o documento:
O documento discute a história e uso da linguagem de programação Python, desde sua criação até versões atuais. A linguagem é de código aberto e licenciada pela Python Software Foundation. O documento também fornece instruções sobre como instalar e usar o interpretador Python em diferentes sistemas operacionais, incluindo Windows.
JavaScript é a linguagem do browser e mais popular do mundo. Foi criada em 1995 para o Netscape e adotada pela Microsoft em 1996. Apesar de sua má fama inicial devido a problemas como variáveis globais e parseInt, JavaScript possui "partes boas" como funções como valores, objetos dinâmicos e JSON que a tornaram uma linguagem importante.
O documento apresenta um curso introdutório sobre a linguagem de programação Python, abordando tópicos como:
1) O que é Python, incluindo sua tipagem dinâmica e delimitação por indentação;
2) Por que aprender Python, destacando sua simplicidade, expressividade e suporte a múltiplas plataformas;
3) Conceitos básicos da linguagem como tipos numéricos e de dados, listas e métodos.
O documento apresenta uma introdução ao JavaScript, definindo-o como uma linguagem de programação multiparadigma que funciona em navegadores, dispositivos móveis e servidores. Explica os principais tipos de dados como number, string e boolean, além de estruturas como objetos, arrays, variáveis, operadores, condicionais, loops e tratamento de erros.
O documento explica o que são ponteiros em C e como declará-los e utilizá-los. Os ponteiros armazenam endereços de memória e podem apontar para variáveis, arrays e estruturas. O documento também mostra como alocar e liberar memória dinamicamente usando funções como malloc(), free() e realloc().
Programando para web com python - Introdução a PythonAlvaro Oliveira
O documento apresenta uma palestra sobre a linguagem de programação Python. Resume os principais pontos da seguinte forma:
1) Apresenta breve histórico da linguagem Python, criada em 1990 por Guido van Rossum com foco em usuários como físicos e engenheiros.
2) Discutem as principais características da linguagem como interpretação, tipagem dinâmica, controle de fluxo por indentação, orientação a objetos e biblioteca padrão rica.
3) Explicam porque Python é uma boa opção para
O documento introduz o conceito de Python como uma linguagem de programação interpretada e dinamicamente tipada. Apresenta alguns tópicos básicos como estruturas de dados como listas e dicionários, além de operadores e funções.
O documento descreve a história e características da linguagem de programação Python, desde sua criação por Guido van Rossum até versões atuais. Python tem tipagem dinâmica, sintaxe simples e é interpretada, possibilitando programação em diversas plataformas. Existem várias ferramentas para desenvolvimento com Python.
[1] O documento discute o desenvolvimento de aplicações web usando o framework Django, incluindo sua história, características e padrão MVC.
[2] É apresentada uma introdução ao Django, explicando o que é o framework e como ele pode ser usado para construir aplicações web de forma rápida e eficiente.
[3] São descritas as etapas para criar uma primeira aplicação web simples usando Django, incluindo a instalação do framework, criação de um projeto e execução de um servidor de desenvolvimento.
Este documento fornece exemplos de código Java para entrada de dados do usuário através do teclado, Scanner e caixas de diálogo. Inclui três exemplos de classes Java - Teclado.java, Entrada.java e InputDialog.java - que mostram diferentes maneiras de ler entrada do usuário e exibe um exercício para implementar as classes Entrada.java e InputDialog.java.
O documento apresenta um tutorial básico sobre programação orientada a objetos em Python ministrado por Ronaldo F. Ramos no IFCE em 20 de abril de 2017. O tutorial introduz conceitos como classes, objetos, herança, encapsulamento, construtores e importação de módulos e pacotes.
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
Aula 2 da disciplina Programação Orientada a Objetos, onde é apresentando o conceito inicial da linguagem JAVA, que será a base da aplicação prática na disciplina.
Apresentando a Linguagem de Programação PythonPriscila Mayumi
Slides para apresentação da linguagem Python. Trabalho para a matéria "Novas Tecnologias" na Universidade Metodista de São Paulo. Lembrando que eu tive que estudar muito sobre, pois nunca tive um contato "suficiente" com Python.
Python é uma linguagem de programação multi-paradigma, interpretada e de tipagem dinâmica que possui uma biblioteca extensa. O documento apresenta os objetivos, características, sintaxe básica, controle de fluxo, orientação a objetos, programação funcional e módulos em Python.
Python é uma linguagem de programação de alto nível, interpretada e orientada a objetos. Ela tem sintaxe limpa, tipagem forte e dinâmica e é utilizada em diversas áreas como desenvolvimento web, ciência de dados, desktop e muito mais. Python roda em diversas plataformas como Linux, Windows, MacOS e é de código aberto.
O documento apresenta uma introdução à sintaxe da linguagem Python, incluindo blocos por indentação, comentários, tipos de dados básicos como números, strings e listas, e operadores. Também discute execução de scripts Python, variáveis e atribuição.
1. O documento descreve operações básicas em Python como variáveis, entrada e saída de dados, e estruturas condicionais IF.
2. Variáveis armazenam valores e tipos de dados como inteiros, floats e strings. Comandos como print exibem saídas e input permitem entrada de dados do usuário.
3. Estruturas IF executam blocos de código condicionalmente dependendo de expressões booleanas, permitindo diferentes fluxos de execução.
O documento apresenta uma introdução básica à linguagem Python, abordando tópicos como: 1) impressão de "Hello World"; 2) tipos e operações básicas; 3) listas, strings e tuplas. Exemplos de código são fornecidos para exemplificar os conceitos apresentados.
O documento apresenta os principais conceitos básicos da linguagem Python, incluindo: 1) Como escrever o primeiro programa "Hello World"; 2) Tipos de dados como números, strings e suas operações; 3) Estruturas de dados como listas, dicionários e arquivos.
Este é um mini-curso básico de Python. Já foi aplicado na Semana de tecnologia de Universidade Católica e no encontro de tecnologia de Especializa (ZCon).
O documento apresenta as plataformas Arduino e Python, discutindo suas características e aplicações, como hardware e software livres para prototipagem e automação.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
Este documento apresenta uma palestra sobre a linguagem de programação Python. As principais ideias apresentadas são:
1) Python é uma linguagem de uso geral amplamente utilizada em diversas áreas como internet, computação gráfica, desktop, operações de empresas e computação científica.
2) Existem diversas implementações de Python como CPython, Jython, IronPython e PyPy. CPython é a implementação principal escrita em C.
3) Python tem evoluído gradualmente ao longo dos anos com novas versões lançadas a cada alguns anos que trazem melhor
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
O documento apresenta Python como linguagem de programação, discutindo seus objetivos, características e exemplos de programação. As principais seções incluem uma introdução à linguagem, características como tipagem dinâmica e multiplataforma, e exemplos de controle de fluxo, orientação a objetos, módulos e programas que utilizam Python.
Este documento apresenta uma agenda para um mini-curso gratuito sobre a linguagem de programação Go. A agenda inclui tópicos como motivação, configuração de ambiente, estrutura da linguagem, funções, valores compostos, tipos personalizados, módulos, execução concorrente e utilitários. O objetivo é fornecer uma introdução abrangente aos principais recursos e conceitos da linguagem Go.
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
O documento apresenta uma introdução ao Python, abordando tópicos como:
- Blocos de código por indentação
- Tipos de dados básicos como números, strings, listas e dicionários
- Operadores e funções com esses tipos de dados
- Listas comprehensions para gerar listas de forma concisa
Python é uma linguagem de programação fácil de aprender e poderosa, orientada a objetos com vasta biblioteca de classes e funções. O documento descreve características de Python, quem a usa, versões, como instalar, editores, conceitos básicos como variáveis, strings, listas, desvios condicionais e laços, além de módulos e exemplos de uso.
O documento descreve uma linguagem de programação chamada Pascal. O Pascal foi criado em 1971 por Niklaus Wirth para promover o uso de código estruturado. O Pascal foi muito popular na década de 1980 e é frequentemente usado para ensinar conceitos básicos de programação. O documento explica elementos-chave do Pascal como variáveis, constantes, operadores, estruturas de decisão e repetição.
O documento apresenta uma introdução à linguagem de programação Python, descrevendo suas características, aplicações e exemplos de código. É feita uma comparação com outras linguagens, destacando as vantagens de Python como fácil aprendizagem, biblioteca abrangente e multiplataforma. Exemplos de uso no Brasil e no exterior também são apresentados.
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
O documento fornece uma introdução ao framework CherryPy para desenvolvimento web em Python. Ele discute brevemente a história de Python e CherryPy, características e vantagens de Python, empresas que usam Python, e como usar CherryPy para desenvolvimento web rápido.
O documento introduz conceitos básicos de programação em C++, como:
- A estrutura de um programa C++ inclui diretivas, declaração de variáveis e a função main;
- Bibliotecas contêm funções pré-definidas utilizadas nos programas;
- O ambiente Dev-C++ pode ser usado para editar, compilar e executar programas C++.
O documento descreve a linguagem de programação Brainfuck, que opera em uma fita de memória unidimensional e possui apenas 8 instruções para mover e modificar valores nessa fita. O código exemplo incrementa o valor na primeira posição da fita e imprime o caractere A.
Nessa apresentação eu proponho uma abordagem para desenvolvimento de uma aplicação Web que, com poucas extensões (todas dentro do escopo dos protocolos da própria Web), permite o seu uso também como uma API REST.
The document presents the Manifesto for Agile Software Development. It values individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan. It was authored by seventeen individuals who have come to value these principles through their work developing software and helping others.
Como funciona um time remoto de desenvolvimento - Caipyra 2018Osvaldo Santana Neto
O documento discute como funciona um time de desenvolvimento remoto de forma efetiva. Ele aborda tópicos como mindset remoto, ferramentas para comunicação e colaboração à distância, cuidados para começar a trabalhar remotamente como foco na socialização e qualidade, e mitos versus verdades sobre trabalho remoto.
Como montar uma equipe, partindo do zero, para reescrever de toda a plataforma da empresa em 7 meses? Como ter acesso rápido aos profissionais mais qualificados do país? Como coordenar o trabalho desse time para garantir as entregas no prazo? Como garantir a qualidade das entregas?
Nessa apresentação mostraremos os caminhos e os desafios a serem enfrentados para tornar possível o trabalho remoto na sua empresa e mostrar quais as vantagens e desvantagens desse modelo. Entre os assuntos abordados:
- Como implantar o trabalho remoto na sua empresa;
- Os desafios de se manter um modelo híbrido (remoto e presencial);
- Como o trabalho remoto auxilia na contratação de profissionais;
- Como o modelo remoto impacta na produtividade e na qualidade dos times.
Plataforma distribuída de Microserviços ou, como a Olist funcionaOsvaldo Santana Neto
The document describes Olist's migration from a monolithic to a microservices architecture. Some key points:
- The original version (V1) was built with AngularJS in a monolithic structure, which lacked scalability, reliability, and safety.
- The new architecture uses microservices with inter-service communication via APIs and asynchronous messaging. Services are independent and communicate through RESTful APIs or by publishing messages to queues.
- The architecture provides modularity, scalability, resilience, and safety compared to the monolithic version. Example workflows are described to show how different services interact to complete tasks.
- Development is remote using tools like GitHub, JIRA, Slack for collaboration and Her
This document lists three individuals: Richard Stallman, Steve Wozniak, and John Draper (Captain Crunch). Richard Stallman founded the Free Software Foundation and pioneered open-source software. Steve Wozniak co-founded Apple Computer and engineered the first Apple personal computers. John Draper, also known as Captain Crunch, was a famous hacker known for discovering a whistle embedded in a Captain Crunch cereal box that could be used to hack long-distance phone calls.
O documento discute como empreender com Python e Django, fornecendo instruções sobre como escolher uma ideia, desenvolver um produto mínimo viável, hospedar o site e obter feedback inicial.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Unicode es un estándar que asigna códigos numéricos únicos a más de 100,000 caracteres. Los caracteres Unicode se pueden codificar en formatos como UTF-8, UTF-16 y UTF-32 para su almacenamiento y transmisión como secuencias de bytes. Es importante codificar y decodificar cadenas al pasar entre representaciones internas de Unicode y formatos de bytes.
O documento descreve a jornada do autor desde a infância até se tornar um empreendedor e programador Python. Ele começou a programar sozinho em diferentes linguagens e fundou algumas empresas antes de descobrir Python. O autor incentiva outros a empreender usando ferramentas gratuitas e compartilha lições aprendidas.
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Unicode é um catálogo de todos os símbolos criados pela humanidade, mas computadores precisam codificar esses símbolos para armazenamento. Isso cria problemas quando diferentes codificações são usadas sem cuidado em Python 2. Para evitar erros, é importante entender como Unicode é abstração e como diferentes codificações funcionam, além de usar várias técnicas como BOM e Accept-Charset para descobrir a codificação correta.
O documento discute a implementação de uma plataforma para venda de conteúdo online chamada Ludeos, incluindo detalhes técnicos sobre streaming de vídeo e áudio, preços de assinatura e ferramentas recomendadas para gravação de conteúdo.
O documento discute o Google App Engine, uma plataforma que permite o desenvolvimento e hospedagem de aplicações na nuvem do Google de forma escalável. O App Engine oferece serviços como Datastore, Memcache, Task Queues e armazenamento de blobs de forma gratuita ou a preços acessíveis, permitindo a escalabilidade horizontal e vertical das aplicações. A plataforma suporta principalmente aplicações em Python de forma sandboxed, sem acesso ao sistema de arquivos ou sockets.
Palestra sobre Python apresentada na Fenasoft (uma das últimas edições).
Nesta época eu era sócio da Haxent. Hoje eu não sou mais e o conteúdo dessa apresentação, apesar de apresentar o nome da empresa, pode não representar mais a visão da mesma.
4. Python
• Surgiu em 1989
• Criada por Guido van Rossum
• Monty Python and the flying circus
• Licença compatível com Software Livre
• Linguagem de altíssimo nível (VHLL)
• Tipagem dinâmica
• Multiparadigma (OO, funcional e
procedural)
• Compilada + Interpretada
5. Versões de Python
• Python 2.7
• Mantido até que a versão 3 esteja estável
e com boa parte das bibliotecas portadas
• Python 3.2
• Evolução da linguagem
• Quebra compatibilidade retroativa
• Usaremos Python 2.7
• O Django (e muitas outras bibliotecas)
ainda não foi portado para o Python 3.0
6. Versões de Python
• Python 2.7
• Mantido até que a versão 3 esteja estável
e com boa parte das bibliotecas portadas
• Python 3.2
• Evolução da linguagem Trataremos as
diferenças sempre
• Quebra compatibilidade retroativa que necessário!
• Usaremos Python 2.7
• O Django (e muitas outras bibliotecas)
ainda não foi portado para o Python 3.0
7. Primeiro Programa
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# prog1.py - Primeiro programa
"""
Importa o módulo random e sorteia
um número inteiro entre 1 e 100
"""
import random
numero = random.randint(1, 100)
escolha, tentativas = 0, 0
while escolha != numero:
escolha = input("Escolha um número entre 1 e 100:")
tentativas += 1
if escolha < numero:
print u"O número", escolha, u"é menor que o sorteado."
elif escolha > numero:
print u"O número", escolha, u"é maior que o sorteado."
print u"Parabéns! Você acertou com", tentativas, "tentativas."
8. Primeiro Programa
Que interpretador
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
será usado?
# prog1.py - Primeiro programa
"""
Importa o módulo random e sorteia
um número inteiro entre 1 e 100
"""
import random
numero = random.randint(1, 100)
escolha, tentativas = 0, 0
while escolha != numero:
escolha = input("Escolha um número entre 1 e 100:")
tentativas += 1
if escolha < numero:
print u"O número", escolha, u"é menor que o sorteado."
elif escolha > numero:
print u"O número", escolha, u"é maior que o sorteado."
print u"Parabéns! Você acertou com", tentativas, "tentativas."
9. Primeiro Programa
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# prog1.py - Primeiro programa Qual conjunto de
""" caracteres (charset)
Importa o módulo random e sorteia será usado no
um número inteiro entre 1 e 100 arquivo?
"""
import random
numero = random.randint(1, 100)
escolha, tentativas = 0, 0
while escolha != numero:
escolha = input("Escolha um número entre 1 e 100:")
tentativas += 1
if escolha < numero:
print u"O número", escolha, u"é menor que o sorteado."
elif escolha > numero:
print u"O número", escolha, u"é maior que o sorteado."
print u"Parabéns! Você acertou com", tentativas, "tentativas."
10. Primeiro Programa
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# prog1.py - Primeiro programa
"""
Importa o módulo random e sorteia
um número inteiro entre 1 e 100
Usa-se “#” para
""" comentários em Python.
import random Também pode-se usar
numero = random.randint(1, 100) docstrings.
escolha, tentativas = 0, 0
while escolha != numero:
escolha = input("Escolha um número entre 1 e 100:")
tentativas += 1
if escolha < numero:
print u"O número", escolha, u"é menor que o sorteado."
elif escolha > numero:
print u"O número", escolha, u"é maior que o sorteado."
print u"Parabéns! Você acertou com", tentativas, "tentativas."
11. Primeiro Programa
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# prog1.py - Primeiro programa
"""
Importa o módulo random e sorteia
um número inteiro entre 1 e 100
"""
import random
numero = random.randint(1, 100) Python usa espaços
para delimitar os
escolha, tentativas = 0, 0 blocos de código
while escolha != numero:
escolha = input("Escolha um número entre 1 e 100:")
tentativas += 1
if escolha < numero:
print u"O número", escolha, u"é menor que o sorteado."
elif escolha > numero:
print u"O número", escolha, u"é maior que o sorteado."
print u"Parabéns! Você acertou com", tentativas, "tentativas."
15. O intepretador
Parâmetros
Parâmetro Descrição
Exibe uma relação de todos os parâmetros e uma breve descrição
-h de funcionalidades.
Liga a opção de otimização do código bytecode compilado. O arquivo
-O / -OO gerado passa a ter a extensão .pyo no lugar de .pyc.
-c cmds Executa os comandos cmds Python passados por parâmetro.
Desliga o buffer de saída para o terminal. Isso faz com que todo o
-u conteúdo impresso no terminal seja exibido imediatamente.
-m Executa o módulo como um programa
16. O intepretador
Variáveis de ambiente
Variável Descrição
Define o diretório inicial onde foi instalado o
Python. Python utilizará essa variável para montar o
caminho de diretórios que ele irá percorrer para
PYTHONHOME encontrar a sua biblioteca padrão. O caminho de
busca dessas bibliotecas, por padrão, será
PYTHONHOME/lib/python<versão>.
Define a ordem de procura de diretórios usados
para importar os módulos Python. Os diretórios
PYTHONPATH devem ser separados por ":". Diretórios incorretos
ou que não existam serão ignorados.
Nome de um arquivo com código Python que será
executado pelo interpretador antes de exibir o
PYTHONSTARTUP prompt do ambiente interativo. Neste arquivo você
pode definir algumas configurações para o
interpretador.
18. Características
• Um comando por linha
• Usar ; para mais de uma linha
• Usar para continuar em outra linha
• Bloco de comando por indentação
• Não misture Tabs e espaços
• Comentários
• Caracter # ou """strings multilinhas"""
• Diferencia maiúsculas de minúsculas
21. Lógica
• bool() >>> bool( 3 > 2 ), bool( 2 > 3)
•
(True, False)
True, False >>> bool( 3 <= 2 ), bool( 2 < 3)
• 0, 0.0, [], (), {}, "", set(), (False, True)
>>> bool( 3 == 2 ), bool( 2 == 3)
None, ... - Falso (False, False)
• ==, !=, >, >=, <, <=, is, is >>> bool( 0 ), not bool( None )
(False, True)
not, and, or, in e not in >>> bool( ["a"] ), not bool( "abc" )
• Usar "is None" para (True, False)
>>> bool( ('a','b') ) and
comparações com None not bool( "abc" )
• Prefira "if valor: ..." no False
lugar de "valor == True" >>> bool( ('a','b') ) or
not bool( "abc" )
ou "valor != 0". True
22. Palavras reservadas
3.0
and as assert break class
continue def del elif else
except exec False finally for
global if import in is
lambda None nonlocal not or
pass print raise return True
try while with yield
23. Identificadores
• Diferença entre maiúscula e minúsculas
• Nome deve iniciar com letra ou "_"
• Restante do nome pode conter letras,
números e "_"
• Não é permitido o uso de palavras
reservadas mas quando necessário
costuma-se usar um "_" no fim do nome
(ex. "from_")
24. Atribuição
• Atribuição simples (=) >>> a = "a"
• Atribuição "aumentada": >>> b = "b"
>>> c, d = "cd"
+=, -=, *=, /=, //=, **=, >>> e, f = "e", "f"
%=, |=, &=, ^=, <<= e >>> print a, b, c, d, e, f
a b c d e f
>>= >>> e, f = f, e
• Funcionam como nos >>> print a, b, c, d, e, f
a b c d f e
operadores já >>> a += b
explicados >>> print a
• Atribuição por tupla: ab
>>> a *= 5
• a, b = b, a >>> print a
• (a, b) = (b, a) ababababab
25. Referências
CONTADOR DE
REFERÊNCIAS
• p1 = PessoaFisica()
p1
31. Comando if/elif/else
• Comando de decisão.
• Executa o bloco de a = input("A:")
b = input("B:")
código em if ou elif caso
if a > b:
a condição for print "A é maior que B"
verdadeira. elif b > a:
• Se nenhuma condição print "B é maior que A"
else:
for verdadeira executa o print "A e B são iguais"
bloco else
• Expressão if usada entre
print ("A é maior" if a > b
else "A não é maior")
parênteses
32. Comando while
import sys, time
• Executa o bloco de d = raw_input("Despertar (HH:MM): ")
while time.strftime("%H:%M") != d:
código, em loop, try:
enquanto a condição for print "bbbbbtick",
sys.stdout.flush()
verdadeira time.sleep(0.5)
• A cláusula 'else' pode ser print "bbbbbtack",
sys.stdout.flush()
usada e será executada time.sleep(0.5)
caso o loop termine except KeyboardInterrupt:
break
normalmente (sem else:
break) print "nnTRIM!aaa"
sys.exit(0)
print "nnInterrompido!"
33. Comando for
import sys
for linha in sys.stdin:
• Itera sobre os elementos if not linha.strip(): continue
if "FIM" in linha: break
de um objeto (iterador, print "#", linha.rstrip()
seqüência, ...) else:
• Pode ser usado na print "# FIM DO ARQUIVO"
forma: 'for key, valor in >>> a = range(10)
>>> print a
dic.items(): ...' onde ele [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
faz atribuição por tupla >>> for i in a:
... print i,
...
0 1 2 3 4 5 6 7 8 9
34. Comando continue
import sys
for linha in sys.stdin:
if not linha.strip(): continue
if "FIM" in linha: break
• Força a iteração de um print "#", linha.rstrip()
else:
loop (e a verificação de print "# FIM DO ARQUIVO"
uma condição no caso >>> a = range(10)
do loop while) >>> print a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in a:
... print i,
...
0 1 2 3 4 5 6 7 8 9
35. Comando break
import sys
for linha in sys.stdin:
if not linha.strip(): continue
•
if "FIM" in linha: break
Interrompe o loop print "#", linha.rstrip()
• Um loop interrompido else:
print "# FIM DO ARQUIVO"
com break não executa
os comandos da cláusula >>> a = range(10)
>>> print a
'else' [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in a:
... print i,
...
0 1 2 3 4 5 6 7 8 9
36. Comando print
import sys
s1, s2 = "String1", "String2"
obj = object()
f = open("/tmp/out.txt", "w")
• Imprime informações na
print s1 # String1n
tela print s1, s2 # String1 String2
• Também pode enviar print s1,
print s2
# String1!
# String2
informações para um print obj # <object .. 0xXX>
arquivo print >>f, s1, s2 # >out.txt
print >>sys.stderr, "ERRO!"
f.close()
$ cat /tmp/out.txt
String1 String2
37. Comando pass
• Não executa nada class Abstrata:
• Necessário para definir def metodo_abstrato(self):
pass
blocos de código vazios
já que Python não utiliza try:
print 1 / 0
braces para delimitar except ZeroDivisionError:
blocos. pass # ignora exceção
38. Comando del
>>> a = [1,2,3]
>>> b = a
• Remove a referência a >>> a.append(4)
>>> a, b
um objeto ([1, 2, 3, 4], [1, 2, 3, 4])
• Remove elementos de >>> del b
>>> b
collections Traceback (most recent call last):
• Quando as referências File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
chegam a zero o objeto >>> a
entra na fila do garbage [1, 2, 3, 4]
>>> del a
collector que irá liberar >>> a, b
os recursos desse objeto Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
39. Comando exec
• Executa o código objeto
(compilado com a
função builtin compile())
>>> exec "a = 1"
ou a string com código >>> a
passada como 1
>>> exec "if a: print 'verdadeiro'"
parâmetro. verdadeiro
• Cuidado no uso desse
comando com dados
fornecidos pelo usuário
40. Comando assert
print "1 == 1?",
assert 1 == 1
• Verifica se uma condição print "sim."
é verdadeira. Caso try:
contrário levanta uma print "2 == 1?",
assert 2 == 1, "2 != 1"
AssertionError except AssertionError, ex:
• Removido nos print str(ex)
módulos .pyo $ python prog_assert.py
(executados com o 1 == 1? sim.
2 == 1? 2 != 1
parâmetro -O/-OO do $ python -O prog_assert.py
interpretador python) 1 == 1? sim.
2 == 1?
42. Tipos de dados
• Em Python, todos os tipos de dados são
objetos
• Quando fazemos algo como: int("0")
estamos, na verdade instanciando um
objeto do tipo int() passando "0" para seu
construtor.
51. Iteração
• for c in "abcde": ... – percorre todos os
caracteres
• for n in [ 1, 2, 3 ]: ... – percorre 1, 2 e 3
• for x in "": ... – não entra no loop
52. List Comprehension
seq = [ -1, 3, -5, 4, 8, 9 ]
# loop
res = []
for n in seq:
• Simplifica loops que if n > 0: res.append(n * n)
print res
percorrem seqüências
(conforme exemplo que # list comprehension
print [ x*x for x in seq if x > 0 ]
imprime o quadrado dos print [ x*x for x in seq ] # todos
números positivos)
# ['nome: fulano', 'idade: 35']
d = { 'nome': 'fulano',
'idade': '35' }
print [ "%s: %s" % (k,v) for
k,v in d.items() ]
53. Strings – str / unicode
• String – str(x)
• 'spam', "spam", """spam""" ou '''spam'''
• Unicode – unicode(x[, codificacao[, erros]])
• u'eggs', u"eggs", u"""eggs""" ou u'''eggs'''
• Regex strings – r"(w)"
• docstrings
• Seqüência de caracteres – Comporta-se
como uma seqüência imutável
• Slice, indexação, iterável
54. Strings – str / unicode
Caracteres especiais
Caracter Descrição
Newline será ignorado. Usado para continuar string em
<newline>
outra linha
Caracter de contra-barra
' Apóstrofo
" Aspas
a Bell (aviso sonoro)
b Backspace (volta cursor)
e Caracter de escape (Esc)
Caracter nulo. Não identifica término da string como
0
em C
t Tab horizontal
r Retorno de carro (Carriage Return)
n Avanço de linha
Especifica o caracter, em octal, por nome ou em
0xx N{nome} uxxxx
hexadecimal.
55. Strings – str / unicode
Códigos de formatação
%[(chave)][atributos][largura][.precisão]código
Código Descrição
%s String (método __str__())
%c Caracter
%d Decimal inteiro (trunca números reais)
%i Inteiro com sinal
%o Inteiro em base octal
Inteiro em base hexadecimal (letras em minúscula ou
%x %X
maiúscula)
%r String via método __repr__()
Notação científica: nunca, sempre, ou de acordo com
%f %e %g
expoente
%% Caracter %
68. Dicionários – dict
>>> 'c1' in d, 'c4' in d
(True, False)
>>> d.get('c4', 'v4')
'v4'
>>> 'c4' in d
False
>>> d.setdefault('c4', 'v4')
'v4'
>>> d['c4']
'v4'
>>> d.setdefault('c4', 'X')
'v4'
>>> d['c4']
'v4'
69. Dicionários – dict
notas = { print
"Graham Chapman": 5.5,
"John Cleese": 7.0, for nota in notas.values():
"Terry Gilliam": 4.5, print nota
"Terry Jones": 4.5,
"Eric Idle": 10, print
"Michael Palin": 3.5,
} for aluno, nota in notas.items():
print "Aluno: %-20s Nota: %4.1f" %
print "Conteudo dicionario:", (aluno, nota)
notas
print
for aluno in notas:
print aluno
70. Dicionários – dict
Conteudo do dicionario: {'Terry 4.5
Gilliam': 4.5, 'Eric Idle': 10, 10
'Graham Chapman': 5.5, 'Michael 5.5
Palin': 3.5, 'Terry Jones': 4.5, 3.5
'John Cleese': 7.0} 4.5
7.0
Terry Gilliam
Eric Idle Aluno: Terry Gilliam Nota: 4.5
Graham Chapman Aluno: Eric Idle Nota: 10.0
Michael Palin Aluno: Graham Chapman Nota: 5.5
Terry Jones Aluno: Michael Palin Nota: 3.5
John Cleese Aluno: Terry Jones Nota: 4.5
Aluno: John Cleese Nota: 7.0
71. Arquivos – file
• Arquivo – file(x) / open(x)
• file(nome, modo, buffer)
• file("/etc/passwd")
• Buffer (f.flush() para esvaziar):
• 0 – Sem buffer
• 1 – Com buffer
• +N – Tamanho do buffer
• Iterável linha-a-linha (for linha in arquivo: ...)
72. Arquivos – file
Modos
r Leitura
w Escrita (trunca)
a Escrita (adiciona)
b Binário
+ Leitura e Escrita
U Quebra de linha universal
Não pode ser usado
com w ou +
73. Arquivos – file
Para listagem
completa:
dir(file)
••
Métodos úteis:
f.close() – Fecha o arquivo
• f.flush() – Esvazia o buffer
• f.read(5) – 'linha'
• f.seek(0) – Posiciona no início do arquivo
• f.tell() – 0 (início do arquivo)
• f.write('linha final') – Escreve 'linha final'
• f.readline() – 'linha 1'
• f.readlines() – ['linha 1', 'linha 2', ...]
74. Arquivos – file
Conteúdo do arquivo:
linha 1
>>> f.tell()
linha 2
5L
linha 3
>>> f.readlines()
[' 1n', 'linha 2n', 'linha 3n',
>>> f = file("arq.txt", "a") 'linha 4n']
>>> f.write("linha 4n") >>> f.seek(0)
>>> f.close() >>> f.readline()
>>> f = file("arq.txt") 'linha 1n'
>>> for l in f: print l, >>> f.close()
...
linha 1
linha 2
linha 3
linha 4
>>> f.seek(0)
>>> f.read(5)
'linha'
75. Arquivos – file
>>> f.tell()
5L
>>> f.readlines()
[' 1n', 'linha 2n', 'linha 3n',
>>> f = file("arq.txt", "a") 'linha 4n']
>>> f.write("linha 4n") >>> f.seek(0)
>>> f.close() >>> f.readline()
>>> f = file("arq.txt") 'linha 1n'
>>> for l in f: print l, >>> f.close()
...
linha 1
linha 2
linha 3
linha 4
>>> f.seek(0)
>>> f.read(5)
'linha'
76. Iteradores – iter
• Iterador – iter(x)
• iter([1,2,3])
• Generators também implementam a
interface de iteradores
• Generator expressions são iguais à uma list
comprehension mas retorna um iterador no
lugar de uma lista
• Equivalente a list((x for x in seq))
77. Iteradores – iter
>>> a = [1, 2, 3] >>> r.next(), r.next(), r.next()
>>> i = iter(a) (0, 1, 2)
>>> type(i) >>> r.next()
<type 'listiterator'> Traceback (most recent call last):
>>> i.next(), i.next(), i.next() StopIteration
(1, 2, 3)
>>> i.next() >>> g = ( x for x in range(3) )
Traceback (most recent call last): >>> type(g)
StopIteration <type 'generator'>
>>> g.next(), g.next(), g.next()
>>> def f(n): (0, 1, 2)
... for i in range(n): >>> g.next()
... yield i Traceback (most recent call last):
... StopIteration
>>> r = f(3)
>>> type(r)
<type 'generator'>
78. Funções builtin
• abs(x) – Valor absoluto de um número
• divmod(x, y) – Divisão inteira e módulo
• round(x[, d]) – float com x arredondado d casas decimais
• all(iter) – True se todos os elementos forem verdadeiros
• any(iter) – True se um dos elementos for verdadeiro
• callable(obj) – True se o objeto for 'chamável'. Ex. obj()
• chr(ascii) – caracter com código ASCII informado
• unichr(código) – caracter unicode com código informado
• ord(caracter) – retorna o código ASCII/Unicode do caracter
• oct(i) – retorna o número i no formato octal
• dir([obj]) – mostra todos os identificadores membros de obj
• execfile(...) – executa o arquivo informado
• hash(obj) – retorna o hash do objeto
79. Funções builtin
• id(obj) – retorna o identificador do objeto
• len(obj) – retorna o tamanho do objeto
• raw_input(p) – solicita a entrada do usuário
• input(p) – solicita entrada do usuário e avalia com eval()
• globals() – dicionário com identificadores globais
• locals() – dicionário com identificadores locais
• vars([obj]) – identificadores do objeto
• max(s|x1, x2, ...) – maior valor da seqüência
• min(s|x1, x2, ...) – menor valor da seqüência
• range(s, e, i) – retorna uma seqüência de s até e intervalo i
• xrange(...) – mesmo que range() mas retorna um iterador
• enumerate(iter) – retorna tuplas (indice, elemento)
• open(...) – atalho para file()
80. Funções
• Existem 2 tipos de funções:
• Funções "convencionais" (def)
• Funções anônimas (lambdas)
• Todo objeto que implementa o método
__call__() é executável.
81. Chamando uma função
ret = funcao(
param1,
param2,
param3=valor3,
param4=valor4,
*seq_parametros,
**dic_parametros,
)
83. Parâmetros
• param – nome da variável local que receberá
o valor
• param=valor– mesmo que param mas
assume valor default caso não informado
• *params – lista dos parâmetros adicionais
• **dparams – dicionário com parâmetros
adicionais passados na forma param=valor
84. Demonstração
>>> def spam(x, y):
... return x ** y
...
>>> spam(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: spam() takes exactly 2 arguments (1 given)
>>> def spam(x, y=2):
... return x ** y
...
>>> spam(5)
25
>>> spam(5, 3)
125
87. Comando return
def potencia(x, y=2): return x ** y
def sem_return(): pass
d = {'txt': "Arquivo texto",
•
'html': "Arquivo HTML" }
Retorna o valor de uma
função m = {'txt': "text/plain",
• Pode retornar mais de 'html': "text/html" }
um valor ao mesmo def arquivo(ext):
return d[ext], m[ext]
tempo (tupla)
potencia(5) # 25
sem_return() # None
arquivo('txt') # ('Arquivo texto',
# 'text/plain')
89. Comando yield
• Espécie de iterador que db = (((2009, 01, 05), "rec1"),
:
permite o retorno à ((2009, 06, 05), "rec6"))
função geradora para
def busca(dt_ini, dt_fim):
que ela produza o novo for rec in db:
elemento da iteração if rec[0] >= dt_ini and
• Pode-se enviar rec[0] <= dt_fim:
msg = yield rec[1]
mensagens para a função if msg:
geradora via print rec[1], msg
método .send() b = busca((2009, 03, 01),
• Pode-se gerar uma (2009, 05, 01))
print b.next()
exceção na função com b.send("OK")
o método .throw()
90. Escopo
• Busca-se os identificadores no escopo
local, escopo das funções externas, escopo
global, e então no escopo __bultins__.
• Atribuições, por padrão, criam/alteram
identificadores do escopo local.
• O comando global faz com que os
identificadores sejam criados/alterados no
escopo global.
91. Comando global
def l():
x = "L"
print "l:", x # l(): L
def g():
• Diz que um identificador
global x
x = "G"
foi declarado no escopo print "g():", x # g(): G
global (e não no local) x = "X"
print "X1:", x # X1: X
l() # l(): L
print "X2:", x # X2: X
g() # g(): G
print "X3:", x # X3: G
92. Closures
def fib(n):
if n < 2: return 1
• Funções que constroem return fib(n-1) + fib(n-2)
funções def memoize(fn):
• Linguagem deve ter memo = {}
def memoizer(key):
funções como objetos if key not in memo:
de primeira classe memo[key] = fn(key)
• Linguagem deve permitir return memo[key]
return memoizer
acessar identificadores
de funções externas print fib(35) # muuuito mais lento
fib = memoize(fib)
print fib(35)
93. Decorators
• Sintaxe nova para
substituir as atribuições: def memoize(fn):
x = dec(x) memo = {}
def memoizer(key):
if not key in memo:
Com decorator Sem decorator memo[key] = fn(key)
@dec1 def f(x): return memo[key]
def f(x): return x * 2 return memoizer
return x * 2 f = dec1(f)
@memoize
@dec1 def f(x): def fib(n):
@dec2 return x * 2 if n < 2: return 1
def f(x): f = dec1(dec2(f)) return fib(n-1) + fib(n-2)
return x * 2
@dec1(arg) def f(x): print fib(35)
def f(x): return x * 2
return x * 2 f = dec1(arg)(f)
101. Classes
• Definida com o comando class
• Suporte a herança múltipla
• Método inicializador ("construtor"):
def __init__(self, ...): ...
• Instanciar: identificador = Pessoa()
102. Classes
Classe Instância
class Pessoa(object): class Pessoa(object):
atributo = 1 def __init__(self, attr):
Atributos self.attr = attr
class Pessoa(object): class Pessoa(object):
@classmethod def metodo(self, arg):
Métodos def metodo(cls, arg): pass
pass
class Pessoa(object):
Método @staticmethod
def metodo(arg):
estático pass
103. Objetos
class Pessoa(object):
class PJ(Pessoa):
def __init__(self, nome):
tabela_db = "pessoa_juridica"
self.nome = nome
def __init__(self, nome, cnpj):
super(PJ,
def valida(self):
self).__init__(nome)
raise NotImplementedError()
self.cnpj = ''.join(
d for d in cnpj if d.isdigit()
class PF(Pessoa):
)
tabela_db = "pessoa_fisica"
def valida(self):
def __init__(self, nome, cpf):
return len(self.cnpj) == 14
super(PF,
self).__init__(nome)
f = PF("Fulano", "123.456.789-01")
self.cpf = ''.join(
j = PJ("ACME", "12345678/0001-90")
d for d in cpf if d.isdigit()
)
print f.nome, f.cpf, f.valida()
def valida(self):
print j.nome, j.cnpj, j.valida()
return len(self.cpf) == 11
104. Segurança
• Todos os métodos e atributos são públicos
• Por convenção os métodos com nomes
iniciados por "_" são privados
• Adicionar "__" (duplo) renomeia o
identificador para "_Classe__metodo"
105. Propriedades
• Não é necessário getters e setters
• Acesse os atributos diretamente
• Para validar as entradas ou calcular as
saídas transforme-o em uma propriedade
• Use a função property()
109. Pacotes e Módulos
• Importar um módulo ou pacote:
• import pacote.modulo [as nome]
• Importa para o namespace do módulo
• from pacote.modulo import ident|*
• Importa para o namespace corrente
• Módulo é "executado" ao ser importado
• Se necessário módulo é recompilado para
bytecode (.pyc/.pyo)
110. Pacotes e Módulos
• Pacotes: diretórios com arquivo __init__.py
• Módulo:
• .py – módulo fonte
• .pyc / .pyo – bytecode (com e sem asserts)
• .pyd / .so – extensão em C para
Windows e Unix/Linux
• Módulos e pacotes são procurados no
PYTHONPATH:
• import sys; print sys.path
111. Pacotes e Módulos
• Atributos do módulo:
• __name__ – nome do módulo ou
__main__ se for executado diretamente
• __file__ – caminho completo para o
arquivo importado
• Para proteger código da execução durante
o import:
• if __name__ == "__main__": ...
116. Django
• Criado por Jacob Kaplan-Moss, Adrian
Holovaty e Simon Willison em 2003
• Criado como um CMS para a World Online
(divisão Web do Lawrence Journal-World
em Lawrence, Kansas)
• Tornado opensource logo após
• Framework Web ágil
• DRY - Don't Repeat Yourself
117. Componentes
• Object-relation Mapper – mapeador objeto-
relacional
• Template System – linguagem de templates
• URL dispatcher – processador de URLs
• Admin Interface – Interface de administração
• Internacionalização – regionalização
• Outros: gerador de formulário, serializador
de dados, autenticação e segurança, ...
118. MVC vs. MTV
• Pattern MVC
• Model – lógica de negócios
• View – camada(s) de visualização
• Controller – manipulação de Model
• Pattern MTV
• Model – mesmo que no MVC
• Template – mesmo que a View do MVC
• View – mesmo que a Controller do MVC
• A essência continua a mesma
119. Instalação
• Criar ambiente com virtualenv e ativá-lo
• Instalando "na mão":
• Baixar do site:
• http://djangoproject.com/download/
• Descompactar
• No diretório do Django rodar:
• python setup.py install
• Ou usando o setuptools com o comando:
• pip install django
121. O Projeto de aula
• Agenda de eventos
• Cadastro de evento com data/hora e
lugar
• Cadastro dos usuários que participarão
do evento
• Sistema de autenticação de usuário
122. Iniciando o projeto
• Utilitário django-admin.py
• Diversos comandos de gerenciamento
• django-admin.py help para listá-los
• django-admin.py help <comando> para
ajuda detalhada de cada comando
• Criando um projeto 'gerenciador':
• django-admin.py startproject gerenciador
123. Iniciando o projeto
$ cd aula
aula$ source bin/activate
(aula) aula$ django-admin.py startproject gerenciador
(aula) aula$ cd gerenciador
(aula) aula/gerenciador$ ls
__init__.py manage.py settings.py urls.py
(aula) aula/gerenciador$ chmod +x manage.py
(aula) aula/gerenciador$ ls
__init__.py manage.py* settings.py urls.py
124. Os arquivos do projeto
• __init__.py – arquivo vazio
• manage.py – utilitário parecido com o
django-admin.py. Colocado aqui por
comodidade.
• Dica: chmod +x manage.py
• settings.py – arquivo de configuração do
projeto
• urls.py – definições de URLs do projeto
125. Testando
• Django vem com um servidor Web próprio
para ser usado durante o desenvolvimento
• Recarga automática de módulos
• NÃO usar este servidor em produção
• O comando para iniciar o servidor é:
• ./manage.py runserver
• Aponte o navegador para o endereço:
• http://localhost:8000/
127. Gerenciando
manage.py
Comando Descrição
syncdb Cria tabelas no banco de dados
dumpdata --format F [aplicação] Descarrega dados da aplicação em XML ou JSON
loaddata fixture Carrega dados no banco de dados
shell Interpretador Python com modelos de dados
createsuperuser --username --email Cria um usuário administrador
runserver [endereço:porta] Inicia o servidor Web de desenvolvimento
startapp [aplicação] Cria uma nova aplicação no projeto
128. Aplicações
• Aplicações Django são módulos com
funcionalidades que podem ser
reaproveitadas em vários projetos
• Exemplos:
• Sistema de comentários
• blog
• tags
• autenticações alternativas
• etc.
132. Dizendo "Olá"
from django.conf.urls.defaults import * Arquivo:
# Uncomment the next two lines to enable the admin: urls.py
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^gerenciador/', include('gerenciador.foo.urls')),
(r'^$', 'agenda.views.index'),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
)
134. Dizendo "Olá"
(aula) aula/gerenciador $ ./manage.py runserver
Validating models...
0 errors found
Django, using settings 'gerenciador.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
136. Models
Arquivo:
agenda/
models.py
from django.db import models
class ItemAgenda(models.Model):
data = models.DateField()
hora = models.TimeField() ItemAgenda
titulo = models.CharField(max_length=100)
descricao = models.TextField() data: Date
hora: Time
titulo: Varchar(100)
descricao: Text
138. Configurando
• Arquivo de configuração: settings.py
• Já vem preenchido
• Arquivo auto-explicativo
• Repleto de comentários e configurações
default mais comuns
• •Informações sobre todas as opções em:
http://docs.djangoproject.com/en/dev/ref/settings/#ref-settings
139. Configurando
• Configuração da conexão com o Banco de
Dados para o ORM
• Até o momento suporta os bancos:
SQLite3, MySQL, PostgreSQL ou Oracle.
• Usaremos o SQLite3
• Recomendado usar outro banco de dados
em ambientes de produção
143. Gerenciando dados
(aula) aula/gerenciador$ ./manage.py syncdb
:
Creating table agenda_itemagenda
You just installed Django's auth system, which means you don't have any
superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'osantana'): dead_parrot
E-mail address: dead_parrot@montypython.co.uk
Password: XXXXX
Password (again): XXXXX
Superuser created successfully.
:
Installing index for agenda.ItemAgenda model
144. Gerenciando dados
(aula) aula/gerenciador$ sqlite3 gerenciador.db
SQLite
Enter ".help" for instructions
sqlite> .schema agenda_itemagenda
CREATE TABLE "agenda_itemagenda" (
"id" integer NOT NULL PRIMARY KEY,
"data" date NOT NULL,
"hora" time NOT NULL,
"titulo" varchar(100) NOT NULL,
"descricao" text NOT NULL,
);
147. Linguagem de Template
• A linguagem de templates do Django é
composta de tags e filtros
• As tags (com comandos) devem ficar entre
as marcações {% e %}
• Para imprimir o resultado de uma
expressão podemos usar os marcadores
{{ e }}
148. Linguagem de Template
• A linguagem é propositadamente
construída para desetimular a inclusão de
lógica dentro dos templates
• O conceito de herança de templates
permite reaproveitar trechos de outros
templates da mesma maneira que a herança
o faz no paradigma da programação OO
• É possível criar tags e filtros personalizadas
para extender a linguagem de template
149. Mostrando dados
Arquivo:
templates/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
base.html
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
{% block cabecalho %}
<title>Agenda</title>
{% endblock %}
</head>
<body>
{% block corpo %}
<!-- body -->
{% endblock %}
</body>
</html>
150. Mostrando dados
{% extends 'base.html' %}
Arquivo:
templates/
{% block corpo %} lista.html
<a href="/adiciona/">Adicionar novo item</a>
<ul>
{% for item in lista_itens %}
<li>
<a href="/item/{{ item.id }}">
{{ item.data|date:'d/m/Y' }} - {{ item.titulo }}</a>
</li>
{% empty %}
<li>Sem itens na lista</li>
{% endfor %}
</ul>
{% endblock %}
155. Formulários
• Uma das formas mais usadas para interação
dos usuários com a aplicação
• Django oferece classes geradoras de
formulários: forms.Form e
forms.ModelForm
• A impressão dos campos de um formulário
podem ser feitas com uma instrução no
template: form.as_p, form.as_li ou
form.as_table
156. Formulários
• Campos
• Fazem o mapeamento do formulário
recebido via POST já convertendo o
valor recebido para um tipo Python
• Widget
•O visual que o campo terá na página
HTML (ex. campo data será um campo
texto ou um calendário para escolha da
data)
158. ModelForm
Arquivo:
agenda/
forms.py
from django import forms
from agenda.models import ItemAgenda
class FormItemAgenda(forms.ModelForm):
data = forms.DateField(
widget=forms.DateInput(format='%d/%m/%Y'),
input_formats=['%d/%m/%Y', '%d/%m/%y'])
class Meta:
model = ItemAgenda
fields = ('titulo', 'data', 'hora', 'descricao')
160. Formulários
Arquivo:
urls.py
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^gerenciador/', include('gerenciador.foo.urls')),
(r'^$', 'agenda.views.index'),
(r'^adiciona/$', 'agenda.views.adiciona'),
)
161. ModelForm
Arquivo:
agenda/
from django.shortcuts import render, redirect
views.py
from forms import FormItemAgenda
def adiciona(request):
if request.method == 'POST': # Formulário enviado
form = FormItemAgenda(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect("/")
else:
# Exibe formulário em branco
form = FormItemAgenda()
return render(request, "adiciona.html", {'form': form})
162. ModelForm
Arquivo:
agenda/
views.py
from django.shortcuts import render, redirect
from forms import FormItemAgenda
def adiciona(request):
form = FormItemAgenda(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect("/")
Versão
return render(request, "adiciona.html", {'form': form})
aprimorada
172. Segurança
• Aplicação: django.contrib.auth
• Requer aplicações:
• django.contrib.sessions
• django.contrib.contenttypes
• Models:
• User
• Group
• Permission
• Sistema de perfil de usuário
173. Segurança
Arquivo:
agenda/
models.py
from django.db import models
from django.contrib.auth.models import User
class ItemAgenda(models.Model):
data = models.DateField()
ItemAgenda
hora = models.TimeField()
titulo = models.CharField(max_length=100)
data: Date
descricao = models.TextField() hora: Time
usuario = models.ForeignKey(User) titulo: Varchar(100)
descricao: Blob
User (FK)usuario: User
174. Segurança
(aula) gerenciador$ rm gerenciador.db
(aula) gerenciador$ ./manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
:
:
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'osantana'): dead_parrot
E-mail address: dead_parrot@montypython.co.uk
Password: XXXXX
Password (again): XXXXX
Superuser created successfully.
:
175. Segurança
Arquivo:
agenda/
# -*- encoding: utf-8 -*-
views.py
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from models import ItemAgenda
from forms import FormItemAgenda
@login_required
def lista(request):
lista_itens = ItemAgenda.objects.filter(usuario=request.user)
return render(request, "lista.html", {'lista_itens': lista_itens})
176. Segurança
Arquivo:
agenda/
views.py
@login_required
def adiciona(request):
form = FormItemAgenda(request.POST or None,
request.FILES or None)
if form.is_valid():
item = form.save(commit=False)
item.usuario = request.user
item.save()
return redirect("/")
return render(request, "adiciona.html", {'form': form})
177. Segurança
Arquivo:
agenda/
views.py
@login_required
def item(request, nr_item):
item = get_object_or_404(ItemAgenda, usuario=request.user, pk=nr_item)
form = FormItemAgenda(request.POST or None,
request.FILES or None, instance=item)
if form.is_valid():
form.save()
return redirect("/")
return render(request, "item.html", {'form': form})
193. Relacionamentos
Arquivo:
agenda/
models.py
from django.db import models
from django.contrib.auth.models import User
class ItemAgenda(models.Model):
data = models.DateField()
hora = models.TimeField()
titulo = models.CharField(max_length=100)
descricao = models.TextField()
usuario = models.ForeignKey(User)
participantes = models.ManyToManyField(User,
related_name='item_participantes')
194. Relacionamentos
from django import forms
Arquivo:
from django.contrib.auth.models import User agenda/
from agenda.models import ItemAgenda forms.py
class ModelMultipleUserField(forms.ModelMultipleChoiceField):
def label_from_instance(self, user):
return u"%s (%s)" % (user.get_full_name(), user)
class FormItemAgenda(forms.ModelForm):
data = forms.DateField(
widget=forms.DateInput(format='%d/%m/%Y'),
input_formats=['%d/%m/%Y', '%d/%m/%y'])
participantes = ModelMultipleUserField(queryset=User.objects.all())
class Meta:
model = ItemAgenda
fields = ('titulo', 'data', 'hora', 'descricao', 'participantes')