从iOS程序员的角度学习python

前言

之前的文章有说如何编辑并运行第一个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 语言基本的语法就是上面这些了, 记不清楚没关系, 多多实践自然提高.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容