十分鐘學會 Python

2021-03-02 Linux中國

初試牛刀

假設你希望學習Python這門語言,卻苦於找不到一個簡短而全面的入門教程。那麼本教程將花費十分鐘的時間帶你走入Python的大門。本文的內容介於教程(Toturial)和速查手冊(CheatSheet)之間,因此只會包含一些基本概念。很顯然,如果你希望真正學好一門語言,你還是需要親自動手實踐的。在此,我會假定你已經有了一定的編程基礎,因此我會跳過大部分非Python語言的相關內容。本文將高亮顯示重要的關鍵字,以便你可以很容易看到它們。另外需要注意的是,由於本教程篇幅有限,有很多內容我會直接使用代碼來說明加以少許注釋。

Python的語言特性

Python是一門具有強類型(即變量類型是強制要求的)、動態性、隱式類型(不需要做變量聲明)、大小寫敏感(var和VAR代表了不同的變量)以及面向對象(一切皆為對象)等特點的程式語言。

獲取幫助

你可以很容易的通過Python解釋器獲取幫助。如果你想知道一個對象(object)是如何工作的,那麼你所需要做的就是調用help(<object>)!另外還有一些有用的方法,dir()會顯示該對象的所有方法,還有<object>.__doc__會顯示其文檔:

>>> 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(<number>)函數。以下是這些聲明的語法示例:

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傳遞的參數形式本質上是引用傳遞,但是會產生值傳遞的效果)。例如:

# Same as def funcvar(x): return x + 1

funcvar = lambda x: x + 1

>>> print funcvar(1)

2

# an_int and a_string are optional, they have default values

# if one is not passed (2 and "A default string", respectively).

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的強制要求)。當然,我們也可以給類的實例取任意名稱。例如:

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] 塊處理,例如:

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] 來導入所需要的函數。例如:

import random

from time import clock

randomint = random.randint(1, 100)

>>> print randomint

64

文件I / O

Python針對文件的處理有很多內建的函數庫可以調用。例如,這裡演示了如何序列化文件(使用pickle庫將數據結構轉換為字符串):

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]

其它雜項

>>> 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 a condition is true for any items.

# "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 for how many items a condition is 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會將此變量按照新的局部變量處理(請注意,如果不注意很容易被坑)。例如:

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的哪方面內容,請留言。

本教程適合作一個簡短的電子書。電子書後續額外提供的各種Python最佳實踐都在一本獨立的電子書裡,感興趣的同學可以到 https://leanpub.com/learn-python 購買。購買後可以免費獲取更新。

來源:伯樂在線 原文:http://www.stavros.io/tutorials/python/作者: Stavros Korokithakis
譯文:http://blog.jobbole.com/43922/譯者: 劉見康


