下载链接:https://www.python.org/
推荐下载Python2.7版本,兼容库比较多
Java是静态语言,即初始化变量时需要指定变量数据类型,如:int a = 12;
Python是动态语言,即初始化变量时不需要指定变量数据类型,且在代码执行过程中可对变量的数据类型进行改变,如:
a = 123 # a是整数
print a
a = 'imooc' # a变为字符串
print a
Python:#
Java://或/**/
Python表达式后无”;”
Python表达式中代码块不用”{…}”来表示,而是用代码缩进的方式
Python中没有”++”、”–”的表达式
Python中if、while、for不同,具体见下文
与:Python:and;Java:&或&&
或:Python:or;Java:|或||
非:Python:not;Java:!
布尔值:True、False,首字母大写
空值:None
字符串:使用’ ‘或” “表示
示例:
print 45678
print 'Learn Python in imooc'
print True
print False
字符串中没有”单引号字符时,使用’ ‘表示字符串,如:s = ‘123’
字符串中有”单引号字符时,使用” “表示字符串,如:s = “I’m Kevin”
字符串中既有”,也有”“时,解决办法如下:
(1) 转义符
如:
Python was started in 1989 by "Guido".
-->
'Python was started in 1989 by \"Guido\".'
(2) 加前缀 r
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。如:
r'\(~_~)/ \(~_~)/'
(3) 多行字符串
如果要表示多行字符串,可以用”’…”’表示:
'''Line 1
Line 2
Line 3'''
(4) 多行字符串包含特殊字符
使用r”’…”’表示:
r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!'''
Unicode字符串支持中文编码,如:
(1) 中文字符:
u'中文'
(2) 支持转义符:
u'中文\n日文\n韩文'
(3) 多行:
u'''第一行
第二行'''
(4) raw+多行:
ur'''Python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''
(5) # -*- coding: utf-8 -*-:
目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为… 并选择UTF-8格式保存。
涉及到 and 和 or 运算的一条重要法则:短路计算。
(1) 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
(2) 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
(1) 创建空list:
empty_list = []
(2) 创建有值的list
L = ['Michael', 100, True]
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据。
(1) 顺序查询
a = L[0]
a = L[1]
(2) 倒序查询
a = L[-1]
a = L[-2]
顺序查询时,索引是从0开始;倒序查询时,索引是从-1开始的。
(1) append添加到list末尾
L.append('Paul')
(2) insert根据索引添加到list中
L.insert(0, 'Paul')
L.pop() #删除list末尾数据
L.pop(0) #根据索引删除list中数据
L[0] = 'replace'
tuple是另一种有序的列表,中文翻译为“元组”。tuple和list非常类似,但是,tuple一旦创建完毕,就不能修改了。tuple没有append()方法,也没有insert()和pop()方法。
t = ()
t = ('Adam', 'Lisa', 'Bart')
t = (1,)
因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义。
t = ('a', 'b', ['A', 'B'])
Python代码的缩进规则。具有相同缩进的代码被视为代码块。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
if score >= 60:
print 'passed'
if score >= 60:
print 'passed'
else:
print 'not passed'
if score >= 90:
print 'excellent'
elif score >= 80:
print 'good'
elif score >= 60:
print 'passed'
else:
print 'failed'
Python的 for 循环就可以依次把list或tuple的每个元素迭代出来。
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
while 循环不会迭代list或tuple的元素,而是根据表达式判断循环是否结束。
N = 10
x = 0
while x < N:
print x
x = x + 1 #不可以使用x++,Python中不支持
Python中break和continue关键字与Java中使用方法相同。
Dict就是通过 key 来查找 value。花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。
(1) 创建Dict
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
(2) 获取dict的长度
print len(d)
通过key来找value。
(1) 需要判断key是否存在
if 'Paul' in d:
print d['Paul']
(2) 通过get(key)方法,不需要判断key的存在,如果不存在时,会返回None
print d.get('Bart')
(1) 查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
(2) 存储的key-value序对是没有顺序的。
(3) 作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
d['Paul'] = 72
如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
for key in d:
print key
print d.get(key)
dict.values():这个方法把dict转换成一个包含所有value的list。
dict.itervalues():返回一个 对象,可以再通过for循环取出value;
dict.items():{ ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }–>[(‘Lisa’, 85), (‘Paul’, 74), (‘Adam’, 95), (‘Bart’, 59)]
set 持有一系列元素,这一点和list很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
s = set(['A', 'B', 'C'])
由于set存储的是无序集合,所以我们没法通过索引来访问。访问set中的某个元素实际上就是判断一个元素是否在set中。
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
'Bart' in s
(1) set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
(2) set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
(3) set存储的元素也是没有顺序的。
s = set(['Adam', 'Lisa', 'Bart'])
for name in s:
print name
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
s = set([1, 2, 3])
s.add(4)
s = set([1, 2, 3])
s.remove(3)
调用add()方法时,如果set中已有这个元素,则不会添加且不会报错;调用remove()方法时,如果set中没有这个元素,则会报错。
Python内置了很多有用的函数,我们可以直接调用。要调用一个函数,需要知道函数的名称和参数。
可以直接从Python的官方网站查看文档:
http://docs.python.org/2/library/functions.html
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
def my_abs(x):
if x >= 0:
return x
else:
return -x
在Python中,可以返回多值。
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面。
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
# OK:
def fn1(a, b=1, c=2):
pass
# Error:
def fn2(a=1, b):
pass
如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数。
def fn(*args):
print args
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
abs(arg) : 返回arg的绝对值;
range(n):返回0~(n-1)的list;
range(m,n):返回m~(n-1)的list;
range(m,n,i):返回m~(n-1)中每隔i个数取出生成的list;
sum(L):返回list或tuple中各元素的和;
cmp(x, y) 就需要两个参数,如果 xy,返回 1;
enumerate(L):将[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]变成了类似:[(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)];
zip(L1, L2):zip([10, 20, 30], [‘A’, ‘B’, ‘C’])–>[(10, ‘A’), (20, ‘B’), (30, ‘C’)];
join(L):可以把一个 list 拼接成一个字符串;
isinstance(x, s):判断x是否是s的实例化;
str.upper():将字符串转化为大写字母;
str.lower():将字符串转化为小写字母。
(1) 创建list
L = ['Adam', 'Lisa', 'Bart', 'Paul']
T = ('Adam', 'Lisa', 'Bart', 'Paul')
(2) 切出所有值
L[:]
L[:3]
L[0:3]
T[:]
T[:3]
T[0:3]
(3) 切出1~2
L[1:2]
T[1:2]
(4) 每隔n个取值
L[::n]
T[::n]
(1) 创建list
L = ['Adam', 'Lisa', 'Bart', 'Paul']
T = ('Adam', 'Lisa', 'Bart', 'Paul')
(2) 切出所有值
L[-1:-4]
T[-1:-4]
(3) 切出1~2
L[-2:-3]
T[-2:-3]
(4) 每隔n个取值
L[-1:-4:n]
T[-1:-4:n]
字符串切片与list、tuple的切片操作相同,只是将list、tuple替换成字符串。
L = []
for x in range(1, 11):
L.append(x * x)
# 使用列表生成式
L = [x * x for x in range(1, 11)]
L = []
for x in range(1, 11):
if x % 2 == 0:
L.append(x * x)
# 使用列表生成式
L = [x * x for x in range(1, 11) if x % 2 == 0]
L = []
for m in 'ABC':
for n in '123':
L.append(m + n)
# 使用列表生成式
L = [m + n for m in 'ABC' for n in '123']