美文网首页PythonPython
从iOS程序员的角度学习python

从iOS程序员的角度学习python

作者: 行如风 | 来源:发表于2017-10-18 14:03 被阅读56次

    前言

    之前的文章有说如何编辑并运行第一个python脚本.

    接下来简单了解python语法.

    注意以下python 默认都是python3!!!!

    教材和参考书

    http://www.runoob.com/python3/python3-interpreter.html

    http://crossincode.com/course/lesson_list/

    大概花一两天把上面链接中的内容过一遍, 就可以开始使用python了, 对基本语法有印象后, 剩下的只要多多实践就自然会提高.

    语法简介.

    特点

    与OC不同, python是解释型语言, python代码的执行是由python解释器完成的.

    python和OC都是强类型语言, 也就是说python中的各种对象, 变量其实都有自己的类型, 只不过是声明的时候不需要显式的写出来, 可以当成是swift 中的类型推断.

    常用数据类型

    int 整型.

    python3中没有short, long, 只有int代表整型.
    int 的表示范围???

    import os, sys
    print(sys.maxsize, int(999**99))
    

    (如果是python2 print sys.maxint)

    print 两个参数第一个指的是 数值的最大范围. 第二个是个简单的运算. 999的99次方转换为int类型

    64位系统下第一个参数输出9223372036854775807, 这个结果分别在python2, python3 及mac, ubuntu 系统下都是如此.

    第二个参数输出结果是个超长的数值. 并没有抛出异常, 所以我们不需要像oc中那样考虑int_32 int_64 整型溢出之类的问题.

    float 浮点数

    python 中没有double, float精度据说是17位. 高精度使用decimal模块, float精度一般是够用了. 有精度限制意味着就有浮点数陷阱

    if 0.0001 + 0.0001 + 0.0001 == 0.0003:
        print("试试浮点数陷阱")
    
    if 0.0001 * 3 == 0.0003:
        print("浮点数陷阱??")
    
    print(0.0001 + 0.0001 + 0.0001)
    print(0.0001 * 3)
    
    

    上面几行代码展示了一个浮点数的问题.
    上面的代码在oc 中也会有同样的问题!!!!!!!

    运算符

    +,-,*,/

    需要注意的是/除法. 在OC中整数进行除法运算的结果取决于除数是否是整型.
    如果除数是整型那么/除法运算为地板除法(省略小数部分), 如果除数是浮点数, 为正常除法得到浮点数结果.

    在python中"/"符号进行的除法为正常除法 得到浮点数结果.

    地板除法符号为 "//"

    // 地板除

    ** 次方运算 2**10运算结果为2的10次方.

    % 取余运算.

    注意python中没有++, --运算符, 可以写成
    a += 1

    比较, 移位的操作符都与OC一致.

    逻辑运算符

    OC 为 &&, ||, !

    python 为 and, or , not

    还是很好理解的.

    字符串

    print("Hello World")
    print('Hello World')
    print("Hello "+"World")
    print("hello {param1}".format(param1="World"))
    print(str(2*18))
    string="abcdefg"
    print(string[1])
    print("%s小明"%("234"))
    

    上面几行代码表示

    1.python字符串双引号和单引号一样, 用哪个都行没有区别.

    2.字符串拼接和java 一样+拼接即可. 也可以像OC一样 stringWithFormat(). python 也可以"".format()

    3.其他类型转字符串类型只需要str()包一下即可.

    4.字符串可以像数组一样操作. 但是只能读不能写 string[0] = "a"这一行会抛出异常.

    5.字符串也支持类似c的风格.%d, %f, %s 来进行参数占位.

    数据结构

    列表list

    list 可以理解为oc中的数组. python不区分可变不可变.

    list可以使用下标访问, 下标从0开始.

    lista.append("a")即可将a添加到lista 列表中

    遍历列表

    lista = ["a","b","c","d",999]
    for i in lista:
        print(i)
    

    使用下标操作list

    lista=[]
    lista.append(a)
    print(lista[0])
    

    添加元素时小心数组越界. 试试下面的代码

    lista=[]
    lista[0] = "a"
    

    删除列表中某个下标的元素

    lista=["a","b"]
    print(lista)
    del lista[0]
    print(lista)
    

    求列表长度

    lista=[1,2,3,4]
    print(len(lista))
    

    数组截取

    lista=[0,1,2,3,4,5,6]
    print(lista[1:3])
    print(list[3:])
    print(list[:2])
    

    三行输出分别为

    [1, 2]

    [3, 4, 5, 6]

    [0, 1]

    注意 以上区间都是前闭后开区间.

    字典dict

    dictionary={
        "a": 0,
        "b": 1,
        "c": 2,
    }
    print(dictionary["a"])
    dictionary["a"] = 10
    print(dictionary["a"])
    del dictionary["a"]
    print(dictionary)
    
    

    以上几行代码分别为

    构造字典

    输出key为"a"的值

    删除key"a" 及value (同时删除key和value)

    判断字典中是否包含某个key

    dictionary={
        "a": 0,
        "b": 1,
        "c": 2,
    }
    if "a" in dictionary.keys():
        print("存在此key")
    
    

    栈stack

    stack=[]
    stack.append("a")
    stack.append("b")
    print(stack)
    print(stack.pop())
    print(stack)
    

    数组右端入, 右端出, 就是一个栈了...

    队列queue

    from collections import deque
    
    queue=deque()
    queue.append("a")
    queue.append("b")
    print(queue)
    print(queue.popleft())
    print(queue)
    

    其实和数组一样, 右端入左端出就是队列了.

    import queue
    
    que=queue.Queue()
    que.put("a")
    que.put("b")
    print(que.qsize())
    print(que.get())
    print(que.qsize())
    

    import queue 导入队列模块

    队列模块的Queue()创建队列对象.

    put添加

    get获取

    注意!!!!!!!

    Queue 当队列为空时调用get方法会自动阻塞当前线程, 也就是说queue是线程安全的.get方法阻塞当前线程后. 如果有其他线程put, 此处被阻塞的位置才可能会继续执行.
    所以调用get方法 之前记得判断队列是否为空!!!!

    语句和函数

    顺序选择循环.

    文件中的代码顺序执行.

    选择语句

    if 1==1:
        print("相等")
    
    if None:
        print("None为False")
    
    if not None:
        print("not None 为True")
    
    if False:
        print("False")
    
    if True:
        print("True")
    
    if 0:
        print("0为False")
    
    if 1:
        print("1为True")
    
    if -1:
        print("小于0为True")
    
    if 1000:
        print("大于0为True")
    
    if "":
        print("空字符串为False")
    else:
        print("asdf")
    

    循环

    for循环
    for i in range(10):
        print(i)
    data=[1,3,4,6,7]
    for i in data:
        print(i)
    for i in "abcdefghijk":
        print(i)
    for i in data[::-1]:
        print(i)
        
    

    上面四个for 循环

    1.输出0-9是个数字, range(10)前闭后开为0-9

    2.输出1,3,4,6,7

    3.顺序输出a-k

    4.将data数组倒置输出.

    while循环
    flag=0
    while (flag<10):
        print(flag)
        flag +=1
    

    while循环和OC的一样.

    range()函数
    print(range(0,10))
    print(range(10))
    print(list(range(10)))
    print(range(10)[::-1])
    

    输出结果为

    range(0, 10)

    range(0, 10)

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    range(9, -1, -1)

    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

    有一些编程经验, 上面的输出试一下就明白range()函数的用法了.

    pass占位

    由于python没有{} 这种表示范围的符号.
    不同代码块之间是以缩进和换行来分隔的
    有的地方需要确实不需要写逻辑, 但是又需要进行占位的可以写pass
    例如

    if True:
        pass
    else:
        print("Hello world")
    

    函数, 类, 以及import

    函数

    def myFunction():
        print("abcdefg")
    myFunction()
    

    class myClass():
        param=None
    
        def __init__(self, param):
            self.param=param
    
        def testFunction(self):
            print(self.param)
    
    obj=myClass("传入参数")
    obj.testFunction()
        
    

    上面编写了一个类,重载了构造函数, 构造函数中传入一个参数.

    创建了一个obj对象,

    调用了obj对象的testFunction方法

    import

    from queue import Queue
    from django.conf import global_settings
    import queue
    from django.conf import *
    
    

    和OC不同, OC #import "viewController.h"会把.h中所有的变量类全部导入过来, 但是python可以单独导入某文件的某个类, 也即是说可以单独从某个文件中导入方法或者类,而不会导入此文件中的其他类和变量.

    结尾

    python 语言基本的语法就是上面这些了, 记不清楚没关系, 多多实践自然提高.

    相关文章

      网友评论

        本文标题:从iOS程序员的角度学习python

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