人生苦短恬砂,快用Python | 寫給iOS程序員的Python手冊


Python 腳本在一些 iOS 開源項目中可見,經(jīng)常用于自動配置等蓬痒,具有上手快速泻骤,內(nèi)置功能豐富等功效,macOS 也內(nèi)置了 Python 2.7.10梧奢,目前在編程語言排行榜上排名第5(2017年三月份)狱掂,可見其地位。
本篇的目標(biāo)是讓完全不懂Python的小伙伴對著能看懂*.py文件中的代碼亲轨,你可以收藏本篇趋惨,作為精簡的Python手冊,隨時查閱惦蚊。

查看當(dāng)前Python版本

在“終端”中輸入$符號后的命令:

$python --version

Helloworld

print "hello, world!"

完整例子

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Person:
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print "Hello, world! I'm %s." % self.name

aPerson = Person()
aPerson.name = "XiShiiOS"
aPerson.greet()

執(zhí)行文件

用文本編輯器將以上代碼保存為Demo.py器虾,然后在“終端”中執(zhí)行以下步驟:

$cd [Demo.py所在目錄]
$chmod a+x Demo.py
$./Demo.py

與OC語言的最大不同

  1. 沒有大括號{}
  2. 沒有分號;蹦锋。
  3. 縮進兆沙,縮進,縮進是代碼塊的分界莉掂。

注意:用4個空格來縮進代碼
絕對不要用tab, 也不要tab和空格混用葛圃。
——《谷歌Python編碼規(guī)范 Google Python Style Guide》

  1. 沒有switch語句。

邏輯運算

對應(yīng) C語言的&&(與),||(或)装悲,!(非)昏鹃,Python 的邏輯運算符為: and, or诀诊, not

nil

Python中用 None 來表示 nil 和 Null洞渤。

使用中文

頭部聲明 # -*- coding: utf-8 -*-

定義“人”類:

class Person 
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print "Hello, world! I'm %s." % self.name
  1. 關(guān)鍵字class相當(dāng)于@interface,作為一個類定義的開頭属瓣。
  2. 方法定義(ObjC 里稱函數(shù)方法载迄,本篇遵循 ObjC 的命名)以 def 關(guān)鍵詞開頭,后接方法標(biāo)識符名稱和圓括號()抡蛙。
  3. 實例方法的一個參數(shù)總是self护昧,指代當(dāng)前類(實例)本身,但self這個名字是可改的粗截。
    關(guān)于第三點惋耙,下面舉個例子,以下是錯誤的類函數(shù)聲明:
class Person 
    def fun():
        print "just a fun."
// ...
aPerson.fun()

運行后會輸出錯誤熊昌,表示調(diào)用時隱式傳了一個參數(shù)绽榛,你卻沒實現(xiàn):

Traceback (most recent call last):
  File "./Demo.py", line 23, in <module>
    aPerson.fun()
TypeError: fun() takes no arguments (1 given)

而以下聲明是可以的,myself 代替了 self:

def fun(myself):
        print "just a fun.%s" % (myself.__class__)
// ...
aPerson.fun()

運行結(jié)果:just a fun.__main__.Person
不過盡量遵循self這樣的“公約”婿屹,避免給自己找麻煩灭美。

繼承

定義一個“程序員”類,繼承自Person類:

class Programmer(Person):
    def setUsingLanguage(self, language):
        self.language = language

    def getLanguage(self):
        return self.language
    
    def greet(self):
        print "Hello, world! I'm %s, I use %s language." % (self.name, self.language)

aProgrammer = Programmer()
aProgrammer.name = "XiShiiOS" #設(shè)置父類屬性
aProgrammer.language = "ObjC" #設(shè)置子類屬性
aProgrammer.greet() #調(diào)用子類方法昂利,覆蓋父類同名方法
運行結(jié)果

引用模塊

#方法1
import math #引用模塊math
math.sqrt(9) #需要使用模塊名

#方法2
from math import sqrt #指定使用math中的sqrt方法
sqrt(9) #可以省略模塊名

數(shù)組的替代物

不可變數(shù)組:元組

類似NSArray届腐,Python使用tuple表示一組靜態(tài)值:

tuple1 = ('physics', 'chemistry', 1997, 2000);
tuple2 = (1, 2, 3, 4, 5 );
tuple3 = "a", "b", "c", "d";

