Python程序语言快速上手教程


Posted in Python onJuly 18, 2012

本来打算从网上找一篇入门教程,但因为Python很少是程序员的第一次接触程序所学的语言,所以网上现有的教程多不是很基础,还是决定自己写下这些。

如果没有程序基础的话,可能会觉得本文涵盖的内容有点多。对照大学里面常教的C语言的教学速度,本文大约有四五个课时的内容;对照网上程序类的视频 教程,大致相当于两三个小时的内容;对于翻一本程序书籍,大约相当于翻一个小时书。也因此,如果有深入学习的打算的话,为了效率还是推荐看书。

如果暂时不能理解本文中的一些内容也没关系,因为都是一些经常会用到的基础知识,在实际编写代码的过程中会一直遇到。后面会大约有两三篇关于实用代码编写的文章,可以选择那时再对这些知识加深印象。

但如果是觉得技术对于SEO没有必要而对本文没有兴趣的话,试问打算将SEO作为自己多久的职业?如果打算真正将它做好的话,在至少有上万小时需要用去的精力里面,从里面抽几十几百小时去学习些技术应该是合情合理的。

若因文章有什么没表述清楚而导致无法理解,请务必帮忙提出。第一次写程序类的较完整的教程,难免有疏漏之处。

为什么学习Python

如果决定学习一些技术来辅助SEO的话,对于程序语言至少在我看来Python可以算是首选。

其一、Python入门相对简单

如果谁在大学课程里面接触过C语言但对程序了解不多的话,或许会觉得程序就是像C那么麻烦,其实不然,学了具有美感的Python代码以后就会知道C代码又臭又长。就算完全没接触过程序也没关系,Python本身就适合作为程序的入门选择。

我虽然很早就有写程序,但那时是兴趣使然,从未深入过,正式接触程序是接触SEO以后的事情,大约学了几个小时以后就能写些简单的采集程序,到现在只要能想到需求就很少有技术无法实现的。所以没什么有基础没基础的问题在,无论什么的基础都是需要自己打下的。

其二、Python代码非常灵活

来看一段非常常用的代码示例,如果没有程序基础的话会看不懂这些代码,但暂时没关系,看代码行数也能对比出代码简洁性。

PHP:

<?php 
$list_1 = array(1,2); 
$list_2 = array(); 
foreach ($list_1 as $current) { 
array_push($list_2, $current+1); 
} 
print_r($list_2); 
?>

Python:
list_1 = [1,2] 
list_2 = [current+1 for current in list_1] 
print list_2

Python代码的第2行叫做“列表推导”,它提供了不少像这样便利的语言特性可以使得代码非常简洁。

尽管语法灵活并非总是好事,灵活的代码写法意味着每个人写出来的代码往往风格迥异,会把团队成员的水平差距拉大而不利于团队开发。但对于小型SEO应用需求一般都是个人开发,此时代码的书写效率比起团队合作性而言更重要。

其三、Python使用广泛

Python在程序语言里面受欢迎的程度大约是5-10位左右。排在其之前的有C#, Java, PHP等,但很多时候不是因为它们更强大,而是因为前面提到的原因,它们的代码显得相对不是很灵活从而适合团队开发,所以才更受欢迎。

