假設你但願學習Python這門語言,卻苦於找不到一個簡短而全面的入門教程。那麼本教程將花費十分鐘的時間帶你走入Python的大門。本文的內容介於教程(Toturial)和速查手冊(CheatSheet)之間,所以只會包含一些基本概念。很顯然,若是你但願真正學好一門語言,你仍是須要親自動手實踐的。在此,我會假定你已經有了必定的編程基礎,所以我會跳過大部分非Python語言的相關內容。本文將高亮顯示重要的關鍵字,以便你能夠很容易看到它們。另外須要注意的是,因爲本教程篇幅有限,有不少內容我會直接使用代碼來講明加以少量註釋。git
Python是一門具備強類型(即變量類型是強制要求的)、動態性、隱式類型(不須要作變量聲明)、大小寫敏感(var和VAR表明了不一樣的變量)以及面向對象(一切皆爲對象)等特色的編程語言。github
你能夠很容易的經過Python解釋器獲取幫助。若是你想知道一個對象(object)是如何工做的,那麼你所須要作的就是調用help(<object>)!另外還有一些有用的方法,dir()會顯示該對象的全部方法,還有<object>.__doc__會顯示其文檔:編程
1
2
3
4
5
6
7
8
9
10
11
|
>>> help(5)
Help on int object:
(etc etc)
>>> dir(5)
['__abs__', '__add__', ...]
>>> abs.__doc__
'abs(number) -> number
Return the absolute value of the argument.'
|
Python中沒有強制的語句終止字符,且代碼塊是經過縮進來指示的。縮進表示一個代碼塊的開始,逆縮進則表示一個代碼塊的結束。聲明以冒號(:)字符結束,而且開啓一個縮進級別。單行註釋以井號字符(#)開頭,多行註釋則以多行字符串的形式出現。賦值(事實上是將對象綁定到名字)經過等號(「=」)實現,雙等號(「==」)用於相等判斷,」+=」和」-=」用於增長/減小運算(由符號右邊的值肯定增長/減小的值)。這適用於許多數據類型,包括字符串。你也能夠在一行上使用多個變量。例如:api
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
>>> myvar = 3
>>> myvar += 2
>>> myvar
5
>>> myvar -= 1
>>> myvar
4
"""This is a multiline comment.
The following lines concatenate the two strings."""
>>> mystring = "Hello"
>>> mystring += " world."
>>> print mystring
Hello world.
# This swaps the variables in one line(!).
# It doesn't violate strong typing because values aren't
# actually being assigned, but new objects are bound to
# the old names.
>>> myvar, mystring = mystring, myvar
|
Python具備列表(list)、元組(tuple)和字典(dictionaries)三種基本的數據結構,而集合(sets)則包含在集合庫中(但從Python2.5版本開始正式成爲Python內建類型)。列表的特色跟一維數組相似(固然你也能夠建立相似多維數組的「列表的列表」),字典則是具備關聯關係的數組(一般也叫作哈希表),而元組則是不可變的一維數組(Python中「數組」能夠包含任何類型的元素,這樣你就可使用混合元素,例如整數、字符串或是嵌套包含列表、字典或元組)。數組中第一個元素索引值(下標)爲0,使用負數索引值可以從後向前訪問數組元素,-1表示最後一個元素。數組元素還能指向函數。來看下面的用法:數組
1
2
3
4
5
6
7
8
9
10
|
>>> sample = [1, ["another", "list"], ("a", "tuple")]
>>> mylist = ["List item 1", 2, 3.14]
>>> mylist[0] = "List item 1 again" # We're changing the item.
>>> mylist[-1] = 3.21 # Here, we refer to the last item.
>>> mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}
>>> mydict["pi"] = 3.15 # This is how you change dictionary values.
>>> mytuple = (1, 2, 3)
>>> myfunction = len
>>> print myfunction(mylist)
3
|
你可使用:運算符訪問數組中的某一段,若是:左邊爲空則表示從第一個元素開始,同理:右邊爲空則表示到最後一個元素結束。負數索引則表示從後向前數的位置(-1是最後一個項目),例如:數據結構
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> mylist = ["List item 1", 2, 3.14]
>>> print mylist[:]
['List item 1', 2, 3.1400000000000001]
>>> print mylist[0:2]
['List item 1', 2]
>>> print mylist[-3:-1]
['List item 1', 2]
>>> print mylist[1:]
[2, 3.14]
# Adding a third parameter, "step" will have Python step in
# N item increments, rather than 1.
# E.g., this will return the first item, then go to the third and
# return that (so, items 0 and 2 in 0-indexing).
>>> print mylist[::2]
['List item 1', 3.14]
|
Python中的字符串使用單引號(‘)或是雙引號(「)來進行標示,而且你還可以在經過某一種標示的字符串中使用另一種標示符(例如 「He said ‘hello’.」)。而多行字符串能夠經過三個連續的單引號(」’)或是雙引號(「」」)來進行標示。Python能夠經過u」This is a unicode string」這樣的語法使用Unicode字符串。若是想經過變量來填充字符串,那麼可使用取模運算符(%)和一個元組。使用方式是在目標字符串中從左至右使用%s來指代變量的位置,或者使用字典來代替,示例以下:app
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>>print "Name: %s\
Number: %s\
String: %s" % (myclass.name, 3, 3 * "-")
Name: Poromenos
Number: 3
String: ---
strString = """This is
a multiline
string."""
# WARNING: Watch out for the trailing s in "%(key)s".
>>> print "This %(verb)s a %(noun)s." % {"noun": "test", "verb": "is"}
This is a test.
|
Python中可使用if、for和while來實現流程控制。Python中並無select,取而代之使用if來實現。使用for來枚舉列表中的元素。若是但願生成一個由數字組成的列表,則可使用range(<number>)函數。如下是這些聲明的語法示例:less
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
|
rangelist = range(10)
>>> print rangelist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in rangelist:
# Check if number is one of
# the numbers in the tuple.
if number in (3, 4, 7, 9):
# "Break" terminates a for without
# executing the "else" clause.
break
else:
# "Continue" starts the next iteration
# of the loop. It's rather useless here,
# as it's the last statement of the loop.
continue
else:
# The "else" clause is optional and is
# executed only if the loop didn't "break".
pass # Do nothing
if rangelist[1] == 2:
print "The second item (lists are 0-based) is 2"
elif rangelist[1] == 3:
print "The second item (lists are 0-based) is 3"
else:
print "Dunno"
while rangelist[1] == 1:
pass
|
函數經過「def」關鍵字進行聲明。可選參數以集合的方式出如今函數聲明中並緊跟着必選參數,可選參數能夠在函數聲明中被賦予一個默認值。已命名的參數須要賦值。函數能夠返回一個元組(使用元組拆包能夠有效返回多個值)。Lambda函數是由一個單獨的語句組成的特殊函數,參數經過引用進行傳遞,但對於不可變類型(例如元組,整數,字符串等)則不可以被改變。這是由於只傳遞了該變量的內存地址,而且只有丟棄了舊的對象後,變量才能綁定一個對象,因此不可變類型是被替換而不是改變(譯者注:雖然Python傳遞的參數形式本質上是引用傳遞,可是會產生值傳遞的效果)。例如:dom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 做用等同於 def funcvar(x): return x + 1
funcvar = lambda x: x + 1
>>> print funcvar(1)
2
# an_int 和 a_string 是可選參數,它們有默認值
# 若是調用 passing_example 時只指定一個參數,那麼 an_int 缺省爲 2 ,a_string 缺省爲 A default string。若是調用 passing_example 時指定了前面兩個參數,a_string 仍缺省爲 A default string。
# a_list 是必備參數,由於它沒有指定缺省值。
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
# This is the class instantiation
>>> classinstance = MyClass()
>>> classinstance.myfunction(1, 2)
3
# This variable is shared by all classes.
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Note how we use the class name
# instead of the instance.
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# This will not update the variable on the class,
# instead it will bind a new object to the old
# variable name.
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
# This has not changed, because "common" is
# now an instance variable.
>>> classinstance.common
10
>>> classinstance2.common
50
# This class inherits from MyClass. The example
# class above inherits from "object", which makes
# it what's called a "new-style class".
# Multiple inheritance is declared as:
# class OtherClass(MyClass1, MyClass2, MyClassN)
class OtherClass(MyClass):
# The "self" argument is passed automatically
# and refers to the class instance, so you can set
# instance variables as above, but from inside the class.
def __init__(self, arg1):
self.myvariable = 3
print arg1
>>> classinstance = OtherClass("hello")
hello
>>> classinstance.myfunction(1, 2)
3
# This class doesn't have a .test member, but
# we can add one to the instance anyway. Note
# that this will only be a member of classinstance.
>>> 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:
# Division by zero raises an exception
10 / 0
except ZeroDivisionError:
print "Oops, invalid."
else:
# Exception didn't occur, we're good.
pass
finally:
# This is executed after the code block is run
# and all exceptions have been handled, even
# if a new exception is raised while handling.
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
|
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]
# Open the file C:\\binary.dat for writing. The letter r before the
# filename string is used to prevent backslash escaping.
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()
# Open the file for reading.
myfile = open(r"C:\\binary.dat")
loadedlist = pickle.load(myfile)
myfile.close()
>>> print loadedlist
['This', 'is', 4, 13327]
|
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]
# Check if an item has a specific property.
# "any" returns true if any item in the list is true.
>>> any([i % 3 for i in [3, 3, 4, 4, 3]])
True
# This is because 4 % 3 = 1, and 1 is true, so any()
# returns True.
# Check how many items have this property.
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 4)
2
>>> del lst1[0]
>>> print lst1
[2, 3]
>>> del lst1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
number = 5
def myfunc():
# This will print 5.
print number
def anotherfunc():
# This raises an exception because the variable has not
# been bound before printing. Python knows that it an
# object will be bound to it later and creates a new, local
# object instead of accessing the global one.
print number
number = 3
def yetanotherfunc():
global number
# This will correctly change the global.
number = 3
|
本教程並未涵蓋Python語言的所有內容(甚至連一小部分都稱不上)。Python有很是多的庫以及不少的功能特色須要學習,因此要想學好Python你必須在此教程以外經過其它方式,例如閱讀Dive into Python。我但願這個教程能給你一個很好的入門指導。若是你以爲本文還有什麼地方值得改進或添加,或是你但願可以瞭解Python的哪方面內容,請留言。
轉自http://blog.jobbole.com/43922/