在Python中有4种类型的数——整数、长整数、浮点数和复数。
- 2是一个整数的例子。
- 长整数不过是大一些的整数。
- 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
- (-5+4j)和(2.3-4.6j)是复数的例子。
字符串
字符串是 字符的序列 。字符串基本上就是一组单词。
我几乎可以保证你在每个Python程序中都要用到字符串,所以请特别留心下面这部分的内容。下面告诉你如何在Python中使用字符串。
- 使用单引号(')
你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制表符都照原样保留。
- 使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。
- 使用三引号('''或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:
'''This is a multi-line string. This is the first line.
This is thesecond line.
"What's yourname?," I asked.
He said"Bond, James Bond."
'''
- 转义符
假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是What's your name?。你肯定不会用'What's your name?'来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'What\'s your name?'。
另一个表示这个特别的字符串的方法是"What's your name?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\\来指示反斜杠本身。
值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:
"This is the first sentence.\
This is thesecond 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."。
记住,在你处理文本文件的时候使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
- 字符串是不可变的
这意味着一旦你创造了一个字符串,你就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么我们说它不是一个缺点。
- 按字面意义级连字符串
如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。例如,'What\'s' 'your name?'会被自动转为"What's your name?"。
给C/C++程序员的注释
在Python中没有专门的char数据类型。确实没有需要有这个类型,我相信你不会为此而烦恼。
给Perl/PHP程序员的注释
记住,单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。
给正则表达式用户的注释
一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'或r'\1'。
标识符的命名
变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:
- 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
- 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
- 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。
给C/C++程序员的注释
使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。
s =
'Thisis a string. \
This continues the string.'
print
s
它的输出:
Thisis a string. This continues the string.
空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块
i =
5
print
'Valueis'
, i
错误,不正确的缩进
你编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例子如2 + 3
。一个表达式可以分解为运算符和操作数。
2,3 为操作数
运算符
运算符 | 名称 | 说明 | 例子 |
+ | 加 | 两个对象相加 | 3 + 5得到8。'a' + 'b'得到'ab'。 |
- | 减 | 得到负数或是一个数减去另一个数 | -5.2得到一个负数。50 - 24得到26。 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | 2 * 3得到6。'la' * 3得到'lalala'。 |
** | 幂 | 返回x的y次幂 | 3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 | x除以y | 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整数部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余数 | 8%3得到2。-25.5%2.25得到1.5 |
<< | 左移 | 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) | 2 << 2得到8。——2按比特表示为10 |
>> | 右移 | 把一个数的比特向右移一定数目 | 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。 |
& | 按位与 | 数的按位与 | 5 & 3得到1。 |
| | 按位或 | 数的按位或 | 5 | 3得到7。 |
^ | 按位异或 | 数的按位异或 | 5 ^ 3得到6 |
~ | 按位翻转 | x的按位翻转是-(x+1) | ~5得到6。 |
< | 小于 | 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比较对象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比较两个对象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布尔“非” | 如果x为True,返回False。如果x为False,它返回True。 | x = True; not y返回False。 |
and | 布尔“与” | 如果x为False,x and y返回False,否则它返回y的计算值。 | x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。 |
or | 布尔“或” | 如果x是True,它返回True,否则它返回y的计算值。 | x = True; y = False; x or y返回True。短路计算在这里也适用。 |
运算符 | 描述 |
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |
使用if语句
对于raw_input
函数来说是一个字符串。我们通过int
把这个字符串转换为整数,并把它存储在变量guess
中
注意if
语句在结尾处包含一个冒号——我们通过它告诉Python下面跟着一个语句块
。我们在这里使用的是elif
从句,它事实上把两个相关联的ifelse-if else
语句合并为一个if-elif-else
语句。这使得程序更加简单,并且减少了所需的缩进数量。
elif
和else
从句都必须在逻辑行结尾处有一个冒号,下面跟着一个相应的语句块(当然还包括正确的缩进)。
程序从主块开始执行,而下一个语句是print 'Done'
语句。在这之后,Python看到程序的结尾,简单的结束运行
给C/C++程序员的注释
在Python中没有switch
语句。你可以使用if..elif..else
语句来完成同样的工作(在某些场合,使用字典会更加快捷。)
Demo:
number = 12
guess =int(raw_input('Enter int number'))
if number ==guess:
print "success"
elif number> guess:
print "lower"
else:
print "higher"
print 'Done' (不是必须)
While 语句
如果while
循环有一个else
从句,它将始终被执行,除非你的while
循环将永远循环下去不会结束!
给C/C++程序员的注释
记住,你可以在while
循环中使用一个else
从句。
Demo:
number = 35
flag = True
while flag:
guess= int(raw_input('Enter a number:'))
ifguess == number:
print'success'
flag= False
elifguess > number:
print'higher'
else:
print'lower'
else:
print'The while loop is over.'
print 'Done'
For语句
for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目
else
部分是可选的。如果包含else,它总是在for
循环结束后执行一次,除非遇到break语句
range(1,5)给出序列[1, 2, 3, 4]。默认地,range的步长为1。如果我们为range提供第三个数,那么它将成为步长。例如,range(1,5,2)给出[1,3]。记住,range 向上 延伸到第二个数,即它不包含第二个数。
Deom:
for i in range(1, 5):
print i
else:
print 'The for loop is over'
Break语句
break
语句也可以在for
循环中使用
Demo:
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
print 'Length of the string is', len(s)
print 'Done'
Continue语句
continue
语句对于for
循环也有效
Demo:
whileTrue:
s = raw_input('Enter a number:')
if s == 'quit':
break
if len(s)<4:
continue
print 'length more than 4',s
函数:
int() raw_input() range() len()
函数通过def关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体
Python中用global 声明全局变量。
DocStrings是一个重要的工具,称为 文档字符串
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述
你可以使用__doc__
(注意双下划线)调用printMax
函数的文档字符串属性(属于函数的名称)
Demo:
defcompareMax(x,y):
'''Two number compare max.
which is higher'''
x = int(x)
y = int(y)
if x > y:
print x,'is higher'
else:
print y,'is higher'
compareMax(8,6)
print compareMax.__doc__
模块:
Demo:
import sys
print 'The command line arguments are:'
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
import语句 输入 sys模块。基本上,这句语句告诉Python,我们想要使用这个模块。sys模块包含了与Python解释器和它的环境有关的函数
.pyc
输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名
from..import语句
如果你想要直接输入argv
变量到你的程序中(避免在每次使用它时打sys.
),那么你可以使用from sys importargv
语句。如果你想要输入所有sys
模块使用的名字,那么你可以使用fromsys import *
语句。这对于所有模块都适用。
模块的__name__
每个Python模块都有它的__name__
,如果它是'__main__'
,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作
制作自己的模块: 使用import
Demo:
module1.py
def sayHi():
print'This is module1'
version = '0.2'
module2.py
import module1
module1.sayHi()
print 'Version:',module1.version
module1 和 module2 在同一个目录里
使用 from …. Import
Demo:
from module1 import sayHi,version
sayHi()
print 'Version:',version
在Python中有三种内建的数据结构——列表、元组和字典
列表: [ ]
Demo:
shoplist =['apple','banana','mango']
print 'shoplistlength is',len(shoplist)
print 'These itemsare:',
for items inshoplist:
print items,
shoplist.append('rice')
print '\nMyshopping list is now',shoplist
shoplist.sort()
print 'Sort,Myshopping list is now',shoplist
oldItem =shoplist[0]
del shoplist[0]
print 'I boughtthe',oldItem
print 'My shoppinglist is now',shoplist
所用到的: for in , append() ,sort(),del ,len()
我们在print语句的结尾使用了一个 逗号 来消除每个print语句自动打印的换行符
我们使用列表的sort方法来对列表排序。需要理解的是,这个方法影响列表本身,而不是返回一个修改后的列表——这与字符串工作的方法不同。这就是我们所说的列表是 可变的 而字符串是 不可变的 。
元祖: 也是一个序列
元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组
元组通过圆括号中用逗号分割的项目定义
一个空的元组由一对空的圆括号组成,如myempty= ()
1个项目的元组 ============== singleton= (2 , )
必须在第一个(唯一一个)项目后跟一个逗号
Demo:
age = 22
name = 'Swaroop'
print '%s is %d years old' % (name, age)
print 'Why is %s playing with that python?'% (name,)
定制可以是%s
表示字符串或%d
表示整数
字典
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己对它们排序。
字典是dict类的实例/对象。
Demo:
ab ={'i':'jly','do':'like','you':'qbw'}
print'ab length is %d' % len(ab)
ab['time']= 'half a year'
print'ab length is %d' % len(ab)
delab['time']
print'ab length is %d' %len(ab)
forname,address in ab.items():
print '%s and %s' % (name,address)
if 'time'in ab:
print 'love you %s' % ab['time']
使用字典的items()
方法,来使用字典中的每个键/值对
使用in
操作符来检验一个键/值对是否存在,或者使用dict
类的has_key
方法
Python脚本 (没看懂)
Import os
import time
# 1. The files and directories to be backed up are specified in a list.
source = ['/home/swaroop/byte', '/home/swaroop/bin']
# If you are using Windows, use source = [r'C:\Documents', r'D:\Work'] orsomething like that
# 2. The backup must be stored in a main backup directory
target_dir = '/mnt/e/backup/' # Remember to change this to what you willbe using
# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'
# 5. We use the zip command (in Unix/Linux) to put the files in a ziparchive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
# Run the backup
if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'BackupFAILED'
面向对象的编程 self
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
给C++/Java/C#程序员的注释
Python中的self等价于C++中的self指针和Java、C#中的this参考。
意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数
Demo:
class Person:
pass (我们使用了一个空白块,它由pass语句表示)
p = Person()
print p
Demo1:
class Student:
def say(self): (注意sayHi方法没有任何参数,但仍然在函数定义时有self)
print 'Student say hello'
s = Student()
s.say()
__main__模块(双下划线)
输入/输出
raw_input和print语句
模式可以为读模式
('r')、写模式('w')或追加模式('a')