一般来说,多数提供API的网络服务都会提供Python接口(如百度网盟、Amazon云服务等),而另一些比Python某些方面更强的语言则 没有这么广泛的支持度,比如代码更加灵活一些的GO语言。(多数Web服务的API接口有:C#、PHP、Java、Python、Ruby、Perl, 所以一般情况下选择其中至少一种语言学习)

Python的模块也非常多,有许多既有模块意味着可以少做很多事情。比如下载一个网页,在很多语言里面都需要5-10行代码,而Python仅需两行:

import urllib2 
print urllib2.urlopen('http://g.cn/').read()

另外有意思的是以前Google限制过自己内部使用Python语言进行开发。原因有二:一、因为Python编写效率高,之前被其过多的运用;二、Python语言的执行效率较慢。而对于SEO,却正是最需要注重编写效率而一般无需在意执行效率的。

至此废话了不少,但兴趣往往是学习的最好动力,希望没有白白废话。

安装环境与配置

Python程序和普通程序略有不一样,通常情况下没有可以直接在Windows下面双击运行的exe文件,虽然并非无法编译成exe但相对较麻烦,实际运用中很少会去如此操作。

Python程序就是一段文字代码,保存到后缀名为.py的文件里面。在电脑安装了Python的运行环境以后,方可以运行py文件。(其实很多程序都依赖于运行环境,最常见的是.net Framework,只不过这个在Windows上预装了,一般感觉不到罢了)

对于Windows系统需要安装运行环境,Linux系统则一般自带Python无需配置。

Python运行环境的下载链接为:http://python.org/getit/

在这个页面上,通常是在第一个下载链接,寻找并下载:Python 2.7.x Windows Installer (Windows binary — does not include source)

需要注意的是下载的最好是2.7.x版本(x代表任意数值,2.7这个大版本都是类似的),而Python 3以上的版本和先前版本区别较大,对于初学者不建议使用。

下载后安装,没什么需要特别注意的地方。一般安装在默认路径,即c:\python27\,不要将之放在目录层级很深的文件夹,不然运行的时候比较麻烦。

操作系统

前面已经提到,Python可以在Windows及Linux系统下运行,它还支持更多系统,如Mac等,甚至也可以在越狱过的iPhone等设备上面编写并运行Python程序。

但因为Python的一个主要强大之处在于其模块的支持,有了模块就可以方便的做很多事情。而模块的配置在Windows等系统里面往往有些麻烦,Linux往往容易得多,所以过了入门阶段以后,推荐在Linux环境下进行开发。

Linux环境的搭建有三种选择:

1.本机安装Linux系统。适合在Linux下长期工作的人,需要对Linux的基础知识有一定的了解。主要缺点是总有些Windows里面才能运行的程序,偶尔需要切换系统。我主要是在这样的环境下工作。

2.在Windows里面安装VMware等虚拟机,然后在虚拟机里面安装使用Linux。适合初学者,但因为虚拟机的关系,除非计算机配置很好, 不然两边系统的运行效率都会比较低下。且虚拟机不利于塑造学习Linux的气氛,因为用虚拟机的时候碰到问题,多数人会倾向用Windows解决而非用 Linux,那么就较难熟悉它。个人不怎么推荐这种选择。

3.买一台Linux的VPS,使用SSH远程操作。主要优点是在工作及家里都可以很方便的连上服务器,不用每天把程序、数据等随着U盘之类的带来 带去;也可以在不影响Windows使用的情况下使用Linux。但缺点同样明显,没有图形界面对入门者不友好;因为网络延时的关系,写代码的效率经常受 影响等等。对于初学者,个人比较推荐这个解决方案。

至于VPS的购买,推荐Linode或PhotonVPS等,大约每月50-150RMB能买一个可以用来书写运行普通程序的VPS,也可以同时在上面放两三个小网站。

Linux有很多发行版可以选择来安装,如Ubuntu,Fedora等。

对于在本机上搭建Linux环境时,因为拥有图形界面,若是工作为主要目的,推荐安装Fedora。它和服务器最常用的CentOS系统同出Red Hat系,很多地方比较接近,熟悉它对于熟悉CentOS也有较大助益。

如果在本机安装,且有时会将Linux系统用作观看视频等娱乐之用的话,推荐Ubuntu,它在日常使用方面略胜Fedora一筹。

对于VPS上面搭建Linux,则推荐CentOS系统,因为它使用最广泛,所以各种软件对其的支持往往更好。

对应Linux环境解决方案1,一般使用U盘加载iso镜像进行安装;对于解决方案2,一般直接由虚拟机软件加载iso镜像安装;对于解决方案3,一般VPS都可在其后台直接选择操作系统无需自己安装,比较方便。

编辑器

书写代码前面首先需要有一个合适的编辑器。尽管Windows自带的记事本也不是不可以使用,但编写程序时会非常不顺手。

对于Windows系统的编辑器,较简单的我比较推荐Notepad++,当然也可以选择更流行的UltraEdit。

也可以使用IDE,这是用来开发软件项目的集成环境的统称,它在开发大型项目时具有较大优势,但在处理小型需求时可能显得略有不灵活。IDE里面比较好的有Eclipse,加上PyDev插件即可开发Python程序,它在Windows和Linux里面皆可以使用。

如果平常需要书写的代码量很大,或是对自己的学习能力较有自信的话,对于Linux推荐Vim,Windows则推荐gVim(Vim的图形界面)。它和普通编辑器书写代码有极大的不同之处,往往需要几天的学习时间与几个月的熟练时间,但书写代码的效率一般可以快不少。

开始编写程序

Hello World!

“Hello World”最早的出处是计算机领域的最经典书籍之一——《The C Programming Language》,后来被广泛沿用。”Hello World”程序的目的只是在屏幕上输出一个”Hello World”,尽管很简单,当它作为每个人第一个所写的程序时还是有着较大的意义。

打开编辑器,输入一行:(友情提示:复制粘贴不利记忆)

print "Hello World!"

完毕。保存文件到c:\hello.py(路径随意)。

按Win + R快捷键,打开“运行”,输入CMD,回车,打开命令行提示符。(Linux图形界面的话是Ctrl+Alt+T来打开终端)

输入:

(Windows)
c:\python27\python.exe c:\hello.py

(Linux)
python 路径/hello.py

可以看到程序运行并显示了一行“Hello World!”。至此,第一个程序完成了。

Python程序语言快速上手教程

变量与赋值
s = 'Hello World!' 
print s

程序输出:
Hello World!

上述代码,s称为变量;第一行所做的操作叫做赋值。

再来个例子加深印象:

a = 1 
b = 2 
print a + b

程序输出:
3

函数

def hello(name): 
s = 'Hello ' + name + '!' 
return s 
print hello('world') 
print hello('semwatch')

程序输出:
Hello world!
Hello semwatch!

函数是用来包装一系列的行为的,通过传递一个或多个参数进入函数(def hello(name)),然后函数再返回一个计算之后的数值(return s)。

于是print hello(‘world')就相当于输出hello函数运行之后的运算结果,即输出Hello world!

可以再看这个例子来加深理解:

def add_num(a, b) 
return a + b 
print add_num(1, 2) 
print add_num(2, 3)

程序输出:
3
5

循环及判断

后面提到的for循环、while循环及if判断,这是所有程序语言里面的基础,务必完全掌握。

(Python里面没有其他语言常有的do while循环,也没switch case判断)

for循环:

PHP范例:

for($i=0;$i<10;$i++) { 
echo "$i\n"; 
} 
?>

之所以这里举一个PHP的例子,是因为多数程序语言的for循环都和该例是类似的语法,先以这种形式举例。

应该较容易理解,给变量i赋值0($i=0),每次循环的时候+1($i++),在i小于10的时候就一直循环($i<10),所以循环10次。

echo语句负责把每次循环时候的数字输出,此例中会依次输出0-9这些数字,不过没必要研究echo语法,只需理解for循环的概念就行了。

Python的for循环语法比较另类,但也很简洁:

for i in range(10): 
print i

这两句语句会和前面一样,依次输出0-9这些数字,且print语句会自动每次输出后换行。

while循环:

i = 0 
while i < 10: 
i = i + 1 
print i

代码的意思是,先给i赋值0,然后当i小于10的时候,不断执行循环体里面的内容。此处即为将i的值加1,并输出i。

运行后输出的结果依次是0-9几个数字。

if判断:

i = 1 
if i < 2: 
print "i<2" 
else: 
print "i>=2"

程序输出:
i<2

程序先给i赋值1,然后判断i是否小于2,如果小于2则输出i<2,不然输出i>=2。

另外等于和不等于的判断符号是如下的:

i = 1 
if i == 1: 
print "i=1" 
elif i != 1: 
print "i!=1"

等于是==符号,这点容易混淆。使用=符号在多数语言里面会产生一些问题,而在Python里面会直接视为代码错误。而不等于符号是!=,也可以使 用<>,但<>号在如今的程序语言里面使用越来越少,也可能在Python的日后版本里被弃用,所以一般推荐使用!=。

上面代码中第三行elif是else if的简写。意为如果i==1没有满足的话,就继续判断i!=1是否满足。

列表与字典

多数语言都有“数组”,它是一个存着多个数值的变量。而Python没有,类似的是“列表”和“字典”等。

如果有PHP基础的话,看下以下对比就可以很快理解它们:

列表:

PHP

$l = array(1,2,3); 
?>

Python

l = [1,2,3]

字典:

PHP

$d = array( 
'a' => 1, 
'b' => 2, 
'c' => 3, 
); 
?>

Python
d = { 
'a': 1, 
'b': 2, 
'c': 3, 
}

如果没有其他语言基础的话,通过实际代码来理解列表及字典或许更合适。

列表:

l = [1,2,3] 
for current in l: 
print current

运行的结果会依次输出1-3这些数字。(Python里面没有PHP的foreach语法,全都使用for完成)

字典:

d = { 
'a': 1, 
'b': 2, 
'c': 3, 
} 
for key in d: 
print key 
print d[key]

运行的结果会输出a1b2c3,分六行显示。

解释下字典,字典的结构是这样的:

dict = {key: value, key2: value2, …}

for循环可以在每次循环的时候,把相应的key赋值给变量,如果要访问对应的value,就需要使用类似dict[key]这样的,即寻找dict里面对应key的value。

类似的,列表也有类似操作,如:

l = [1,2,3] 
print l[1]

运行输出:
2

它的意思是输出列表l的第1项。需要注意的是,对于绝大多数程序语言,都是从第0项开始算的。即这里l[0]是1,l[1]是2,l[2]是3。

字符串及切片

字符串如其名,是一串字符。如print “Hello World!”就是输出字符串Hello World!。Python里面的字符串比较特殊,它和列表一样属于序列类型,很多使用方法上和列表一样。

s = "abc" 
print s[1]

运行结果会输出b。

根据这样的特性,可以衍生出一些简洁的代码运用。比如要输出”Hello World!”这个字符串的前5个字符的话,多数语言会和PHP类似是这样做的:

$s = "Hello World!"; 
echo substr($s,0,5); 
?>

而Python简单得多:

s = "Hello World!" 
print s[:5]

两段代码都会输出Hello。

其中的s[:5]使用了Python的“切片”特性,完整的写法应该是s[0:5],但0可以省略,这里代表着输出这个序列索引号从0开始到5之前的内容。

当然列表也是可以使用切片的,如:

l = [1,2,3] 
print l[1:]

运行后输出[2,3]。

意味着从索引号1开始,输出到列表的最后。

知识点汇总

将前面所有的内容加上一些新的知识点,融合成一段代码。认真思考每一个输出的结果是如何出来的,就能更好的理解这些。因为知识点比较多,可以暂时不求甚解,但这些都是任何程序语言里面都会有的基础内容,最终是必须掌握的。

代码中,#号意味着注释的开始,这些内容不会被运行。

另外代码的第一行声明了代码编码为utf-8。因为注释中出现了非英文字符,所以就需要指定编码,不然程序会报错。

# -*- coding:utf-8 -*- 
str_1 = 'Hello' 
str_2 = 'World!' #以下语句都会输出Hello World! 
#print语句中的逗号意味着不换行,而是用空格间隔它们 
print str_1, str_2 
#以下和上面一句是同样的效果 
print str_1, 
print str_2 
#同样可以用字符串连接符 
print str_1 + ' ' + str_2 
#也可以用格式化操作符,它比前者更常用 
#会将后面的变量依次替换到前面的%x上面 
#%s指定替换为字符串,若替换整数则为%d,小数%f 
print '%s %s' % (str_1, str_2) 
#会输出00 11 22 
for i in range(3): 
print '%d%d' % (i, i), 
print '' #输出一个空的字符串用于换行 
#会输出11 22 33 
for i in range(1, 4): 
print '%d%d' % (i, i), 
print '' 
#会输出00 22 44 
for i in range(0, 5, 2): 
print '%d%d' % (i, i), 
print '' 
#会输出0 1 0 1 0 
i = 0 
while i < 5: 
i += 1 #等同于i = i + 1 
if i % 2==0: #如果i除2的余数为0 
print 1, 
else: 
print 0, 
print '' 
#会输出c 
i = 3 
if i==1: 
print 'a' 
elif i==2: 
print 'b' 
elif i==3: 
print 'c' 
else: 
print 'error' 
#会输出1 2 3 3 4 4 5 5 6 
for i in range(10): 
i += 1 
print i, 
if i < 3: 
continue #如果i<3则中断该次循环,从循环体的头部重新运行 
elif i > 5: 
break #如果i>5则中断整个循环 
print i,

最后

虽然现在提及的是程序,但SEO要涉及的技术远不仅是程序。尽管很想从头开始提及所有应该学习的方面,无奈这是几本书都写不完的,单用几篇文章更无法穷尽。

在接下来的文章里面,将跳空一些知识点,如果读者没有相关基础,则需自行学习。之后将跳过的包括但不限于:

1. 基础Web知识,比如非ASCII字符集的URL需要编码等常识:http://www.w3school.com.cn/html/html_urlencode.asp

2. 浏览器开发人员工具的运用,可以选择Chrome的开发人员工具、或Firefox的Firebug插件等,个人推荐用Chrome。尤其需要先了解其抓 包功能,在采集数据的时候经常要用到。抓包功能在Chrome开发人员工具里面,对应的是”Network”选项卡。

3. 独立配置Python的pycurl模块。此处主要有两种选择,一种是在Windows系统安装Curl、再安装setuptools、最后安装模块,比 较麻烦也不推荐,且以后其他模块在Windows里面配置可能也是这么麻烦。另一种选择即是配置一个Linux环境,在CentOS及Fedora等系统 里面,执行:sudo yum install python-pycurl,在Ubuntu等系统里面,执行sudo apt-get install python-pycurl。之后将大量的使用到这个模块,所以务必配置好。Linux的入门命令可见:http://ooxx.me/common-ssh-commands.orz

4. 了解正则表达式。它是用来处理字符串的强大工具,可以在百度上寻找资料对它做初步的了解,至少要先知道.*?和[\s\S]*?这两个的含义,它们在采集数据的过程中是最常用的。这是一个很不错但难度较高的正则教程,可能不是很适合初学:http://manual.phpv.net/regular_expression.html

此外最好买一本Python书籍,虽然因为SEO没必要对程序涉及很深入,大多程序类书籍上的多数知识的重要性不高。比如每本书都会花大量篇幅去介 绍面向对象编程的思路与实现,但SEO的多数需求往往只有几百行代码,一般都不太会去涉及这些。不过,一开始的一些基础知识学习的过程中,容易疏漏或者遗 忘知识点,有一本书会好得多。

尚未找到比较适合SEO看的Python书籍。我自己手边有一本《Python核心编程》,应该说还可以吧。如果不确定买哪本的话,可以到这个论坛去找下pdf试看,它上面各类计算机书籍应该是相对最齐全的:http://club.topsage.com/forum-300-1.html

但不要只看pdf,一般学一门语言至少备一本纸质书籍,它应该是在自己不清楚或忘记了哪些知识点以后,可以随时拿来翻看的工具书。

文章作者:ZERO

本文来自semwatch 转载请注明出处链接及作者。

Python 相关文章推荐
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
讲解Python中的递归函数
Apr 27 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
Python3 replace()函数使用方法
Mar 19 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
flask 实现token机制的示例代码
Nov 07 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
django haystack实现全文检索的示例代码
Jun 24 Python
python mock测试的示例
Oct 19 Python
Python基于内置函数type创建新类型
Oct 22 Python
python 图片验证码代码分享
Jul 04 #Python
Python查询Mysql时返回字典结构的代码
Jun 18 #Python
python 实现堆排序算法代码
Jun 05 #Python
python 实现归并排序算法
Jun 05 #Python
python 实现插入排序算法
Jun 05 #Python
python 算法 排序实现快速排序
Jun 05 #Python
python操作MySQL数据库的方法分享
May 29 #Python
You might like
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python批处理更改文件名os.rename的方法
2018/10/26 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
python中dict使用方法详解
2019/07/17 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
Django REST framework 限流功能的使用
2021/06/24 Python
MySQL 条件查询的常用操作
2022/04/28 MySQL
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS