人生苦短,快用Python | 写给iOS程序员的Python手册
Python 脚本在一些 iOS 开源项目中可见,经常用于自动配置等,具有上手快速,内置功能丰富等功效,macOS 也内置了 Python 2.7.10,目前在编程语言排行榜上排名第5(2017年三月份),可见其地位。
本篇的目标是让完全不懂Python的小伙伴对着能看懂
*.py
文件中的代码,你可以收藏本篇,作为精简的Python手册,随时查阅。
查看当前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()
执行文件
用文本编辑器将以上代码保存为Demo.py
,然后在“终端”中执行以下步骤:
$cd [Demo.py所在目录] $chmod a+x Demo.py $./Demo.py
与OC语言的最大不同
- 没有大括号
{}
。 - 没有分号
;
。 - 缩进,缩进,缩进是代码块的分界。
注意:用4个空格来缩进代码
绝对不要用tab, 也不要tab和空格混用。
——《谷歌Python编码规范 Google Python Style Guide》
- 没有switch语句。
逻辑运算
对应 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
- 关键字class相当于@interface,作为一个类定义的开头。
- 方法定义(ObjC 里称函数为方法,本篇遵循 ObjC 的命名)以 def 关键词开头,后接方法标识符名称和圆括号()。
- 实例方法的一个参数总是self,指代当前类(实例)本身,但self这个名字是可改的。
关于第三点,下面举个例子,以下是错误的类函数声明:
class Person def fun(): print "just a fun." // ... aPerson.fun()
运行后会输出错误,表示调用时隐式传了一个参数,你却没实现:
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()
运行结果: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" #设置父类属性 aProgrammer.language = "ObjC" #设置子类属性 aProgrammer.greet() #调用子类方法,覆盖父类同名方法
运行结果
引用模块
#方法1 import math #引用模块math math.sqrt(9) #需要使用模块名 #方法2 from math import sqrt #指定使用math中的sqrt方法 sqrt(9) #可以省略模块名
数组的替代物
不可变数组:元组
类似NSArray,Python使用tuple表示一组静态值:
tuple1 = ('physics', 'chemistry', 1997, 2000); tuple2 = (1, 2, 3, 4, 5 ); tuple3 = "a", "b", "c", "d";
可变数组:列表
类似NSMutableArray,Python使用list表示可变数组:
list1 = ['physics', 'chemistry', 1997, 2000]; list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d"];
数组遍历
fruits = ['banana', 'apple', 'mango'] for fruit in fruits: print '当前字母 :', fruit
检查自己是否为主入口
if __name__== "__main__": main()
这段代码利用了魔法方法__name__
,判断当前程序的名称是否为主函数,以此来让脚本判断自己是被当做模块调用,还是被直接运行的。当被import作为模块调用的时候,__name__
返回的是模块名,而不是 “main“,if以下的main()函数不会被执行。
魔法方法
两个下划线包围来命名,由Python系统自动调用,如aProgrammer = Programmer()
实例化时,会自动调用__init__(self)
调用父类方法:
为了使用 super 方法,改写 Person 的声明:
class Person(object): def __init__(self): print "我首先是人类"
声明 Person 继承于基类 object ,这样才能使用 super :
class Programmer(Person): def __init__(self): super(Programmer, self).__init__() print "我是程序员"
super 的调用格式为:
super(当前类名, 当前实例名).父类方法名()
原文地址:https://www.jianshu.com/p/86f8328eedc5
相关推荐
-
python搭建http服务器与手机共享文件 python基础
2019-8-29
-
JSON 字典转对象 python基础
2019-8-29
-
jupyterlab——下一代notebook python基础
2019-2-24
-
利用python pulp做线性规划 python基础
2019-8-26
-
python网络编程-udp python基础
2019-3-20
-
更好的使用Pycharm python基础
2019-2-26
-
代码阅读神器——Sourceinsight python基础
2019-2-24
-
Python数据结构——二叉搜索树的实现(下) python基础
2018-2-26
-
五分钟理解一致性哈希算法(consistent hashing)(转载) python基础
2019-8-26
-
使用HTTPBin测试HTTP库 python基础
2019-8-26