相關焦點

  • Python入門指南教程:10天學會使用python做爬蟲!免費領取!
    從去年開始,公眾號鋪天蓋地的python廣告,讓很多行外人也知道了python這個東西,python語言開始變得無所不能,剛畢業的新手用python能做什麼?三分鐘做好了職場老手一天才能做完的表格十分鐘採集下全網競爭對手的數據寫一個軟體一年躺賺幾十萬!對於圈外人聽起來好像很有誘惑力,每天幾小時,學習下來能做很多很多牛逼的事,甚至升職加薪,人生趟贏。但是,事情真的這麼簡單嗎?前些天我弟弟突然聊天,推薦我學python,我把聊天截圖給了學計算機的楊先生。
  • 我是如何在六個月內學會 Python 的?
    我的目標是提升自己數據科學方面的技能並將自己的職業方向往分析領域傾斜,而學習python只是我計劃的一部分。因此,我學python並不僅僅是為了學而學的。我需要python的實踐知識才能做數據分析,需要理解一系列庫才能開啟我的項目。因此我學習python時內心是抱著一個更大的藍圖的。萬事開頭難,制定好了第一份目標就等於完成了一半。
  • 零基礎自學Python要多久才能學會?
    學習Python開發的周期因人而異,由於基礎、學習效率不同有的人學習進度快,需要六個月到一年不等,有的人自律性較差可能需要更久的時間才能學會,今天小編分享下6個月學習周期內的自學Python的學習路線。
  • 快速入門:十分鐘學會Python
    那麼本教程將花費十分鐘的時間帶你走入Python的大門。本文的內容介於教程(Toturial)和速查手冊(CheatSheet)之間,因此只會包含一些基本概念。很顯然,如果你希望真正學好一門語言,你還是需要親自動手實踐的。在此,我會假定你已經有了一定的編程基礎,因此我會跳過大部分非Python語言的相關內容。本文將高亮顯示重要的關鍵字,以便你可以很容易看到它們。
  • 如何用十分鐘學會函數式 Python?
    如果想了解更多關於解析式的內容,可以看看這個可視化的指南(http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/)。
  • 你還在為安裝python第三方庫而發愁嗎?學會查錯很重要
    相信許多開始學習python的小夥伴,都遇到過一個頭疼的問題。那就是安裝python第三方庫時,總是碰壁,官方給出的方法是打開cmd命令窗口,然後輸入pip install 你所要安裝的第三方庫名稱,然後接下來電腦就會自動安裝第三方庫,前提是你的電腦裡已經安裝了python軟體。
  • 2016公務員考試申論指導:十分鐘學會寫通知
    2016公務員考試申論指導:十分鐘學會寫通知由廣東公務員考試網申論欄目由提供,更多關於2016公務員考試申論指導,十分鐘學會寫通知,廣東公務員申論的內容,請關注廣東公務員考試頻道/廣東公務員考試網!
  • 只要十分鐘,python繪圖神器turtle了解一下?
    python的強大在於它有許多的強大的庫,turtle就是其中之一。利用turtle,你可以進行交互式的繪畫,作為一個藝術白痴,想要畫一幅畫可能很困難,但是利用python的turtle庫,只需要幾行代碼你就能實現繪畫。
  • 零基礎python入門,教到你學會為止
    學習時間無限制,隨到隨學,有問必答,直到你學會。1. 用python編寫簡單的代碼,如數學計算、文字交互小遊戲2. 能用代碼批量處理數據、文件等重複繁瑣的工作,提升工作效率3.為支持 python 的軟體編寫自動化運行腳本5. 熟悉代碼運行邏輯,掌握常用的數據類型和方法6. 學會通過搜索、查文檔解決編程中的問題,掌握代碼調試的方法7.
  • 用Python加Django十分鐘建個網站
    一直聽說很強大,甚至曾經很紅的Ruby On Rails都參考了它的很多概念,今天我們就簡單學習一個首先當然要pip install django然後我們就可以新建一個目錄,在這個目錄下執行django-admin startproject HelloWorld它會創建HelloWord子目錄, 然後進入這個子目錄python
  • python入門書籍,輕鬆學python
    全民學python的熱潮已經開啟,然而,對於這種情況,還是有很多小夥伴私信我python到底該怎麼入門?沒接觸過編程能學會嗎?
  • 從零開始學會Python 爬蟲,該怎麼做?
    其實沒那麼玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: https://github.com/nvie/rqrq和Scrapy的結合:darkrho/scrapy-redis · GitHub後續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)1)
  • python是什麼,python能幹什麼,為什麼大家都學pyhon一起來看看吧
    相信大家如果經常上網,就會看到各種學python的教程,那麼python究竟是什麼意思,學會了可以用來幹什麼那,我們一起來看一下吧。首先大家要明白python是一種跨平臺的程式語言,python編程的特點易讀、易維護,所以被大量的用戶所歡迎,python最大的特點是開發速度快,因為編程開發效率一直很低,python有很多第三方庫,所以開發起來事半功倍,很流行的一句話,人生苦短,我學python,可謂是把python特點完整的詮釋出來。
  • Python前景如何?學會Python工作好找嗎?
    搭上Python這列順風車,早一天學會早一天拿到Python行業的紅利。資料路線圖都可以找我拿,什麼都不要,拿的方式是:看我的網名,也就是Python云云的全拼音,然後用這個名字,在(魏X)上找我就行,我還可以給大家一些比較基礎的python項目視頻!
  • Python基礎 | 大學小白如何入門Python程序設計
    二、如何進行自主學習其實python非常適合初學者入門。相比較其他不少主流程式語言,有更好的可讀性,因此上手相對容易。自帶的各種模塊加上豐富的第三方模塊,免去了很多「重複造輪子」的工作,可以更快地寫出東西。
  • 文職美女上班手動用Excel表格太麻煩,當學會python後easy操作
    通過程序操作excel表格是編程中比較常見的操作,python本身不能直接操作excel,需要安裝第三方的模塊來實現excel的操作。3.3 設置寫入單元格的字體大小,顏色和字體類型執行結果如下:顏色值表如下:小編寄語最後小編幫助大家整理了一套python教程
  • 倪新威十分鐘超級記憶法是真的嗎 十分鐘超級記憶法下載
    十分鐘超級記憶法到底是不是真的?不少了解一些十分鐘超級記憶法的家長和孩子對此問題都十分關注。學習講究的是方法,死記硬背絕對不能起到很好的效果。那麼,十分鐘超級記憶法到底是不是真的呢?十分鐘超級記憶法到底是不是真的?時下教育孩子是父母最關注的話題,簡單明了就是怎樣教育好孩子,能把孩子潛能激發出來的教育,培養孩子學會學習,學會追求幸福未來,學會如何成功成才的教育。
  • Python最佳經典學習路線
    如何學習Python python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例) (1)Python3入門,數據類型,字符串 (2)判斷/循環語句,函數,
  • 一個月學會Python的Quora指南和資料放送
    如何一個月學會使用Python文章翻譯自Quora上的回帖,略有改動。
  • Python自學行嗎?Python自學能不能學會,有用嗎?-開課吧
    python自學是有一些難度的,當然,如果你現在只想入門,等工作後再同時學習的話,入門是沒問題的。但就是不知道你有編程和計算機方面的基礎嗎?作為初學者,不要以為從一開始就看完一本書就能學會這門語言,你往往是對編程一無所知,所以你買的書可能不會為你帶來太大的效益。我在初學Python編程的時候,並沒有直接去購買相關書籍,而是先通過各種互聯渠道去了解Python編程的一些基本知識,在這過程中我們就會收穫到很多Python先行者們分享的一些學習經驗,他們的經驗往往會讓我們的編程學習事半功倍。