title: 基础知识 create: 2016.12.7 modified: 2016.12.7 tags: python basics
1
[TOC]
大家好!为了能够更系统地了解Python,我开始学习各种教程。为了及时将所学内容和大家分享,同时巩固知识,我决定写这个Python教程。
(1) 从 http://www.python.org 下载Python安装包 (2) 双击运行Python的Windows Installer,这样会开启Python的安装向导,只需要接受默认设置。
在绝大多数Linux系统中,Python的解释器就已经存在。如果读者需要自己安装Python,可以使用Linux中的包管理器进行安装。如果使用的操作系统为Debian Linux, 那么可以用下面的命令来安装Python:
\$ apt-get install python
如果是RedHat Linux,则使用:
\$ yum install python
In [1]:
print 'Hello, world!'
In [2]:
1/2
Out[2]:
发生了什么?一个整数被另外一个整数除,计算结果的小数部分被截除了,只留下整数部分。这里提供两个有效的解决方案:要用实数(包含小数点的十进制数)进行运算,或让Python改变除法的执行方式。
实数在Python中被称为浮点数(Float,或者Float-point Number),如果参与除法的两个数中有一个数为浮点数,结果亦为浮点数:
In [3]:
1.0/2.0
Out[3]:
In [4]:
1.0/2
Out[4]:
如果希望Python只执行普通的除法,那么可以在程序前加上以下语句,或者直接在解释器里执行它:
In [6]:
from __future__ import division
In [7]:
1/2
Out[7]:
通过使用上述方法,除法会变得更为合理。上述代码中future前后是两个下划线,以后会对future模块进行深入的介绍。Python还提供了另外一种用于实现整除的操作符-双斜线:
In [8]:
1//2
Out[8]:
就算是浮点数,双斜线也会执行整除:
In [9]:
1.0//2.0
Out[9]:
还有一个非常有用的运算符:
In [10]:
1%2
Out[10]:
这是取余运算符—x%y的结果为x除以y的余数。最后一个运算符就是幂(乘方)运算符:
In [11]:
2**3
Out[11]:
In [12]:
x=3
这样的操作称为赋值,值3赋给了变量x。在变量被赋值之后,就可以在表达式中使用变量。
In [13]:
x*2
Out[13]:
多个赋值操作可以同时进行:
In [3]:
x,y,z=1,2,3
print x, y, z
将表达式运算符(+、-、*、/等)放置在赋值运算符(=)的左边,这种写法叫做增量赋值:
In [4]:
x=2
x+=1
x*=2
x
Out[4]:
增量赋值可以让代码更加紧凑和简练,很多情况下会更易读。
上面我已经介绍了两类语句:print语句和赋值语句。那么语句和表达式之间有什么区别呢?表达式是某事,而语句是做某事(换句话说就是告诉计算机做什么)。比如2*2是4,而print 2*2打印4。事实上print打印多个表达式也是可行的。
In [2]:
print 'Age', 42 #使用逗号隔开
怎么获取用户提供的值呢?看看非常有用的input函数吧。
In [14]:
x=input("x:")
In [15]:
y=input("y:")
In [16]:
print x*y
输入的值20和31由用户提供,而程序
函数就像可以用来实现特定功能的小程序一样。我们通常把标准函数称为内建函数。比如使用abs函数可以得到数的绝对值,round函数则会把浮点数四舍五入为最接近的整数值:
In [1]:
abs(-10)
Out[1]:
In [2]:
round(0.4)
Out[2]:
可以把模块想象成导入到Python中以增强其功能的扩展。需要使用特殊的命令import来导入模块。比如floor函数(向下取整)就在名为math的模块中:
In [4]:
import math
math.floor(2.9)
Out[4]:
如果想把2.9转化为整数而不是浮点数,可以使用int函数:
In [5]:
int(math.floor(2.9))
Out[5]:
在确定自己不会导入多个同名函数(从不同模块导入)的情况下,你可能不希望在每次调用函数的时候,都要写上模块的名字。那么,可以使用import命令的另外一种形式:
In [6]:
from math import sqrt
sqrt(9)
Out[6]:
事实上,可以使用变量来引用函数。比如,通过foo=math.sqrt进行赋值,然后就可以使用foo来计算平方根了:foo(4)的结果为2.0。也可以为函数提供别名:from math import sqrt as foobar
交互式解释器是Python的强项之一,它让实时检验解决方案并且体验这门语言成为了现实。但是,在交互式解释器里面输入的一切都会在它退出的时候丢失。我们真正想做的事情是编写自己和他人都能运行的程序。如何实现呢?
首先,需要一个文本编辑器。然后将程序保存在以.py结尾的文本文件中。如果使用Python解释器可通过Edit->Run或者按下Ctrl+F5键来运行程序。如果使用DOS窗口或者Linux中的Shell提示符可通过运行以下命令执行脚本:python *.py
井号(#)在Python中有特殊作用。在代码中输入它的时候,它右边的一切都会被忽略。比如:
# 打印圆的周长:
print 2*pi*radius
这里的第一行称为注释。为了让别人能够更容易理解程序,使用注释是非常有效的。
在程序中可以使用双引号将字符串括起来:
In [1]:
"Let's go!"
Out[1]:
也可以使用单引号将字符串括起来:
In [5]:
'Hello,world!'
Out[5]:
In [3]:
'Let's go!'
In [4]:
'Let\'s go!'
Out[4]:
In [6]:
"Hello, "+"world!"
Out[6]:
In [8]:
10000L
Out[8]:
In [7]:
print "Hello, "+"world!"
In [9]:
print 10000L
可以看到,长整型数10000L被转换成了数字10000。但是,当你想知道一个变量的值时,可能会对它是整型还是长整型感兴趣。
我们在这里讨论的实际上是值被转换为字符串的两种机制。可以通过以下两个函数来实现这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解;而repr会创建一个字符串,它以合法的Python表达式的形式来表达值。比如:
In [10]:
print repr('Hello, world!')
In [11]:
print repr(10000L)
In [12]:
print str('Hello, world!')
In [13]:
print str(10000L)
简而言之,str、repr是将Python值转换为字符串的2种方法。函数str让字符串更易于阅读,而repr则把结果字符串转换为合法的Python表达式。
In [1]:
name=input('what is your name?')
print 'Hello, '+name+'!'
问题在于input会假设用户输入的是合法的Python表达式。如果以字符串作为输入的名字,程序运行是没有问题的:
In [2]:
name=input('what is your name?')
print 'Hello, '+name+'!'
然而,要求用户带着引号输入他们的名字有点过分,因此,这就需要使用raw_input函数,它会把所有的输入当作原始数据,然后将其放入字符串中:
In [3]:
name=raw_input('what is your name?')
print 'Hello, '+name+'!'
除非对input有特别的需要,否则应该尽可能使用raw_input函数。
In [5]:
print 'hello, \
world!'
在普通字符串中,反斜线有特殊作用:它会转义,,可以在字符串中加入通常情况下不能直接加入的内容。例如,换行符可以写为\n,并可放于字符串中,如下:
In [8]:
print 'Hello,\nworld!'
这看起来不错,但是有时候,这并非是想要的结果。如果希望在字符串中包含反斜线再加上n怎么办?例如,像Windows路径"C:\nowhere"这样的字符串:
In [7]:
print 'C:\nowhere'
这并不是期望的结果。那么该怎么办呢?可以使用反斜线对其本身进行转义:
In [9]:
print 'C:\\nowhere'
这看起来不错,但是对于长路径,那么可能需要很多反斜线。在这样的情况下,原始字符串就派上用场了。原始字符串不会把反斜线当作特殊字符。在原始字符串中输入的每个字符都会与书写的方式保持一致:
In [6]:
print r'C:\nowhere'
可以看到,原始字符串以r开头。不能在原始字符串结尾输入反斜线。如果最后一个字符是反斜线,Python就不清楚是否应该结束字符串:
In [10]:
print r'This is illegal\'
本章讲了很多内容。在继续下一章之前,先来回顾一下在本章学到了什么: