邊做邊學,Python&Django實戰教程-03十分鐘快速了解Python

十分鐘快速了解Python

  • 期望達成的目標:

    對Python有一個初步的認識,知道什麼是Python,Python好不好學,值不值得學

  • 參考鏈接:


    Learn X in Y minutes 中文版英文版

    Learn Python The Hard Way

    Python官方文檔 中文版英文版

    廖雪峰的官方網站

  • 概述:

    通過一個農場主的小例子介紹大家了解Python

  • 想說的話:

    這次我推薦大家先看我的文章,然後再按照我給出的順序來看參考文章,相信你會找到一種玩遊戲升級打怪的快感。

如果上一篇博客讓您一頭霧水,不知道您有沒有去嘗試解決這些問題呢?

相信您一定會的!

還記得我們需要解決哪些問題嗎?

  • (),[],{}分別在python中表示哪種數據類型
  • ()和[]有什麼區別
  • 什麼是不可變對象
  • 了解python字元串變數
  • django中url配置是怎麼發揮作用的

如果您還沒有動手查資料,那我再幫您一把,不妨用下面的關鍵字去百度一下吧~

  • python數據類型
  • python list和tuple的區別
  • python 不可變對象
  • python字元串
  • django url

好了,言歸正傳!看到圖中那個富甲一方、高大、威猛、帥氣的小伙兒了嗎?

假設這是在說我哈(捂臉逃),我的農場裡面都有哪些小動物呢?我自己也不太記得,但是我把答案寫在了一張紙上面。

嗯,這樣就好記多了。但是不對啊,怎麼看我都是生活在國外的嘛,寫漢字的話,我的鄰居可就看不懂了。好吧,我們來寫成英文。

嗯,這樣就完美了。

如果我告訴你,我們剛剛完成了一個python列表,你會相信嗎?

不用懷疑,編程本身就是為了用計算機解決生活中遇到的問題,編程語言也不過是自然語言在計算機中的表示。python作為一門優雅的語言,當然是越接近自然語言越好嘍。我們來看看到底列表長什麼樣子:

my_animal = ["chicken", "dog", "cow", "horse"]n

不太一樣,是嗎?我們來看看這個列表在內存中的表示:

怎麼樣,有點意思了吧。

如果想要知道我們在列表的第一項寫的是什麼動物,可以這麼做

my_animal[0]n

好吧,列表的下標是從0開始的!如果是想知道最後一個呢?可以這麼做:

my_animal[-1]n

不要忘記動手,打開命令行,輸入python,回車就可以進入python交互環境了,先把上面的代碼輸入進入看看效果吧

我們一直在用my_animal,它是個什麼呢?是一個列表(list)類型的變數。和大多數語言一樣,在給python的變數起名字的時候只能用字母、數字、下劃線的組合,而且不能以數字開頭哦。想一想我們註冊知乎賬號的時候是不是也有類似的限制呢。

輸入 help(list) 可以看到list的文檔哦,通常我們只需要關心不帶下劃線的變數和方法。

現在回到我們的農場。你發現如果把雞和狗放在一個農舍里,它們很難和平相處,不是有個詞叫雞飛狗跳嗎?作為一個剛剛管理農場的富二代,你還不知道怎麼處理這個問題,於是你寫了一張紙條去諮詢你的鄰居,你的問題可以這樣描述

如果雞和狗在一起:n 雞飛狗跳n

哦對了,要寫英文。

if dog and chicken is together:n they never rest n

用python怎麼寫呢?

together = truenif together:n dog.run()n chicken.jump()n

我們知道英語里true和false表示的是真和假,我們定義了一個變數,變數名是together,我們用這個變數來表示是不是把雞和狗放在了一個農舍里。用來表示真或假的變數我們稱之為布爾變數。

if在python裡面表示判斷的意思,和自然語言完全一樣。還可以和else搭配使用

if together:n #雞飛狗跳nelse:n #相安無事n

我們看到dog.run()和chicken.jump()兩行的前面都有縮進,就像是我們寫文章時另起了一個段落一樣。這是python的特別之處:通過縮進來表示語義的層級關係。相同縮進量的行具有相同的層級,比如if和else是同一層級。

如果想要讓某一行代碼不運行,可以在這一行的前面添加#,就像上面我們做的那樣,#雞飛狗跳 、#相安無事 兩行並不會執行。

你一定很好奇dog.run()和chicken.jump()是怎麼回事!這個就涉及到面向對象編程了,也很簡單。

什麼是對象呢?對象是類的一個實例。那什麼又是類呢?類是人們對世間萬物的強制劃分。比如說你在馬路上看到一個小動物,它有尾巴,四條腿,經常吐舌頭,很自然的你會想到這是一隻小狗。正是有了類的概念我們的世界才能高效的運轉,試想一下,如果沒有狗這個概念,你每次都要說」有尾巴,四條腿,經常吐舌頭的小動物「,而且就算你這麼表達了,也不能確定別人的理解是不是跟你的表達一致。

好吧,講了這麼多,想必應該是清楚了。「狗」是一個類,具體到「一隻叫tony 的狗」就是一個對象了。看到「類」這個概念是如此的強大,我們的前輩程序員們把這個概念引入了計算機世界。在python中,我們可以這樣定義一個類

class Dog(object):n def run(self):n passn

我們可以這樣創建一個對象

dog = Dog()n

好吧,說了這麼多隻要大家對類有個認識就可以了。以後還會經常打交道的。

就在我們研究類的時候,你終於收到了鄰居的回信,它們建議你分兩個農舍來養小動物

farmhouse1 = [chicken,horse]nfarmhouse2 = [dog,cow]nnmy_animal = [farmhouse1, farmhouse2]n

這不是在列表裡面存放了列表嗎?是的,python允許你這麼做。理論上python的列表裡可以任何類型的數據。

如果我們把上面的中括弧換成圓括弧,我們就掌握了另外一種有意思的數據類型,元組(tuple)

my_animal = (farmhouse1, farmhouse2)n

你可以把它看成是一種特殊的列表,因為它只是在列表的基礎上加了一條限制:tuple一旦定義就不可以被修改。因此它沒有insert和append等使列表發生變化的方法。不要忘記使用help在命令行查看一下哦。

有意思的是,我們雖然不能修改元組本身,但是如果元組包含了列表,就像my_animal = (farmhouse1, farmhouse2)這樣,我們是可以修改farmhouse1和farmhouse2裡面的內容的。比如:

farmhouse1.append("pig")n

我們可以這麼理解:元組中的農舍本身是不動產,但是農舍裡面的東西是動產,我可以隨意的挪動、取出、添加。

好了,關於tuple,還有一個好的習慣:總是在最後一個元素的後面添加一個逗號,像這樣

my_animal = farmhouse1, farmhouse2,n

。至於為什麼,大家不妨去搜索一下。

鄰居們的建議很好的解決了問題。但是你從鄰居們的回信中看到了一個奇怪的表達方式:

my_animal = {"farmhouse1": ["chicken", "horse" ], "farmhouse2": ["dog", "cow"] } n

開始你還不太理解,但是仔細想想,他的解決思路其實是和上面一樣的,只是表達方式不同。

你很喜歡這種優雅的表達方式,它既指明了兩個農舍,也同時用冒號指明了農舍里的小動物是什麼。如果我們想知道農舍1裡面有什麼小動物,我們可以這麼做

my_animal[farmhouse1]n

看一下我們以前是怎麼做的

my_animal[0]n

好處顯而易見,我們清楚的知道想要獲取哪方面的信息,就像是我們想了解python就在搜索引擎里寫上python作為關鍵字一樣。

好了,感謝我親愛的鄰居們幫忙解決了問題,同時也欣賞了一門優雅的語言。

再來看看上一節的內容,現在能全部看懂了嗎?

  • 添加INSTALLED_APPS

    INSTALLED_APPS = (n django.contrib.admin,n django.contrib.auth,n django.contrib.contenttypes,n django.contrib.sessions,n django.contrib.messages,n django.contrib.staticfiles,n django_comments,n django.contrib.sites,n mptt,n tagging,n zinnia,n)n

  • 添加 Template Context Processors

    TEMPLATES = [n {n BACKEND: django.template.backends.django.DjangoTemplates,n DIRS: [],n APP_DIRS: True,n OPTIONS: {n context_processors: [n django.template.context_processors.debug,n django.template.context_processors.request,n django.contrib.auth.context_processors.auth,n django.contrib.messages.context_processors.messages,n zinnia.context_processors.version, # Optionaln ],n },n },n]n

  • 修改時區和語言

    LANGUAGE_CODE = zh-hansnnTIME_ZONE = America/Chicagon

  • 修改Sites

    SITE_ID = 1n

  • 設置blog標記語言

    ZINNIA_MARKUP_LANGUAGE = markdownn

  • 添加urls

    urlpatterns = [ url(r^admin/, include(admin.site.urls)), url(r^weblog/, include(zinnia.urls, namespace=zinnia)), url(r^comments/, include(django_comments.urls)), ]n

如果沒有完全看懂,不妨來看看其它的Python入門教程,都是超贊的哦

Learn X in Y minutes 中文版英文版

Learn Python The Hard Way

Python官方文檔 中文版英文版

廖雪峰的官方網站

這些都是很好的教程,不要小看他們哦,記得去看並且實踐。

下一節我們再來講解Django處理web請求的過程。

推薦閱讀:

TAG:马志峰的编程笔记 | 中文版 | 英文版 | LearnPythonTheHardWay | 中文版 | 英文版 | 廖雪峰的官方网站 | 中文版 | 英文版 | LearnPythonTheHardWay | 中文版 | 英文版 | 廖雪峰的官方网站 |