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