Python 基础

格式

注释用 # 开头表示。

语法采用缩进的方式,虽然没有规定是几个空格,但是一般都是 4 个。

大小写敏感。

通常我们在开头这么写:

1
2
#!/usr/bin/env python
# -*- coding: utf-8 -*-

第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序, Windows 系统会忽略这个注释。

由于 Python 源文件也是文本文件,当我们的代码中含有中文的时候(包括注释),第二行注释告诉 Py 解释器,读取源码的时候用指定编码读取。

数据类型和变量

整数

可以处理任意大小的整数。

但是,

int 类型的有最大值 (在我的电脑上是)

1
2
3
>>> import sys
>>> print(sys.maxint)
9223372036854775807

浮点数

没什么特别的。

字符串

以 ‘’ 或 “” 括起来的任意文本。

布尔值

TrueFalse ,可以用 orandnot 进行运算。 (和一般语言一样的)

空值

None 代表空值,不是 0 ,因为 0 是有意义的。

变量

没什么特别的。

常量

没什么特别的。

字符串和编码

转换

py 比 Unicode 标准发布还早,所以一开始,字母在 py 中是用 ASCII 编码的,提供了 ord()chr() 两个转换的函数

1
2
3
4
>>> ord('A')
65
>>> chr(65)
'A'

后来又增加了对 Unicode 的支持

1
2
3
4
>>> print u'\u4f60\u597d'
你好
>>> u'你好'
u'\u4f60\u597d'

当然,字母也是可以使用这个方式转换,不多说。

格式化

与 C 一样,用 % 实现的。

1
2
>>> 'Hello %s' % 'Zhanglf'
'Hello Zhanglf'

整数 d ,浮点数 f ,字符串 s ,十六进制整数 x 。

多个一起格式化的时候,

1
2
>>> 'Hello %s,%d' % ('Zhanglf',886)
'Hello Zhanglf,886'

括号起来,逗号隔开。

循环和判断

循环

有两种循环,一种是 while 循环

很简单,注意缩进和冒号

1
2
3
4
5
6
n = 0
s = 0
while n < 100:
s += n
n += 1
print (s)

py 不支持 ++ 运算符? 我试了不行。

还有一种是 for in

1
2
3
listttt = ['lll','iii','sss','ttt'];
for list in listttt:
print list

像是 Java 中的增强 for 循环。

另外有一个 range() 函数,可以生成一个整数序列:

1
2
>>> range(6)
[0, 1, 2, 3, 4, 5]

判断

逻辑和一般语言都一样。

条件判断,多重判断的时候,用 elif 而不是 else if注意缩进和冒号。

1
2
3
4
5
6
7
age = 20
if age >= 6:
print 'teenager'
elif age >= 18:
print 'adult'
else:
print 'kid'

list 和 tuple

list

中括号表示。

list 和 Java 的集合没差,有序,可重复,可变。但是它可以存不同类型的元素,(其实 Java 的集合也行)甚至是别的 list。

1
2
3
4
5
6
7
>>> listtt = [33,44,'zlf']
>>> listtt
[33, 44, 'zlf']
>>> len(listtt)
3
>>> listtt[1]
44

获取长度 len()
添加元素到末尾 append()
添加元素到指定位置 insert(索引,元素)
删除末尾元素 pop()
删除指定位置的元素 pop(索引)
替换元素,直接通过索引赋值

最后,如果,list 里面嵌套了 list,就变成多维集合了。

tuple

小括号表示。

元组: 有序,不可变。安全。

tuple 不可变。但是如果里面有元素是 list,那么其中的 list 是可以改变的。

有一个要注意的地方

1
2
3
4
5
6
>>> tupleee = (1)
>>> tupleee
1
>>> tupleee = (1,)
>>> tupleee
(1,)

因为(1) 中的括号就是普通的数学括号,所以 py 官方规定如果是那种情况要初始化,记得加个逗号。

dict 和 set

dict

花(大)括号表示。

dict 就是 iOS 中常说的字典,全称 dictionary ,Java 中的 Map,是以键值对存储的。

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
# -*- coding: utf-8 -*-
dicttt = {"zlf":24,"hei":23,"ha":24}
# 通过 key 找 value
print dicttt['zlf']
# 或者是
print dicttt.get('zlf')
# 最好是使用,
print dicttt.get('zlf',-1)

不能通过 value 找 key,因为 dict 是无序不重复的,也就是说 key 值是唯一的,所以

1
2
dicttt = {"zlf":24,"hei":23,"ha":24,"ha":24,"zlf":24,"hei":23,"ha":24,"ha":24}
print dicttt

输出的也是

{'zlf': 24, 'ha': 24, 'hei': 23}

与 Map 一样,查找 value 用的是 Hash 算法,时间复杂度是常数,典型的用空间换时间。

set

比较特殊的单列集合,和 Java 的 Set 一样,无序,不可重复。

初始化有一点特殊:

1
2
3
>>> settt = set(['s','e','t'])
>>> settt
set(['s', 'e', 't'])

其中的中括号并不是代表存入的是 list ! 添加相同的元素会被自动过滤。

和 dict 一样不可存入变量当做是 key,因为为了保证 key 值是唯一的,而变量可能导致多个 key 值相同。