可變數(shù)組:列表

類似NSMutableArray,Python使用list表示可變數(shù)組:

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

數(shù)組遍歷

fruits = ['banana', 'apple',  'mango']
for fruit in fruits:
    print '當(dāng)前字母 :', fruit

檢查自己是否為主入口

if __name__== "__main__":
    main()

這段代碼利用了魔法方法__name__蜂奸,判斷當(dāng)前程序的名稱是否為主函數(shù)犁苏,以此來讓腳本判斷自己是被當(dāng)做模塊調(diào)用,還是被直接運行的扩所。當(dāng)被import作為模塊調(diào)用的時候傀顾,__name__返回的是模塊名,而不是 "main"碌奉,if以下的main()函數(shù)不會被執(zhí)行短曾。

魔法方法

兩個下劃線包圍來命名,由Python系統(tǒng)自動調(diào)用赐劣,如aProgrammer = Programmer() 實例化時嫉拐,會自動調(diào)用__init__(self)

調(diào)用父類方法:

為了使用 super 方法,改寫 Person 的聲明:

class Person(object):
    def __init__(self):
        print "我首先是人類"

聲明 Person 繼承于基類 object 魁兼,這樣才能使用 super :

class Programmer(Person):
    def __init__(self):
        super(Programmer, self).__init__()
        print "我是程序員"

super 的調(diào)用格式為:
super(當(dāng)前類名, 當(dāng)前實例名).父類方法名()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婉徘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盖呼,老刑警劉巖儒鹿,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異几晤,居然都是意外死亡约炎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門蟹瘾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圾浅,“玉大人,你說我怎么就攤上這事憾朴±瓴叮” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵众雷,是天一觀的道長灸拍。 經(jīng)常有香客問我,道長砾省,這世上最難降的妖魔是什么鸡岗? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纯蛾,結(jié)果婚禮上纤房,老公的妹妹穿的比我還像新娘纵隔。我一直安慰自己翻诉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布捌刮。 她就那樣靜靜地躺著碰煌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绅作。 梳的紋絲不亂的頭發(fā)上芦圾,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音俄认,去河邊找鬼个少。 笑死,一個胖子當(dāng)著我的面吹牛眯杏,可吹牛的內(nèi)容都是我干的夜焦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼岂贩,長吁一口氣:“原來是場噩夢啊……” “哼茫经!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤卸伞,失蹤者是張志新(化名)和其女友劉穎抹镊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤傲,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡垮耳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弃酌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氨菇。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妓湘,靈堂內(nèi)的尸體忽然破棺而出查蓉,到底是詐尸還是另有隱情,我是刑警寧澤榜贴,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布豌研,位于F島的核電站,受9級特大地震影響唬党,放射性物質(zhì)發(fā)生泄漏鹃共。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一驶拱、第九天 我趴在偏房一處隱蔽的房頂上張望霜浴。 院中可真熱鬧,春花似錦蓝纲、人聲如沸阴孟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽永丝。三九已至,卻和暖如春箭养,著一層夾襖步出監(jiān)牢的瞬間慕嚷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工毕泌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喝检,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓撼泛,卻偏偏與公主長得像挠说,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坎弯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • LEGO全球最大級的參加體驗型活動“BRICKLIVE(R) in JAPAN 2017”纺涤,將于2017年4月1日...
    在日本閱讀 336評論 0 0
  • 不知從何時起译暂,因為自己的記憶力問題而感到困擾。不去說長期記憶撩炊,就連剛剛發(fā)生過的事外永、看過的文章都無法記住。至于以往的...
    如心1976閱讀 559評論 3 0
  • ??人生旅途拧咳,道阻且長伯顶。 每個人都要活出對自我的激勵,對生活的祝福骆膝,要變的信心滿滿祭衩。 也許人這一生,要走很長很長充...
    海月中天閱讀 258評論 0 0
  • 對不起阅签,我還是逃開了掐暮。 又是半年多沒回家,心里想回亦不想回 想著某些人政钟,躲著某些事路克。 這些事本該記著,卻刻意去忘記...
    小鳳漫聊閱讀 188評論 0 0
  • 原文請戳:http://clarkesworldmagazine.com/swirsky_02_11/ 原作者:雷...
    有貓出沒閱讀 551評論 0 1