首页 > 程序开发 > Web开发 > Python >

简明Python教程 1)介绍 2)安装 3)开始 4)

2013-11-21

前言有两种方式构建软件设计: 一种是把软件做的很简单以至于明显找不到缺陷; 另一种是把它做的很复杂以至于找不到明显的缺陷 --C A R Hoare获得人生中成功需要的专注与坚持不懈多过天才与机会 --C W W

前言
有两种方式构建软件设计: 一种是把软件做的很简单以至于明显找不到缺陷; 另一种是把它做的很复杂以至于找不到明显的缺陷. --C.A.R. Hoare
获得人生中成功需要的专注与坚持不懈多过天才与机会. --C.W. Wendte
第1章 介绍
简介
Python是简单又功能强大的编程语言, 注重的是如何解决问题而不是编程语言的语法和结构;
官方介绍: Python是一种简单易学, 功能强大的编程语言, 它有高效率的高层数据结构, 简单而有效地实现面向对象编程; Python简洁的语法和对动态输入的支持, 在加上解释性语言的本质, 使得它在大多数平台上的许多领域都是一个理想的脚本语言, 特别适用于快速的应用程序开发;
特色
简单, 易学;
免费, 开源; FLOSS(Free/Libre and Open Source Software 自由/开放源码软件)之一; 你可以自由发布这个软件的拷贝, 阅读源码, 做改动, 把它的一部分用于新的自由软件中; FLOSS是基于一个团队分享知识的概念;
高层语言; 无需考虑管理内存一类的底层细节;
可移植性; Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acom RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE, PocketPC;
解释性;
-编译性语言比如C或C++写的程序可以从源文件转换到计算机语言(二进制代码); 这个过程通过编译器和不同的标记选项完成, 当你运行程序的时候, 链接/转载器软件把程序从硬盘复制到内存中运行;
-而Python语言写的程序不需要编译成二进制代码; 直接从源代码运行程序; 在计算机内部, Python解释器把源代码转换成称为字节码的中间形式, 然后再翻译成计算机使用的机器语言并运行; 不在需要担心如何编译程序, 如何确保链接转载正确的库等等;
面向对象; Python既支持面向过程也支持面向对象的编程;
可扩展性; 如果需要把关键代码运行得更快或某些算法不公开, 可以把部分程序用C或C++编写, 然后在Python程序中使用;
可嵌入性; 可以把Python嵌入C/C++程序, 向程序的用户提供脚本功能;
丰富的库; 强大的标准库, 包括正则表达式, 文档生成, 单元测试, 线程, 数据库, 网页浏览器, CGI, FTP, 电邮, XML, XML-RPC, HTML, WAV文件, 密码系统, GUI, Tk和其他系统有关的操作; 还有很多其他的库wxPython, Twisted, Python图像库...;
Perl
Perl适合小规模程序; Python相比Perl更简单清晰, 易于编写, 易懂易维护; Perl的优势是历史悠久, 拥有庞大的CPAN库--综合Perl存档网络;
第2章 安装
Linux和BSD
$ python -V
Python 2.3.4
>输出安装版本, 如果输出为: bash: python: command not found, 代表还没安装python;
Terminal终端, Alt+F2, 输入gnome-terminal; 安装python3包; Ubuntu: sudo apt-get install python3;
Windows
设置环境path变量;
源代码以及安装: http://www.python.org/download/
Mac OS X
Command+Space打开终端(Spoylight), 输入Terminal回车;
安装 homebrew http://brew.sh/: ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"; 然后按照python3: brew install python3; 运行 python3 -v 确保安装成功;
第3章 开始步骤
两种使用Python运行程序的方式--交互式的带提示符的解释器或使用源文件;
命令行输入python启动解释器;
退出python提示符: linux shell -- Ctrl+D; windows cmd-- Ctrl+Z;
exit()或quit();
选一个编辑器
基本要求是语法高亮功能; IDLE, VIM, Emacs
refer to: Python编辑器列表 支持Python的IDE列表
推荐Komodo Edit http://www.activestate.com/komodo-edit/downloads Vim http://www.vim.org/ Emacs http://www.gnu.org/software/emacs/
Vim用户: 使Vim成为强大的Python IDE (http://blog.sontek.net/blog/detail/turning-vim-into-a-modern-python-ide)
jedi-vim插件 https://github.com/davidhalter/jedi-vim dotvim配置 https://github.com/swaroopch/dotvim
Emacs用户: 使Emacs成为强大的Python IDE http://pedrokroger.net/2010/07/configuring-emacs-as-a-python-ide-2/ BG的dotemacs配置 https://github.com/ghoseb/dotemacs
使用源文件
#!/usr/bin/python
# Filename : helloworld.py
print 'Hello World'
>打开命令行: python helloworld.py
注释
#代表注释; 第一行为特殊形式的注释, 称为 组织行 -- 源文件的头两个字符是#!, 后面跟着一个程序; 这行告诉你的Linux/Unix系统执行程序的时候, 应该运行哪个解释器;
Note 合理使用注释来解释一些重要细节, 有助于读代码时理解程序功能; 也能帮助你回忆自己写的代码的作用;
python2和python3的print函数接口变化: 3需要加上括号:
print "Pyhon 2 can use print string without ()";
print("Python3, print must use () to output string");
Note python是大小写敏感的;
可执行的python程序
首行代码指定执行命令, hashbang行代码;
#!/usr/bin/env python3
For Linux/Unix:
$ chmod a+x helloworld.py
$ ./helloworld.py
Hello World
>chmod命令改变文件的模式, 给系统所有用户这个文件的执行许可; ./表示当前目录;
>源文件第一行指定了解释器, 所以这里直接运行./helloworld也可以工作;
如果希望程序能从任何位置运行, 那需要把程序保存在PATH环境变量中的目录之一; 运行程序时, 系统就会查找PATH中的目录来运行程序;
$ echo $PATH
/opt/mono/bin/:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp helloworld.py /home/swaroop/bin/helloworld
$ helloworld
Hello World
>echo命令显示PATH变量, $作为变量名前缀表示需要这个变量的值; swaroop是系统中的用户名;
可以把选择的目录添加到PATH中去: e.g. PATH=$PATH:/home/swaroop/mydir, 这样可以在任何时间任何目录下运行你的程序; 就像创建了自己的指令, 比如cd或其他命令行指令一样;
Note 对于python来说, 程序, 脚本或软件都是指同一个东西;
获取帮助
help(str) -- 显示str类的帮助; help()进入帮助模式; q退出帮助;
在Linux使用env命令设置PYTHONDOCS变量:
$ env PYTHONDOCS=/usr/share/doc/python-docs-2.3.4/html/ python
Python 2.3.4 (#1, Oct 26 2004, 16:42:40)
[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help('print')
第4章 基本概念
字面意义上的常量
数字: 1, 2.33, 9.25e-3; 字符串: 'good', "It's a string!"; 他们被称为字面意义上的; 因为他们具备字面的意义; 作为常量不能改变他们的值;
数字
4种类型: 整数; 长整数[py3取消了long]; 浮点数; 复数;
e.g. - 2是整数;
- 长整数是比较大的整数;
- 3.23和5.2E-4是浮点数; E代表10的幂; 这里表示5.2乘以10的负四次方;
- (-5+4j)和(2.3-4.5j)是复数;
字符串
字符串是字符的序列; 基本上是一组单词;
使用字符串: 1) 单引号 ' ; 2) 双引号 " ; 3) 三引号 """或''' ;
'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''
>三引号可以指示多行字符串; 可以在三引号内自由使用双引号或单引号;
转义符
想要在字符串内包含一个单引号, 需要通过转义符来指明单引号: \ ;
e.g. 'What's your name?' -> 'What\'s your name?' 或者使用双引号包括单引号: "What's your name?", 当然, 想使用双引号的使用也需要转义; 使用 \\ 来表示反斜杠;
Note 在一个字符串中, 行末的反斜杠表示字符串在下一行继续, 而不是开始一个新的行;
"This is the first sentence.\
This is the second sentence."
#等价于
"This is the first sentence. This is the second sentence."
自然字符串
如果想要指示某些不需要如转义符那样特别处理的字符, 就需要指定自然字符串: 在字符串加上前缀r或者R;
r"Newlines are indicated by \n"
Unicode字符串
Unicode是书写国际文本的标准方法; 如果想使用北印度语或阿拉伯语写文本, 需要一个支持Unicode的编辑器;
python允许处理Unicode文本: 在字符串前加上前缀u或U;
u"This is a Unicode string."
字符串是不可变的 [const]
按字面意义级连字符串
如果字符串按字面意义相邻而放, 会被python自动级连; e.g. 'What\'s ' 'your name?' ---> "What's your name?"
Note
To C/C++: python没有专门的char数据类型;
To Perl/PHP: 单引号和双引号字符串是完全相同的;
To 正则表达式: 一定要用自然字符串处理正则表达式; 否则会需要使用很多反斜杠; e.g. 后向引用符 '\\1'或'\1' [使用自然字符串 r'strings']
格式方法
format()
age = 20
name = 'Swaroop'
print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
>字符串使用特定格式, 调用format方法, 来替代使用适当参数的格式;
>{0},{1}对应变量name, age; python从0开始计数;
Note 可以使用字符串的连接, name+'is'+str(age)+'years old'来实现[或者s%...d%], 但这容易出错; 通过format方法自动转换字符串, 可以灵活改变, 无需修改字符串;
Note 这些数字/索引都是可选的;
age = 20
name = 'Swaroop'
print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that python?'.format(name))
>和之前的程序有相同的作用;
python在format方法中用每个参数替代的规格:
#decimal (.) precision of 3 for float '0.333'
print('{0:.3}'.format(1/3))
#fill with underscores (_) with the text centered, (^) to 11 width '___hello___'
print('{0:_^11}'.format('hello'))
#keyword-based 'Swaroop wrote A Byte of Python'
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
变量
值可变, 变量用来存储信息, 并且可以操作; 变量只是计算机中存储信息的一部分内存; 变量需要有个名字;
标识符的命名
变量是标识符的一种; 标识符是用来标识某样东西的名字;
- 第一个字符必须是字母表中的字母(大写或小写)ASCII或Unicode字符, 或者下划线 _ ;
- 其他部分可以由字母, 下划线或数字(0-9)组成;
- 大小写敏感;
e.g. 有效标识符: i, __my_name1_; 无效标识符: 2things, this is spaced out; my-name;
数据类型
基本类型是数字和字符串, 使用类创建自定义类型;
对象
python把程序中用到的任何东西都称为对象;
To C/C++: 使用变量时只需要赋值, 不需要声明或定义数据类型; e.g. i = 5;
逻辑行与物理行
物理行是编写程序时所见的一行; 逻辑行是python理解的单个语句; python假定每个物理行对应一个逻辑行;
使用分号表示一个逻辑行/语句的结束;
i = 5; print i;
建议在每个物理行只写一句逻辑行; 仅仅当逻辑行太长的时候, 在多个物理行写一个逻辑行; 避免使用分号, 使代码更加易读;
显式的行连接使用 \ ;
s = 'This is a string. \
This continues the string.'
print s
>输出This is a string. This continues the string.
print \
i
>和 print i 有相同功能;
暗示的行连接
当逻辑行中使用了圆括号, 方括号或波形/大括号时, 可以不需要使用反斜杠; [解释器会寻找结束符]
[使用三引号 """ """可以保留多行格式]
s = '''这是一个多行字符串。
这是第2行。'''
print(s)
缩进
行首的空白称为缩进; 用来决定逻辑行的缩进层次, 从而决定语句的分组;
同一层次的语句必须有相同缩进, 每一组这样的语句称为一个块block;
i = 5
print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i
>第二行的行首多了一个空格; python会提示语法错误; 你不能随意地开始新的语句块;
Note 不要混合使用制表符和空格来缩进, 因为在不同平台下这样无法正常工作; 建议在每个缩进层次使用单个制表符或2/4个空格; 选择一种风格, 然后一贯地使用它, 只使用一种风格;
Note To 静态语言程序员 python总是以缩进作为块分隔, 从来不用花括号, 参见 from __future__ import braces;
---TBC---YC
相关文章
最新文章
热点推荐