人生苦短,快用Python | 写给iOS程序员的Python手

作者: 溪石iOS | 来源:发表于2017-03-13 16:22 被阅读2669次

    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语言的最大不同

    1. 没有大括号{}
    2. 没有分号;
    3. 缩进,缩进,缩进是代码块的分界。

    注意:用4个空格来缩进代码
    绝对不要用tab, 也不要tab和空格混用。
    ——《谷歌Python编码规范 Google Python Style Guide》

    1. 没有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
    
    1. 关键字class相当于@interface,作为一个类定义的开头。
    2. 方法定义(ObjC 里称函数方法,本篇遵循 ObjC 的命名)以 def 关键词开头,后接方法标识符名称和圆括号()。
    3. 实例方法的一个参数总是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(当前类名, 当前实例名).父类方法名()

    相关文章

      网友评论

      • xclidongbo:我不能忍的是四个空格的缩进
        溪石iOS:@xclidongbo 设置好编辑器,按一次tab,自动输入4个空格
        xclidongbo:@溪石iOS 是的。按一次就能解决的问题,干嘛要框框框框,敲上4次?
        溪石iOS:@xclidongbo 难道你是tab党?
      • 9a996ce6ed8d:和swift更像一点
        溪石iOS:@blackforever 是的,swift借鉴了脚本语言
      • 爃少:就是介绍了一些基本语法,所以跟iOS开发有什么卵关系?
        爃少:@溪石iOS 那你写这个标题,结果是些基础语法介绍....
        溪石iOS:@夜晚看日出 正解:+1::+1::+1:
        CholMay:python写脚本很方便,比如ios打包比较麻烦,但是写个脚本,终端一行代码完成打包
      • 开发者头条_程序员必装的App:感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/1di04m 欢迎点赞支持!
        欢迎订阅《iOS与swift学习之路》https://toutiao.io/subjects/35291
      • 硬朗柔软:我最不能容忍的就是:没有大括号。
        溪石iOS:@sfuncc 习惯了后发现,原来只要对齐就可以了:sweat_smile:
      • liwb:对于python学习,楼主有什么好的书推荐?学习python是从2.7开始还是3.0+呢?
        攻城狮小强:推荐直接学习3,新开发的软件都是3,会了3就不怕不会2.7
        宇宙只有巴掌大: @liwb 推荐3,很多新特性2是没有的,包括现在ai这块全是用的3,已经很成熟了
        溪石iOS:@liwb 就目前各大操作系统内置情况看,2.7 是默认选项,建议先快速上手,遇到需要3.0的再装,多python环境可以共存
      • 不知蜕变的挣扎:Python 一般开发什么用?
        lcode:可以写服务器的运维脚本,也可以通过一些Django,Tornado等框架写网站后台(豆瓣,知乎,YouTube等),也可以写PC带界面的客户端程序,也可以写一些普通的应用程序
        f0c9cebb7743:@溪石iOS 举个栗子嘛
        溪石iOS:@不知蜕变的挣扎 任何用其它语言开发觉得麻烦的事情

      本文标题:人生苦短,快用Python | 写给iOS程序员的Python手

      本文链接:https://www.haomeiwen.com/subject/xurewttx.html