标签:
1 2 3 | total = item_one + \ item_two + \ item_three |
1 2 | days = [ ‘Monday‘ , ‘Tuesday‘ , ‘Wednesday‘ , ‘Thursday‘ , ‘Friday‘ ] |
1 2 3 4 | word = ‘word‘ sentence = "This is a sentence." paragraph = """This is a paragraph. It is made up of multiple lines and sentences.""" |
>>> name = raw_input()
Michael
name = raw_input(‘please enter your name: ‘)
print ‘hello,‘, name
>>> print ‘The quick brown fox‘, ‘jumps over‘, ‘the lazy dog‘
The quick brown fox jumps over the lazy dog
4、变量赋值用:=
多个变量赋值:
1 a, b, c
=
1
,
2
,
"john"
5、Python有五个标准的数据类型:
5.1.Numbers(数字):不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
12 var1
=
1
var2
=
10
使用del语句删除一些对象引用。12 del
var
del
var_a, var_b
Python支持四种不同的数值类型: int(有符号整型) long(长整型[也可以代表八进制和十六进制]) float(浮点型) complex(复数)
5.2.String(字符串)
#!/usr/bin/python
str
=
"Hello World!"
print
str
# 输出完整字符串
print
str
[
0
]
# 输出字符串中的第一个字符
print
str
[
2
:
5
]
# 输出字符串中第三个至第五个之间的字符串
print
str
[
2
:]
# 输出从第三个字符开始的字符串
print
str
*
2
# 输出字符串两次
print
str
+
"TEST"
# 输出连接的字符串
以上实例输出结果:
123456 Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST
5.3.List(列表)
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。列表用[ ]标识。
加号(+)是列表连接运算符,星号(*)是重复操作。如下实例:
1234567891011 #!/usr/bin/python
List
=
[
"abcd"
,
786
,
2.23
,
"john"
,
70.2
]
tinylist
=
[
123
,
"john"
]
print
List
# 输出完整列表
print
List
[
0
]
# 输出列表的第一个元素
print
List
[
1
:
3
]
# 输出第二个至第三个的元素
print
List
[
2
:]
# 输出从第三个开始至列表末尾的所有元素
print
tinylist
*
2
# 输出列表两次
print
List
+
tinylist
# 打印组合的列表
以上实例输出结果:
123456 [
"abcd"
,
786
,
2.23
,
"john"
,
70.200000000000003
]
abcd
[
786
,
2.23
]
[
2.23
,
"john"
,
70.200000000000003
]
[
123
,
"john"
,
123
,
"john"
]
[
"abcd"
,
786
,
2.23
,
"john"
,
70.200000000000003
,
123
,
"john"
]
5.4.Tuple(元组)
元组用"()"标识。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。以下是元组无效的,因为元组是不允许更新的。而列表是允许更新的:
123456 #!/usr/bin/python
Tuple
=
(
"abcd"
,
786
,
2.23
,
"john"
,
70.2
)
List
=
[
"abcd"
,
786
,
2.23
,
"john"
,
70.2
]
Tuple
[
2
]
=
1000
# 错误!元组中是非法应用
List
[
2
]
=
1000
# 正确!列表中是合法应用
5.5.Dictionary(字典)
列表是有序的对象结合,字典是无序的对象集合。 两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
12345678910111213 #!/usr/bin/python
dict
=
{}
dict
[
"one"
]
=
"This is one"
dict
[
2
]
=
"This is two"
tinydict
=
{
"name"
:
"john"
,
"code"
:
6734
,
"dept"
:
"sales"
}
print
dict
[
"one"
]
# 输出键为"one" 的值
print
dict
[
2
]
# 输出键为 2 的值
print
tinydict
# 输出完整的字典
print
tinydict.keys()
# 输出所有键
print
tinydict.values()
# 输出所有值
输出结果为:
1 This
is
one
This
is
two
{
"dept"
:
"sales"
,
"code"
:
6734
,
"name"
:
"john"
}
[
"dept"
,
"code"
,
"name"
]
[
"sales"
,
6734
,
"john"
]
6、数据类型转换
函数 描述 int(x [,base])
将x转换为一个整数
long(x [,base] )
将x转换为一个长整数
float(x)
将x转换到一个浮点数
complex(real [,imag])
创建一个复数
str(x)
将对象 x 转换为字符串
repr(x)
将对象 x 转换为表达式字符串
eval(str)
用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)
将序列 s 转换为一个元组
list(s)
将序列 s 转换为一个列表
set(s)
转换为可变集合
dict(d)
创建一个字典。d 必须是一个序列 (key,value)元组。
frozenset(s)
转换为不可变集合
chr(x)
将一个整数转换为一个字符
unichr(x)
将一个整数转换为Unicode字符
ord(x)
将一个字符转换为它的整数值
hex(x)
将一个整数转换为一个十六进制字符串
oct(x)
将一个整数转换为一个八进制字符串
7、运算符
7.1.Python算术运算符
运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200 / 除 - x除以y b / a 输出结果 2 % 取模 - 返回除法的余数 b % a 输出结果 0 ** 幂 - 返回x的y次幂 a**b 输出结果 20 // 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
7.2.比较运算符
以下假设变量a为10,变量b为20:
运算符 描述 实例 == 等于 - 比较对象是否相等 (a == b) 返回 False。 != 不等于 - 比较两个对象是否不相等 (a != b) 返回 true. <> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。 > 大于 - 返回x是否大于y (a > b) 返回 False。 < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。 >= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。 <= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。
7.3.Python赋值运算符
运算符 描述 实例 = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c += 加法赋值运算符 c += a 等效于 c = c + a -= 减法赋值运算符 c -= a 等效于 c = c - a *= 乘法赋值运算符 c *= a 等效于 c = c * a /= 除法赋值运算符 c /= a 等效于 c = c / a %= 取模赋值运算符 c %= a 等效于 c = c % a **= 幂赋值运算符 c **= a 等效于 c = c ** a //= 取整除赋值运算符 c //= a 等效于 c = c // a
7.4.Python位运算符
运算符 描述 实例 & 按位与运算符 (a & b) 输出结果 12 ,二进制解释: 0000 1100 | 按位或运算符 (a | b) 输出结果 61 ,二进制解释: 0011 1101 ^ 按位异或运算符 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 ~ 按位取反运算符 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 << 左移动运算符 a << 2 输出结果 240 ,二进制解释: 1111 0000 >> 右移动运算符 a >> 2 输出结果 15 ,二进制解释: 0000 1111
7.5.Python逻辑运算符
运算符 描述 实例 and 布尔"与" - 如果x为False,x and y返回False,否则它返回y的计算值。 (a and b) 返回 true。 or 布尔"或" - 如果x是True,它返回True,否则它返回y的计算值。 (a or b) 返回 true。 not 布尔"非" - 如果x为True,返回False。如果x为False,它返回True。 not(a and b) 返回 false。
7.6.Python成员运算符
运算符 描述 实例 in 如果在指定的序列中找到值返回True,否则返回False。 x 在 y序列中 , 如果x在y序列中返回True。 not in 如果在指定的序列中没有找到值返回True,否则返回False。 x 不在 y序列中 , 如果x不在y序列中返回True。
7.7.Python身份运算符
身份运算符用于比较两个对象的存储单元。运算符 描述 实例 is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1 is not is not是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1
7.8.Python运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND‘ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
1 2 3 4 | if 判断条件: 执行语句…… else : 执行语句…… |
其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。
1 2 3 4 5 6 7 8 | if 判断条件 1 : 执行语句 1 …… elif 判断条件 2 : 执行语句 2 …… elif 判断条件 3 : 执行语句 3 …… else : 执行语句 4 …… |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 例3:if语句多个条件 num = 9 if num > = 0 and num < = 10 : # 判断值是否在0~10之间 print ‘hello‘ >>> hello # 输出结果 num = 10 if num < 0 or num > 10 : # 判断值是否在小于0或大于10 print ‘hello‘ else : print ‘undefine‘ >>> undefine # 输出结果 num = 8 # 判断值是否在0~5或者10~15之间 if (num > = 0 and num < = 5 ) or (num > = 10 and num < = 15 ): print ‘hello‘ else : print ‘undefine‘ >>> undefine # 输出结果 |
当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。
Python提供了for循环和while循环(在Python中没有do..while循环):
循环类型 | 描述 |
---|---|
在给定的判断条件为 true 时执行循环体,否则退出循环体。 | |
for 循环 | 重复执行语句 |
1 2 | while 判断条件: 执行语句…… |
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
当判断条件假false时,循环结束。
1 2 | for iterating_var in sequence: statements(s) |
实例:
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/python for letter in ‘Python‘ : # First Example print ‘Current Letter :‘ , letter fruits = [ ‘banana‘ , ‘apple‘ , ‘mango‘ ] for fruit in fruits: # Second Example print ‘Current fruit :‘ , fruit print "Good bye!" |
以上实例输出结果:
1 2 3 4 5 6 7 8 9 10 | Current Letter : P Current Letter : y Current Letter : t Current Letter : h Current Letter : o Current Letter : n Current fruit : banana Current fruit : apple Current fruit : mango Good bye! |
另外一种执行循环的遍历方式是通过索引。
在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
1 2 3 4 5 6 7 8 | #!/usr/bin/python count = 0 while count < 5 : print count, " is less than 5" count = count + 1 else : print count, " is not less than 5" |
以上实例输出结果为:
1 2 3 4 5 6 | 0 is less than 5 1 is less than 5 2 is less than 5 3 is less than 5 4 is less than 5 5 is not less than 5 |
循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:
控制语句 | 描述 |
---|---|
break 语句 | 在语句块执行过程中终止循环,并且跳出整个循环 |
continue 语句 | 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。 |
pass 语句 | pass是空语句,是为了保持程序结构的完整性。 |
Python 语言 pass 语句语法格式如下:
1 | pass |
实例:
1 2 3 4 5 6 7 8 9 | #!/usr/bin/python for letter in ‘Python‘ : if letter = = ‘h‘ : pass print ‘This is pass block‘ print ‘Current Letter :‘ , letter print "Good bye!" |
以上实例执行结果:
1 2 3 4 5 6 7 8 | Current Letter : P Current Letter : y Current Letter : t This is pass block Current Letter : h Current Letter : o Current Letter : n Good bye! |
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
1 2 3 4 | def functionname( parameters ): "函数_文档字符串" function_suite return [expression] |
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
1 2 3 | def printme( string ): "打印传入的字符串到标准显示设备上" print string
|
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/python # Function definition is here def printme( string ): "打印任何传入的字符串" print string # Now you can call printme function printme( "我要调用用户自定义函数!" ); printme( "再次调用同一函数" ); |
以上实例输出结果:
1 2 | 我要调用用户自定义函数! 再次调用同一函数 |
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python # 可写函数说明 def changeme( mylist ): "修改传入的列表" mylist.append([ 1 , 2 , 3 , 4 ]) print "函数内取值: " , mylist # 调用changeme函数 mylist = [ 10 , 20 , 30 ]; changeme( mylist ); print "函数外取值: " , mylist |
传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
1 2 | 函数内取值: [ 10 , 20 , 30 , [ 1 , 2 , 3 , 4 ]] 函数外取值: [ 10 , 20 , 30 , [ 1 , 2 , 3 , 4 ]] |
以下是调用函数时可使用的正式参数类型:
必备参数
命名参数
缺省参数
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,这种参数声明时不会命名。基本语法如下:
1 2 3 4 | def functionname([formal_args,] * var_args_tuple ): "函数_文档字符串" function_suite return [expression] |
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python # 可写函数说明 def printinfo( arg1, * vartuple ): "打印任何传入的参数" print "输出: " print arg1 for var in vartuple: print var # 调用printinfo 函数 printinfo( 10 ) printinfo( 70 , 60 , 50 ) |
以上实例输出结果:
1 2 3 4 5 6 | 输出: 10 输出: 70 60 50 |
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时不能包含命令或多个表达式。
匿名函数不能直接调用print,因为lambda需要一个表达式。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
1 | lambda [arg1 [,arg2,.....argn]]:expression |
如下实例:
1 2 3 4 5 6 7 8 | #!/usr/bin/python #可写函数说明 sum = lambda arg1, arg2: arg1 + arg2 #调用sum函数 print "Value of total : " , sum ( 10 , 20 ) print "Value of total : " , sum ( 20 , 20 ) |
以上实例输出结果:
1 2 | Value of total : 30 Value of total : 40 |
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python # 可写函数说明 def sum ( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print "Inside the function : " , total return total # 调用sum函数 total = sum ( 10 , 20 ); print "Outside the function : " , total |
以上实例输出结果:
1 2 | Inside the function : 30 Outside the function : 30 |
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
全局变量
局部变量
变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python total = 0 ; # This is global variable. # 可写函数说明 def sum ( arg1, arg2 ): #返回2个参数的和." total = arg1 + arg2; # total在这里是局部变量. print "Inside the function local total : " , total return total; #调用sum函数 sum ( 10 , 20 ); print "Outside the function global total : " , total |
以上实例输出结果:
1 2 | Inside the function local total : 30 Outside the function global total : 0 |
例子
一个叫做aname的模块里的Python代码一般都能在一个叫aname.py的文件中找到。下例是个简单的模块support.py。
1 2 | def print_func( par ): print "Hello : " , par |
想使用Python源文件,只需在另一个源文件里执行import语句,语法如下:
1 | import module1[, module2[,... moduleN] |
当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块hello.py,需要把命令放在脚本的顶端:
1 2 3 4 5 6 7 | #!/usr/bin/python # 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func( "Zara" ) |
以上实例输出结果:
1 | Hello : Zara |
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
1 | from modname import name1[, name2[, ... nameN]] |
例如,要导入模块fib的fibonacci函数,使用如下语句:
1 | from fib import fibonacci |
这个声明不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入到执行这个声明的模块的全局符号表。
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
1 | from mod_name import * |
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
因此,如果你想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块。语法如下:
1 | reload (module_name) |
在这里,module_name要直接放模块的名字,而不是一个字符串形式。比如想重载hello模块,如下:
1 | reload (hello) |
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
当前目录
如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。
在Windows系统,典型的PYTHONPATH如下:
1 | set PYTHONPATH = c:\python20\lib; |
在UNIX系统,典型的PYTHONPATH如下:
1 | set PYTHONPATH = / usr / local / lib / python |
一个Python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。因此,如果要给全局变量在一个函数里赋值,必须使用global语句。
global VarName的表达式会告诉Python, VarName是一个全局变量,这样Python就不会在局部命名空间里寻找这个变量了。
例如,我们在全局命名空间里定义一个变量money。我们再在函数内给变量money赋值,然后Python会假定money是一个局部变量。然而,我们并没有在访问前声明一个局部变量money,结果就是会出现一个UnboundLocalError的错误。取消global语句的注释就能解决这个问题。
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/python Money = 2000 def AddMoney(): # 想改正代码就取消以下注释: # global Money Money = Money + 1 print Money AddMoney() print Money |
根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。
dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。如下一个简单的实例:
1 2 3 4 5 6 7 8 | #!/usr/bin/python # 导入内置math模块 import math content = dir (math) print content; |
以上实例输出结果:
1 2 3 4 5 | [ ‘__doc__‘ , ‘__file__‘ , ‘__name__‘ , ‘acos‘ , ‘asin‘ , ‘atan‘ , ‘atan2‘ , ‘ceil‘ , ‘cos‘ , ‘cosh‘ , ‘degrees‘ , ‘e‘ , ‘exp‘ , ‘fabs‘ , ‘floor‘ , ‘fmod‘ , ‘frexp‘ , ‘hypot‘ , ‘ldexp‘ , ‘log‘ , ‘log10‘ , ‘modf‘ , ‘pi‘ , ‘pow‘ , ‘radians‘ , ‘sin‘ , ‘sinh‘ , ‘sqrt‘ , ‘tan‘ , ‘tanh‘ ] |
在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:
1 2 3 4 | #!/usr/bin/python def Pots(): print "I‘m Pots Phone" |
同样地,我们有另外两个保存了不同函数的文件:
Phone/Isdn.py 含有函数Isdn()
Phone/G3.py 含有函数G3()
现在,在Phone目录下创建file: __init__.py:
Phone/__init__.py
当你导入Phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句,如下:
1 2 3 | from Pots import Pots from Isdn import Isdn from G3 import G3 |
当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。
1 2 3 4 5 6 7 8 | #!/usr/bin/python # Now import your Phone Package. import Phone Phone.Pots() Phone.Isdn() Phone.G3() |
以上实例输出结果:
1 2 3 | I‘m Pots Phone I‘m 3G Phone I‘m ISDN Phone |
如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。
raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):
1 2 3 4 | #!/usr/bin/python str = raw_input ( "Enter your input: " ); print "Received input is : " , str |
这将提示你输入任意字符串,然后在屏幕上显示相同的字符串。当我输入"Hello Python!",它的输出如下:
1 2 | Enter your input : Hello Python Received input is : Hello Python |
input([prompt]) 函数和raw_input([prompt]) 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果。
1 2 3 4 | #!/usr/bin/python str = input ( "Enter your input: " ); print "Received input is : " , str |
这会产生如下的对应着输入的结果:
1 2 | Enter your input : [x * 5 for x in range ( 2 , 10 , 2 )] Recieved input is : [ 10 , 20 , 30 , 40 ] |
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。
语法:
1 | file object = open (file_name [, access_mode][, buffering]) |
各个参数的细节如下:
不同模式打开文件的完全列表:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
如下实例:
1 2 3 4 5 6 7 8 | #!/usr/bin/python # 打开一个文件 fo = open ( "foo.txt" , "wb" ) print "Name of the file: " , fo.name print "Closed or not : " , fo.closed print "Opening mode : " , fo.mode print "Softspace flag : " , fo.softspace |
以上实例输出结果:
1 2 3 4 | Name of the file : foo.txt Closed or not : False Opening mode : wb Softspace flag : 0 |
File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯。
语法:
1 | fileObject.close(); |
例子:
1 2 3 4 5 6 7 8 | #!/usr/bin/python # 打开一个文件 fo = open ( "foo.txt" , "wb" ) print "Name of the file: " , fo.name # 关闭打开的文件 fo.close() |
以上实例输出结果:
1 | Name of the file : foo.txt |
file对象提供了一系列方法,能让我们的文件访问更轻松。来看看如何使用read()和write()方法来读取和写入文件。
Write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
Write()方法不在字符串的结尾不添加换行符(‘\n‘):
语法:
1 | fileObject.write(string); |
在这里,被传递的参数是要写入到已打开文件的内容。
例子:
1 2 3 4 5 6 7 8 | #!/usr/bin/python # 打开一个文件 fo = open ( "/tmp/foo.txt" , "wb" ) fo.write( "Python is a great language.\nYeah its great!!\n" ); # 关闭打开的文件 fo.close() |
上述方法会创建foo.txt文件,并将收到的内容写入该文件,并最终关闭文件。如果你打开这个文件,将看到以下内容:
1 2 | Python is a great language. Yeah its great!! |
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
语法:
1 | fileObject.read([count]); |
在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
例子:
就用我们上面创建的文件foo.txt。
1 2 3 4 5 6 7 8 | #!/usr/bin/python # 打开一个文件 fo = open ( "/tmp/foo.txt" , "r+" ) str = fo.read( 10 ); print "Read String is : " , str # 关闭打开的文件 fo.close() |
以上实例输出结果:
1 | Read String is : Python is |
Tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
例子:
就用我们上面创建的文件foo.txt。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/python # 打开一个文件 fo = open ( "/tmp/foo.txt" , "r+" ) str = fo.read( 10 ); print "Read String is : " , str # 查找当前位置 position = fo.tell(); print "Current file position : " , position # 把指针再次重新定位到文件开头 position = fo.seek( 0 , 0 ); str = fo.read( 10 ); print "Again read String is : " , str # 关闭打开的文件 fo.close() |
以上实例输出结果:
1 2 3 | Read String is : Python is Current file position : 10 Again read String is : Python is |
Python的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。
rename()方法需要两个参数,当前的文件名和新文件名。
语法:
1 | os.rename(current_file_name, new_file_name) |
例子:
下例将重命名一个已经存在的文件test1.txt。
1 2 3 4 5 | #!/usr/bin/python import os # 重命名文件test1.txt到test2.txt。 os.rename( "test1.txt" , "test2.txt" ) |
你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。
语法:
1 | os.remove(file_name) |
例子:
下例将删除一个已经存在的文件test2.txt。
1 2 3 4 5 | #!/usr/bin/python import os # 删除一个已经存在的文件test2.txt os.remove( "text2.txt" ) |
三个重要的方法来源能对Windows和Unix操作系统上的文件及目录进行一个广泛且实用的处理及操控,如下:
所有文件都包含在各个不同的目录下,不过Python也能轻松处理。os模块有许多方法能帮你创建,删除和更改目录。
可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
语法:
1 | os.mkdir( "newdir" ) |
例子:
下例将在当前目录下创建一个新目录test。
1 2 3 4 5 | #!/usr/bin/python import os # 创建目录test os.mkdir( "test" ) |
可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
语法:
1 | os.chdir( "newdir" ) |
例子:
下例将进入"/home/newdir"目录。
1 2 3 4 5 | #!/usr/bin/python import os # 将当前目录改为"/home/newdir" os.chdir( "/home/newdir" ) |
getcwd()方法显示当前的工作目录。
语法:
1 | os.getcwd() |
例子:
下例给出当前目录:
1 2 3 4 5 | #!/usr/bin/python import os # 给出当前的目录 os.getcwd() |
rmdir()方法删除目录,目录名称以参数传递。
在删除这个目录之前,它的所有内容应该先被清除。
语法:
1 | os.rmdir( ‘dirname‘ ) |
例子:
以下是删除" /tmp/test"目录的例子。目录的完全合规的名称必须被给出,否则会在当前目录下搜索该目录。
1 2 3 4 5 | #!/usr/bin/python import os # 删除”/tmp/test”目录 os.rmdir( "/tmp/test" ) |
1.wxpython
Python下的GUI编程框架,与MFC的架构相似
下载地址:http://wxpython.org/download.php
2. PyQt
用于Python的QT开发库
下载地址:http://www.riverbankcomputing.com/software/pyqt/download
1. Django
开源web开发框架,它鼓励快速开发,并遵循MVC设计
下载地址: http://www.djangoproject.com/
2. web2py
一个小巧灵活的Web框架,虽然简单但是功能强大
下载地址:http://web2py.com/
1. Matplotlib
用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形
下载地址:http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.0/
2. SciPy
基于Python的matlab实现,旨在实现matlab的所有功能
下载地址:http://pypi.python.org/pypi/scipy/
3. NumPy
基于Python的科学计算第三方库,提供了矩阵,线性代数,傅立叶变换等等的解决方案
下载地址:http://pypi.python.org/pypi/numpy/
1. BeautifulSoup,强大的容错功能
网页处理非常强大的包:http://www.crummy.com/software/BeautifulSoup/
2. PyQuery,在Python中如网页的 jQuery一样处理文档
下载:https://pypi.python.org/pypi/pyquery
文档:https://pythonhosted.org/pyquery/
1. MySQLdb
用于连接MySQL数据库
下载地址:http://pypi.python.org/pypi/MySQL-python/
2. PIL
基于Python的图像处理库,功能强大,对图形文件的格式支持广泛
下载地址:http://effbot.org/zone/pil-index.htm
3. PyGame
基于Python的多媒体开发和游戏软件开发模块
下载地址:http://www.pygame.org/download.shtml
4 sh 系统管理
sh 可以让你像执行函数一样执行shell终端命令
下载地址:https://pypi.python.org/pypi/sh
5. pickle (cPickle)
6. json1. cx_Freeze
方便简洁的打包工具,可跨平台!
下载地址:http://cx-freeze.sourceforge.net/
2. psyco
脚本的执行效率多少有点差强人意,虽然优化起来并不是难事,但如果有简单的方法,近乎不用修改源代码,那当然值得去关注一下。psyco 的神奇在于它只需要在代码的入口处调用短短两行代码,性能就能提升 40% 或更多,真可谓是立竿见影!
如果你的客户觉得你的程序有点慢,敬请不要急着去优化代码,psyco 或许能让他立即改变看法。psyco 堪称 Python 的 jit,有许多潜力可以挖掘,如果剩下来给你优化性能的时间已经不多,请马上去阅读它的手册,有许多招儿轻松优化性能。
以上都是一些常用的第三方库,更多请点击:http://pypi.python.org/pypi
标签:
原文地址:http://www.cnblogs.com/xuancaoyy/p/5361125.html