美文网首页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

    前言 之前的文章有说如何编辑并运行第一个python脚本.接下来简单了解python语法.注意以下python 默...

  • iOS程序员如何使用python写网路爬虫(一点更新)

    原文链接: iOS程序员如何使用python写网路爬虫以前看到叶孤城写的iOS程序员如何使用python写网路爬虫...

  • 如何成为一个Python高手

    简约版: 如何成为一个Python高手 学习编程的核心思想,从工程的角度去学习!从解决问题的角度去学习!从工程的角...

  • 2017-09-03

    注:之前我们介绍过:一名靠谱的JavaScript程序员应备的素质,从程序员的角度提出要去学习哪些知识,下面这篇文...

  • 三十岁了,从零开始学python还有前途吗?

    三十岁开始学习Python编程并不算晚,但是如果从就业的角度来说,却并不算早了。Python语言在当下的大数据时代...

  • 06- JSP & EL & JSTL

    jsp Java Server Page 什么是jsp 从用户角度看待 ,就是是一个网页 , 从程序员角度看待 ,...

  • JSP & EL & JSTL

    jsp Java Server Page 什么是jsp 从用户角度看待 ,就是是一个网页 , 从程序员角度看待 ,...

  • JSP & EL & JSTL

    1.JSP (Java Server Page) 1.1 介绍 从用户角度看待 ,就是是一个网页 , 从程序员角度...

  • 小猿圈web前端面试题汇总

    现如今开发语言从最早的iOS、Android发展到了java、python、linux、html5多种多样,学习的...

  • 小猿圈web前端面试题汇总

    现如今开发语言从最早的iOS、Android发展到了java、python、linux、html5多种多样,学习的...

网友评论

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

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