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

27 篇文章 0 订阅

前言

有两种方式构建软件设计: 一种是把软件做的很简单以至于明显找不到缺陷; 另一种是把它做的很复杂以至于找不到明显的缺陷. --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和其他系统有关的操作; 还有很多其他的库wxPythonTwistedPython图像库...;

Perl

Perl适合小规模程序; Python相比Perl更简单清晰, 易于编写, 易懂易维护; Perl的优势是历史悠久, 拥有庞大的CPAN库--综合Perl存档网络; 


第2章 安装

Linux和BSD

1
2
$ 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


使用源文件

1
2
3
#!/usr/bin/python
# Filename : helloworld.py
print  'Hello World'

>打开命令行: python helloworld.py

注释

#代表注释; 第一行为特殊形式的注释, 称为 组织行 -- 源文件的头两个字符是#!, 后面跟着一个程序; 这行告诉你的Linux/Unix系统执行程序的时候, 应该运行哪个解释器;

Note 合理使用注释来解释一些重要细节, 有助于读代码时理解程序功能; 也能帮助你回忆自己写的代码的作用;

python2和python3的print函数接口变化: 3需要加上括号:

1
2
print  "Pyhon 2 can use print string without ()" ;
print ( "Python3, print must use () to output string" );

Note python是大小写敏感的;


可执行的python程序

首行代码指定执行命令, hashbang行代码;

1
#!/usr/bin/env python3

For Linux/Unix:

1
2
3
chmod  a+x helloworld.py
$ . /helloworld .py
Hello World

>chmod命令改变文件的模式, 给系统所有用户这个文件的执行许可; ./表示当前目录;

>源文件第一行指定了解释器, 所以这里直接运行./helloworld也可以工作;

如果希望程序能从任何位置运行, 那需要把程序保存在PATH环境变量中的目录之一; 运行程序时, 系统就会查找PATH中的目录来运行程序;

1
2
3
4
5
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变量:

1
2
3
4
5
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) 三引号 """或''' ;

1
2
3
4
5
'''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 在一个字符串中, 行末的反斜杠表示字符串在下一行继续, 而不是开始一个新的行;

1
2
3
4
"This  is  the first sentence.\
This  is  the second sentence."
#等价于
"This is the first sentence. This is the second sentence."

自然字符串

如果想要指示某些不需要如转义符那样特别处理的字符, 就需要指定自然字符串: 在字符串加上前缀r或者R; 

1
r "Newlines are indicated by \n"

Unicode字符串

Unicode是书写国际文本的标准方法; 如果想使用北印度语或阿拉伯语写文本, 需要一个支持Unicode的编辑器;

python允许处理Unicode文本: 在字符串前加上前缀u或U;

1
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()

1
2
3
4
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 这些数字/索引都是可选的;

1
2
3
4
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方法中用每个参数替代的规格:

1
2
3
4
5
6
#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假定每个物理行对应一个逻辑行;

使用分号表示一个逻辑行/语句的结束;

1
=  5 print  i;

建议在每个物理行只写一句逻辑行; 仅仅当逻辑行太长的时候, 在多个物理行写一个逻辑行; 避免使用分号, 使代码更加易读;

显式的行连接使用 \ ; 

1
2
3
=  'This  is  a string. \
This continues the string.'
print  s

>输出This is a string. This continues the string.

1
2
print  \
i

>和 print i 有相同功能;

暗示的行连接 

当逻辑行中使用了圆括号, 方括号或波形/大括号时, 可以不需要使用反斜杠; [解释器会寻找结束符]

[使用三引号 """ """可以保留多行格式]

1
2
3
=  '''这是一个多行字符串。
这是第2行。'''
print (s)


缩进

行首的空白称为缩进; 用来决定逻辑行的缩进层次, 从而决定语句的分组;

同一层次的语句必须有相同缩进, 每一组这样的语句称为一个块block;

Note 错误的缩进会引发错误; unexpected indent

1
2
3
=  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值