{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "toc": "true" }, "source": [ "# Table of Contents\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 初识 Python\n", "\n", "Python(英国发音:/paθn/ 美国发音:/paθɑn/),是一种面向对象、上手简单的计算机程序语言。\n", "\n", "Python的创始人为[吉多·范罗苏姆](https://zh.wikipedia.org/wiki/%E5%90%89%E5%A4%9A%C2%B7%E8%8C%83%E7%BD%97%E8%8B%8F%E5%A7%86)(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Python之禅\n", "\n", "那么接下来有请 “Python” introduce yourself : " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "source": [ "import this" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "1. 优美胜于丑陋(Python 以编写优美的代码为目标)\n", "\n", "2. 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)\n", "\n", "3. 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)\n", "\n", "4. 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁,多加注释!)\n", "\n", "5. 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)\n", "\n", "6. 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题,一行代码不能超过80个字符,你可以换行或起一个新的逻辑来写)\n", "\n", "7. 可读性很重要(优美的代码是可读的)\n", "\n", "8. 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上),觉对不允许特列必须按照这个规则\n", "\n", "9. 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)\n", "\n", "10. 当存在多种可能,不要尝试去猜测!\n", "\n", "11. 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)\n", "\n", "12. 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )\n", "\n", "13. 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)\n", "\n", "14. 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)\n", "\n", "15. 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "[快速开始](#安装Python)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Python 能做什么\n", "\n", "\n", "**Web程序**\n", "\n", "Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。使用Python语言编写的Gunicorn作为Web服务器,也能够运行Python语言编写的Web程序。Python定义了WSGI(Web Server Gateway Interface)标准应用接口来协调Http服务器与基于Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以让程序员轻松地开发和管理复杂的Web程序。\n", "\n", "Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络蠕虫。第三方库Twisted支持异步在线编写程序和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。另有gevent这个流行的第三方库,同样能够支持高性能高并发的网络开发。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**GUI开发**\n", "\n", "Python本身包含的Tkinter库能够支持简单的GUI(Graphical User Interface)开发。但是越来越多的Python程序员选择wxPython或者PyQt等GUI包来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。通过PyInstaller还能将程序发布为独立的安装程序包。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**操作系统**\n", "\n", "在很多操作系统里,Python是标准的系统组件。大多数Linux发布版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端机下直接运行Python。有一些Linux发布版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器、Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用作业系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**爬虫**\n", "\n", "相信有一部分人听说Python是和爬虫有关,Python访问网站requests库很简单方便,还有很多解析网页的第三方库:Beautifulsoup(解析html代码),Pyquery(像Jquery那样操作),Selenium(用一个浏览器真实浏览器模拟用户所有操作)。以及功能强大的框架:Scrapy,Pyspider。使用进程,线程,协程提高爬虫效率也很简单。这样只需要花很少的时间就能写一个效率不错而且满足你需求的爬虫来获取你想要的数据。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**其他**\n", "\n", "NumPy、SciPy、Matplotlib 可以让Python程序员编写科学计算程序。有些公司会使用Scons代替make构建C++程序。\n", "\n", "很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。很多游戏,如EVE Online使用Python来处理游戏中繁多的逻辑。\n", "\n", "YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。OLPC的作业系统Sugar项目的大多数软件都是使用Python编写" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**所以他的应用范围大概分为:**\n", "\n", "数据分析\n", "\n", "系统编程\n", "\n", "组件集成\n", "\n", "网络服务\n", "\n", "图像处理\n", "\n", "数值计算和科学计算" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 你需要知道的那些事\n", "\n", "### 语法要求\n", " \n", "- 同一级别的代码缩进必须一致!(并且建议所有级别的代码的缩进建议是相同的--必须,开发规范里建议4个空格)建议不要用table因为如果想把代码在windows上运行,linux和windows的table的定义不同!!!!\n", "\n", "- 好的编辑器能提高开发代码的效率,熟练使用编辑器也是一项很牛逼得技能!\n", "\n", "- 所有python,第一行一定要顶到行头! 同一级别的新的都要顶到行头。\n", "\n", "### 书写简明\n", "\n", "- 一行代码不要超过80个字符" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 变量\n", "\n", "- 变量名必须要以字母开头,不能以数字或者特殊字符开头。\n", "- 不能使用特殊字符,标识符名称的其他部分可以由字母(大写或小写)、下划线“-”或数字(0-9)组成。\n", "- 变量命名规则分别有:驼峰命名规则和单词 + 下划线(单词全小写 + 下划线,不要突然一个字母大写一个字母小些,要么只是首字母大写 )有效得例子: UserName ,user_name ;无效的例子: 2things、this is spaced out和userna$me。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "标识符名称是对大小写敏感的。例如,myname和myName不是一个变量,而是分别的两个变量,不要这样写,同样得名称以这种不同形式得样子出现。注意前者中的小写n和后者中的大写N。 \n", "\n", "常量和全局变量统一全部用大写字母 例:NAME (都统一写在代码得最前面)\n", "\n", " 常量:默认定义数值不变(不要去修改)\n", " 全局变量:数值会变动的量 (定义在代码块得最外面得变量,整个程序各处都能使用)\n", "\n", "**在python中没有常量的,所有的数值都可以改变,但是他依然有个常量的概念,但是是人为的你不去改变他,定义一个常量应该用大写的形式。**\n", "\n", "AGE = 10 这个就是常量,他是大写的!是约定俗成的。但是他是可以改的!\n", "\n", "name = 'Tim Luo' 这个是变量" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 编码\n", "\n", "Python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)\n", "\n", "ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号\n", "\n", "显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode\n", "\n", "Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,\n", "注:此处说的的是最少2个字节,可能更多\n", "\n", "UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...\n", "\n", "所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),所以如果不指定编码类型,如果有中文就会报错。(Python3 已经默认采用 UTF-8编码,所以Python3中不在有中文编码报错的问题了)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "### pyc文件\n", "\n", "执行Python文件后会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。\n", "\n", "ps:代码经过编译可以产生字节码(不是机器码);字节码通过反编译也可以得到代码。(任何字节码通过反编译都可以得到代码)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### python执行过程\n", "\n", "1. python 把代码读到内存 \n", "2. 词法语法分析\n", "3. 放到编译器\n", "4. 生成字节码\n", "5. 执行字节码\n", "6. 生成机器码\n", "7. CPU执行机器码" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## 安装Python\n", "\n", "Linux 操作系统原生自带Python2。这里将安装Python3,同时不影响系统的情况下额外安装 **Python3** 的开发环境,两个python环境共存。\n", "\n", "**Python 编译需要安装的包**\n", "- gcc zlib zlib-devel openssl openssl-devel\n", "\n", "**RHEL系列执行安装**\n", "\n", "- yum install gcc zlib zlib-devel openssl openssl-devel\n", "\n", "**Ubuntu系列执行安装**\n", "- apt-get install gcc zlib zlib-devel openssl openssl-devel\n", "\n", "[点击前往下载Python](https://www.python.org/downloads/)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# 安装Python3\n", "tar zxvf Python-3.5.4.tgz\n", "cd Python-3.5.4\n", "./configure --prefix=/usr/local/python3\n", "make\n", "make install\n", "\n", "# 添加Python3 到系统环境变量\n", "sed -i '$a export PATH=$PATH:/usr/local/python3/bin/' /etc/profile\n", "source /etc/profile" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**安装pip:**\n", "\n", "Python有两个著名的包管理工具easy_install和[pip](https://pypi.python.org/pypi/pip),通过使用包管理工具很够很方便的安装和管理Python软件包([PyPI](https://pypi.python.org))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py\n", "python3 get-pip.py" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## 开始Python" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World!\n" ] } ], "source": [ "print(\"Hello World!\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" }, "toc": { "colors": { "hover_highlight": "#DAA520", "navigate_num": "#000000", "navigate_text": "#333333", "running_highlight": "#FF0000", "selected_highlight": "#FFD700", "sidebar_border": "#EEEEEE", "wrapper_background": "#FFFFFF" }, "moveMenuLeft": true, "nav_menu": { "height": "138px", "width": "252px" }, "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 4, "toc_cell": true, "toc_section_display": "block", "toc_window_display": false, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 2 }