【感謝@劉見康 的翻譯,@熊崽Kevin 校稿。如果其他朋友也有不錯的原創或譯文,可以嘗試投遞到伯樂頭條。】
初試牛刀
假設你希望學習Python這門語言,卻苦于找不到一個簡短而全面的入門教程。那么本教程將花費十分鐘的時間帶你走入Python的大門。本文的內容介于教程(Toturial)和速查手冊(CheatSheet)之間,因此只會包含一些基本概念。很顯然,如果你希望真正學好一門語言,你還是需要親自動手實踐的。在此,我會假定你已經有了一定的編程基礎,因此我會跳過大部分非Python語言的相關內容。本文將高亮顯示重要的關鍵字,以便你可以很容易看到它們。另外需要注意的是,由于本教程篇幅有限,有很多內容我會直接使用代碼來說明加以少許注釋。
Python的語言特性
Python是一門具有強類型(即變量類型是強制要求的)、動態性、隱式類型(不需要做變量聲明)、大小寫敏感(var和VAR代表了不同的變量)以及面向對象(一切皆為對象)等特點的編程語言。
獲取幫助
你可以很容易的通過Python解釋器獲取幫助。如果你想知道一個對象(object)是如何工作的,那么你所需要做的就是調用help(
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中沒有強制的語句終止字符,且代碼塊是通過縮進來指示的。縮進表示一個代碼塊的開始,逆縮進則表示一個代碼塊的結束。聲明以冒號(:)字符結束,并且開啟一個縮進級別。單行注釋以井號字符(#)開頭,多行注釋則以多行字符串的形式出現。賦值(事實上是將對象綁定到名字)通過等號(“=”)實現,雙等號(“==”)用于相等判斷,”+=”和”-=”用于增加/減少運算(由符號右邊的值確定增加/減少的值)。這適用于許多數據類型,包括字符串。你也可以在一行上使用多個變量。例如:
>>> 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表示最后一個元素。數組元素還能指向函數。來看下面的用法:
>>> 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是最后一個項目),例如:
>>> 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來指代變量的位置,或者使用字典來代替,示例如下:
>>>
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()函數。以下是這些聲明的語法示例:
聲明的語法示例:
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傳遞的參數形式本質上是引用傳遞,但是會產生值傳遞的效果)。例如:
# 作用等同于 def funcvar(x): return x + 1
funcvar
=
lambda
x: x
+
1
>>>
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
>>>
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