Python作为一门面向对象的动态语言,有着清晰简洁的语法,并且有着许多非常强大的框架如Eventlet Networking Library;另外Python作为脚本语言,更适合开发小的应用,极其适合在应用发展初期时用来做原型。
1. Hello World!
假设你已经安装好了Python,(如果是Mac 系统会自带;如果是Windows,需要从Python的官方网站python.org下载)那么在Linux命令行输入:
$python
将直接进入python。然后在命令行提示符>>>后面输入:
>>>print('Hello World!')
我们也可以用文本编辑器写一个.py结尾的文件,然后在命令行输入:
$python hello.py
2. 基础语法
- **变量不需要声明 **,会自动推断出声明的类型,和Swift类似。如下:
>>> a = 1
>>> print(type(a))
<type 'int'>
>>> a = 'a'
>>> print(type(a))
<type 'str'>
- 数据类型:(#表示注释)
a=10 # int 整数
a=1.3 # float 浮点数
a=True # 真值 (True/False)
a='Hello!' # 字符串。字符串也可以用双引号。
>>> a = 'Hello'
>>> print(a,type(a))
('Hello', <type 'str'>)
- sequence(序列)是一组有顺序的对象集合 ,等价于Array
序列有两种:tuple(定值表; 或元组) 和list (表)
>>>s1 = (1, 2, 'I', 1.1, False) # s1是一个tuple
>>>s2 = [True, 5, 'I'] # s2是一个list
>>>print(s1,type(s1))
>>>print(s2,type(s2))
tuple和list一个使用(),另一个使用[] , 主要区别在于建立之后是否可变。 tuple的各个元素不可再变更(等价于NSArray),而list的各个元素可以再变更(等价于NSMutableArray)。
字符串是一种tuple。
3.1.范围引用:[下限:上限:步长]
>>> s1 = [1,2,3,4,[11,22,33,44]]
>>> print(s1[:5]) # 从开始到下标4 (下标5的元素 不包括在内)
[1, 2, 3, 4, [11, 22, 33, 44]]
>>> print(s1[2:]) # 从下标2到最后
[3, 4, [11, 22, 33, 44]]
>>> print(s1[0:5:2]) # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)
[1, 3, [11, 22, 33, 44]]
>>> print(s1[-1]) # 序列最后一个元素
[11, 22, 33, 44]
>>> print(s1[2:0:-1]) # 从下标2到下标1
[3, 2]
- 词典 (dictionary)
>>> dic = {'Tom':1,'Jerry':2} #使用{}声明词典
>>> for key in dic:
... print dic[key]
...
2
1
>>> print dic.keys() # 返回dic所有的键
['Jerry', 'Tom']
>>> print dic.values() # 返回dic所有的值
[2, 1]
>>> print dic.items() # 返回dic所有的元素(键值对)
[('Jerry', 2), ('Tom', 1)]
>>> del dic['Tom'] # 删除 dic 的‘tom’元素
>>> print dic
{'Jerry': 2}
>>> dic.clear() # 清空dic,dict变为{}
>>> print dic
{}
- Python的运算符和其他语言基本一致,这里就只说明几个不太一样的地方。
>>> print 2**3 # 乘方
8
>>> print 33 in [1,2,3] # 33是否是list [1,2,3]的一个元素
False
>>> print 1>0 and 3<=2 # 逻辑 and, or, not
False
- Python最具特色的是用 缩进 来标明成块的代码
i = 0
j = 2
k = 3
if i > 0:
j = 22
k = 33
elif i == 0:
j = 0
k = 0
else:
j = -22
k = -33
print j,k
在Python中,if语句如下:j = 22 和 k = 33 前面有四个空格的缩进。通过缩进,Python识别出这两个语句是隶属于if。
- 循环
除了 for in 之外还有range()函数
>>> idx = range(10)
>>> print idx
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这个函数的功能是新建一个表。这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)
- 函数
def square_sum(a,b):
c = a**2 + b**2
return c
print square_sum(2,3)
- 面向对象
既然是面向对象,那么肯定有类和对象的概念。
class Dog(object): #继承自object
eat = True #属性
bark = True
name = 'dogge'
def walk (self): #定义方法,它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self
return '5m/s'
class Cat(object):
eat = True
bark = False
name = 'Tom'
def walk (self):
return '3m/s'
class UsaShorthair(Cat):
def __init__(self,_name): #初始化函数,在建立对象时自动执行
name = _name
def jump(self,height):
return str(height)+'m'
obj = UsaShorthair('Qi')
print obj.name,obj.eat,obj.bark,obj.walk(),obj.color,obj.jump(0.5)
- 文件输入输出
>>> f = open("/Users/thinkive/Desktop/text.txt","w") #f = open(文件名,模式) # w 写入
>>> f.write("这是一个写入的测试\n")
>>> f.write("这是另一行写入测试\n")
>>> f.write("这是第三行写入测试\n")
>>> f.write("tom, 12, 86\n")
>>> f.write("lee, 15, 99\n")
>>> f.write("lucy, 11, 60")
>>> f.close()
>>> of = open("/Users/thinkive/Desktop/text.txt","r") # r 只读
>>> content = of.read()
>>> print(content)
这是一个写入的测试
这是另一行写入测试
这是第三行写入测试
tom, 12, 86
lee, 15, 99
lucy, 11, 60
>>>
- 参数默认值
- 我们一般是通过位置传参,也可以根据每个参数的名字传递参数。
- 在定义函数的时候,使用形如a=10的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。
>>> def fuc(a,b,c=1):
... return a+b+c
...
>>> print(fuc(3,2))
6
>>> print(fuc(10,10,10))
30
>>> print(fuc(c=1,b=2,a=10))
13
- 包裹(packing)位置传递
有时候我们并不知道调用的时候会传递多少参数,这时候可以使用包裹(packing)位置传递 。
- 在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
- 为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
- 参数dict是包裹关键字传递所用的字典,在dict前加**。
- 和*,也可以在调用的时候使用,即解包裹(unpacking)。
>>> def func(*pack):
... print pack
... print type(pack)
...
>>> func(1,2,3)
(1, 2, 3)
<type 'tuple'>
>>> func(1,'hi',True)
(1, 'hi', True)
<type 'tuple'>
- lambda函数
lambda函数在C++中也叫做lambda表达式;等价于OC的block和swift的closesure。同样的,函数也可以作为对象进行参数传递。
>>> func = lambda x,y,z: x+y+z
>>> print func(1,2,3)
6
>>> def func2(func,b):
... print func+b
...
>>> func2(func(1,2,3),10)
16
网友评论