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語言的最大不同
- 沒有大括號
{}
。 - 沒有分號
;
蹦锋。 - 縮進兆沙,縮進,縮進是代碼塊的分界莉掂。
注意:用4個空格來縮進代碼
絕對不要用tab, 也不要tab和空格混用葛圃。
——《谷歌Python編碼規(guī)范 Google Python Style Guide》
- 沒有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
- 關(guān)鍵字class相當(dāng)于@interface,作為一個類定義的開頭属瓣。
- 方法定義(ObjC 里稱函數(shù)為方法载迄,本篇遵循 ObjC 的命名)以 def 關(guān)鍵詞開頭,后接方法標(biāo)識符名稱和圓括號()抡蛙。
- 實例方法的一個參數(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)用子類方法昂利,覆蓋父類同名方法
引用模塊
#方法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)前實例名).父類方法名()