函数 函数通过“def”关键字进行声明。可选参数以集合的方式出现在函数声明中并紧跟着必选参数,可选参数可以在函数声明中被赋予一个默认值。已命名的参数需要赋值。函数可以返回一个元组(使用元组拆包可以有效返回多个值)。Lambda函数是由一个单独的语句组成的特殊函数,参数通过引用进行传递,但对于不可变类型(例如元组,整数,字符串等)则不能够被改变。这是因为只传递了该变量的内存地址,并且只有丢弃了旧的对象后,变量才能绑定一个对象,所以不可变类型是被替换而不是改变(译者注:虽然Python传递的参数形式本质上是引用传递,但是会产生值传递的效果)。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | funcvar = lambda x: x + 1
>>> print funcvar( 1 )
2
def passing_example(a_list, an_int = 2 , a_string = "A default string" ):
a_list.append( "A new item" )
an_int = 4
return a_list, an_int, a_string
>>> my_list = [ 1 , 2 , 3 ]
>>> my_int = 10
>>> print passing_example(my_list, my_int)
([ 1 , 2 , 3 , 'A new item' ], 4 , "A default string" )
>>> my_list
[ 1 , 2 , 3 , 'A new item' ]
>>> my_int
10
|
类 Python支持有限的多继承形式。私有变量和方法可以通过添加至少两个前导下划线和最多尾随一个下划线的形式进行声明(如“__spam”,这只是惯例,而不是Python的强制要求)。当然,我们也可以给类的实例取任意名称。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | class MyClass( object ):
common = 10
def __init__( self ):
self .myvariable = 3
def myfunction( self , arg1, arg2):
return self .myvariable
>>> classinstance = MyClass()
>>> classinstance.myfunction( 1 , 2 )
3
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
>>> classinstance.common
10
>>> classinstance2.common
50
class OtherClass(MyClass):
def __init__( self , arg1):
self .myvariable = 3
print arg1
>>> classinstance = OtherClass( "hello" )
hello
>>> classinstance.myfunction( 1 , 2 )
3
>>> classinstance.test = 10
>>> classinstance.test
10
|
异常 Python中的异常由 try-except [exceptionname] 块处理,例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def some_function():
try :
10 / 0
except ZeroDivisionError:
print "Oops, invalid."
else :
pass
finally :
print "We're done with that."
>>> some_function()
Oops, invalid.
We're done with that.
|
导入 外部库可以使用 import [libname] 关键字来导入。同时,你还可以用 from [libname] import [funcname] 来导入所需要的函数。例如: 1 2 3 4 5 6 | import random
from time import clock
randomint = random.randint( 1 , 100 )
>>> print randomint
64
|
文件I / O Python针对文件的处理有很多内建的函数库可以调用。例如,这里演示了如何序列化文件(使用pickle库将数据结构转换为字符串): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pickle
mylist = [ "This" , "is" , 4 , 13327 ]
myfile = open (r "C:\\binary.dat" , "w" )
pickle.dump(mylist, myfile)
myfile.close()
myfile = open (r "C:\\text.txt" , "w" )
myfile.write( "This is a sample string" )
myfile.close()
myfile = open (r "C:\\text.txt" )
>>> print myfile.read()
'This is a sample string'
myfile.close()
myfile = open (r "C:\\binary.dat" )
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
[ 'This' , 'is' , 4 , 13327 ]
|
其它杂项- 数值判断可以链接使用,例如 1<a<3 能够判断变量 a 是否在1和3之间。
- 可以使用 del 删除变量或删除数组中的元素。
- 列表推导式(List Comprehension)提供了一个创建和操作列表的有力工具。列表推导式由一个表达式以及紧跟着这个表达式的for语句构成,for语句还可以跟0个或多个if或for语句,来看下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> lst1 = [ 1 , 2 , 3 ]
>>> lst2 = [ 3 , 4 , 5 ]
>>> print [x * y for x in lst1 for y in lst2]
[ 3 , 4 , 5 , 6 , 8 , 10 , 9 , 12 , 15 ]
>>> print [x for x in lst1 if 4 > x > 1 ]
[ 2 , 3 ]
>>> any ([i % 3 for i in [ 3 , 3 , 4 , 4 , 3 ]])
True
>>> sum ( 1 for i in [ 3 , 3 , 4 , 4 , 3 ] if i = = 4 )
2
>>> del lst1[ 0 ]
>>> print lst1
[ 2 , 3 ]
>>> del lst1
|
- 全局变量在函数之外声明,并且可以不需要任何特殊的声明即能读取,但如果你想要修改全局变量的值,就必须在函数开始之处用global关键字进行声明,否则Python会将此变量按照新的局部变量处理(请注意,如果不注意很容易被坑)。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | number = 5
def myfunc():
print number
def anotherfunc():
print number
number = 3
def yetanotherfunc():
global number
number = 3
|
小结 本教程并未涵盖Python语言的全部内容(甚至连一小部分都称不上)。Python有非常多的库以及很多的功能特点需要学习,所以要想学好Python你必须在此教程之外通过其它方式,例如阅读Dive into Python。我希望这个教程能给你一个很好的入门指导。如果你觉得本文还有什么地方值得改进或添加,或是你希望能够了解Python的哪方面内容,请留言。 本教程适合作一个简短的电子书。电子书后续额外提供的各种Python最佳实践都在一本独立的电子书里,感兴趣的同学可以到 https://leanpub.com/learn-python 购买。购买后可以免费获取更新。
【感谢@刘见康 的翻译,@熊崽Kevin 校稿。】 |