一、python简介(自己了解)
二、安装python解释器
CPython\IPython\PyPy\Jython\IronPython\
三、第一个python程序
用notepad或editplus编辑一个*.py文件,在cmd里运行“python *.py”,例程如下:
#hello.py注释
print 'hello,world' #输出:hello,world
print 'hello','world' #输出:hello world(逗号变空格)
print '300+400=',300+400 #输出:300+400= 700(数字自行计算)
name=raw_input() #等待用户输入,输入后赋值给name变量,注意此时无论输入什么,name均为字符串
四、python基础知识
(一)数据类型和变量
整型: 1 100 -80 0 0xff00 #十六进制
浮点型:1.23 -0.91 12.1e4 12.1e-2 #科学计数用e代替
字符串:'abc' "abc" 'a\'bc' "a'bc" #字符串:注意转义符\
\n换行符 \t制表符 \\就是\
r'...' #不转义,直接输出'...'
''' ... ''' #多行输入,即...可以回车多行输入
布尔值:true false
运算:and or not
空值: none #不能理解为0
变量: 大小写英文、数字和_的组合,且不能用数字开头
a=1 #整型变量
t_007 = 'T007' #字符串变量
Answer = True #布尔型变量
常量: 通常以大写代替,但如果你脑残要改变它,python不会阻止你
PI=3.1415
(二)字符串和编码
ASCII -> UTF-8 -> Unicode搞清楚
ord('A') #显示65 chr(65) #显示A
print u'中文' / u'中文' #前面显示:中文,后面显示'中文'的unicode码
# -*- coding: utf-8 -*- #注意编写代码时加上声明
len(u'ABC') #输出3
len(u'中文') #输出2
格式化:
'Hello, %s' % 'world' #输出:'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000) #输出:'Hi, Michael, you have $1000000.'
'%2d-%02d' % (3, 1) #输出:' 3-01'
'%.2f' % 3.1415926 #输出:'3.14'
'Age: %s. Gender: %s' % (25, True) #输出:'Age: 25. Gender: True'
'growth rate: %d %%' % 7 #输出:'growth rate: 7 %'
(三)使用list和tuple
list:列表,可以正索引,也可以反索引,可以任意插入、弹出,列表里的数据类型任意,例如:
students = ['bob','alpc','jim']
students[2] #输出'jim'
students[-1] #输出'jim'
students[-3] #输出'Bob'
students.append('kate') #增加一个元素
students.insert(1,'joseph') #在第一位置插入
students.pop() #弹出最后一个元素
students.pop(i) #弹出第i个元素
tuple:元组,类似列表,但初始化后就不能改变,尽量使用哦,它使代码更安全
t = ('a', 'b', ['A', 'B'])
t[2][0]='X'
t[2][1]='Y' #注意,这里改变的使元组里的列表,而不是元组
elif():
else:
循环:
for x in list:
while x>0:
t=int(raw_input('input your salary:')) #注意raw_input需要转型为整数
(五)使用dict和set
dict:字典,支持键-值(key-value)
dd = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
dd['Michael'] #输出95
和list比较,dict有以下几个特点:
1.查找和插入的速度极快,不会随着key的增加而增加;
2.需要占用大量的内存,内存浪费多。
而list相反:
1.查找和插入的时间随着元素的增加而增加;
2.占用空间小,浪费内存很少。
set:集合,不储存value,不重复key
s = set([1, 1, 2, 2, 3, 3]) #相当于 set([1,2,3])
s.add(key)/s.remove(key)
s1=s.replace(1,5)//只能通过另外赋值
五、函数
函数可以有别名,如:abs(-1) -> a=abs -> a(-1)
参数顺序:必选参数、默认参数、可变参数和关键字参数
1.一般函数,参数检查
def my_abs(x):
if not isinstance(x,(int,float,double)):
raise TypeError('bad operand type')
if(x>=0):
return x
else:
return -x
2.空函数,用于占位
def nop():
pass
3.返回多个数时,注意用多个变量接收,否则返回的是元组tuple
def calc(x,y):
return x,y
4.默认参数(默认参数可以不输入,使用默认值)
def calc(x=6,y=8)
return x+y
默认参数有坑:
def add_end(L=[])
L.append('end')
return L
如果每次调用add_end(),'end'会随着调用增加,正确的方式是:
def add_end(L=None):
if L is None
L=[]
L.append('end')
return L
5.参数不定时,可以组装成列表或元组
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
或者:
def calc1(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
调用时:calc([1,2,3]),calc1(1,2,3),calc(list),calc(*list)
6.关键字参数
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
其中,name和age均需输入,其他参数为字典
六、高级特性
(一)切片
L[1:3] #取第二个和第三个元素
L[-1:-3] #取倒数第1个到倒数第三个元素
L=range(100) #L=[0,1,2,...,99]
L[:10] #L=[0,1,...9]
L[-10:] #L=[0,91,92,...99]
L[:10:2] #L=[0,2,4,6,8]
L[::5] #L=[0,5,10,...,95]
(二)迭代
d={'a':1,'b':2,'c':3}
for key in d:
print key #打印'a''b''c'
for key in d.itervalues()
print key #打印 1,2,3
from collections import Iterable
isinstance('abc', Iterable) #true
isinstance([1,2,3], Iterable) #true
isinstance(123,Iterable) #false
for i, value in enumerate(['A', 'B', 'C']):
print i, value #打印下标和字符
(三)列表生成式
1.range(1,10) #[1,2,3,...,9]
2.[x * x for x in range(1, 11)] #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3.for i in range(1,11) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
L.append(i*i)
4.[x * x for x in range(1, 11) if x % 2 == 0] #[4, 16, 36, 64, 100]
5.[m + n for m in 'ABC' for n in 'XYZ'] #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
6.import os
[d for d in os.listdir('.')] #['.emacs.d', '.ssh', '.Trash', ]
7.d = {'x': 'A', 'y': 'B', 'z': 'C' }
for k, v in d.iteritems():
print k, '=', v #y = B x = A z = C
8.L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L] #['hello', 'world', 'ibm', 'apple']
(四)生成器
1.g = (x * x for x in range(10))
g.next() #0
g.next() #1
g.next() #4
2.g = (x * x for x in range(10))
for n in g:
print n #0,1,4,9,...,81
3.def fib(max):
n, a, b = 0, 0, 1
while n <= max:
yield b #每次调用时遇到yield返回,下次调用时,从yield开始执行到下一个yield
a, b = b, a + b
n = n + 1
fib(6) #定义了一个生成器
fib.next()
二、安装python解释器
CPython\IPython\PyPy\Jython\IronPython\
三、第一个python程序
用notepad或editplus编辑一个*.py文件,在cmd里运行“python *.py”,例程如下:
#hello.py注释
print 'hello,world' #输出:hello,world
print 'hello','world' #输出:hello world(逗号变空格)
print '300+400=',300+400 #输出:300+400= 700(数字自行计算)
name=raw_input() #等待用户输入,输入后赋值给name变量,注意此时无论输入什么,name均为字符串
四、python基础知识
(一)数据类型和变量
整型: 1 100 -80 0 0xff00 #十六进制
浮点型:1.23 -0.91 12.1e4 12.1e-2 #科学计数用e代替
字符串:'abc' "abc" 'a\'bc' "a'bc" #字符串:注意转义符\
\n换行符 \t制表符 \\就是\
r'...' #不转义,直接输出'...'
''' ... ''' #多行输入,即...可以回车多行输入
布尔值:true false
运算:and or not
空值: none #不能理解为0
变量: 大小写英文、数字和_的组合,且不能用数字开头
a=1 #整型变量
t_007 = 'T007' #字符串变量
Answer = True #布尔型变量
常量: 通常以大写代替,但如果你脑残要改变它,python不会阻止你
PI=3.1415
(二)字符串和编码
ASCII -> UTF-8 -> Unicode搞清楚
ord('A') #显示65 chr(65) #显示A
print u'中文' / u'中文' #前面显示:中文,后面显示'中文'的unicode码
# -*- coding: utf-8 -*- #注意编写代码时加上声明
len(u'ABC') #输出3
len(u'中文') #输出2
格式化:
'Hello, %s' % 'world' #输出:'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000) #输出:'Hi, Michael, you have $1000000.'
'%2d-%02d' % (3, 1) #输出:' 3-01'
'%.2f' % 3.1415926 #输出:'3.14'
'Age: %s. Gender: %s' % (25, True) #输出:'Age: 25. Gender: True'
'growth rate: %d %%' % 7 #输出:'growth rate: 7 %'
(三)使用list和tuple
list:列表,可以正索引,也可以反索引,可以任意插入、弹出,列表里的数据类型任意,例如:
students = ['bob','alpc','jim']
students[2] #输出'jim'
students[-1] #输出'jim'
students[-3] #输出'Bob'
students.append('kate') #增加一个元素
students.insert(1,'joseph') #在第一位置插入
students.pop() #弹出最后一个元素
students.pop(i) #弹出第i个元素
tuple:元组,类似列表,但初始化后就不能改变,尽量使用哦,它使代码更安全
t = ('a', 'b', ['A', 'B'])
t[2][0]='X'
t[2][1]='Y' #注意,这里改变的使元组里的列表,而不是元组
(四)条件判断与循环
条件判断:
if ():elif():
else:
循环:
for x in list:
while x>0:
t=int(raw_input('input your salary:')) #注意raw_input需要转型为整数
(五)使用dict和set
dict:字典,支持键-值(key-value)
dd = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
dd['Michael'] #输出95
和list比较,dict有以下几个特点:
1.查找和插入的速度极快,不会随着key的增加而增加;
2.需要占用大量的内存,内存浪费多。
而list相反:
1.查找和插入的时间随着元素的增加而增加;
2.占用空间小,浪费内存很少。
set:集合,不储存value,不重复key
s = set([1, 1, 2, 2, 3, 3]) #相当于 set([1,2,3])
s.add(key)/s.remove(key)
s1=s.replace(1,5)//只能通过另外赋值
五、函数
函数可以有别名,如:abs(-1) -> a=abs -> a(-1)
参数顺序:必选参数、默认参数、可变参数和关键字参数
1.一般函数,参数检查
def my_abs(x):
if not isinstance(x,(int,float,double)):
raise TypeError('bad operand type')
if(x>=0):
return x
else:
return -x
2.空函数,用于占位
def nop():
pass
3.返回多个数时,注意用多个变量接收,否则返回的是元组tuple
def calc(x,y):
return x,y
4.默认参数(默认参数可以不输入,使用默认值)
def calc(x=6,y=8)
return x+y
默认参数有坑:
def add_end(L=[])
L.append('end')
return L
如果每次调用add_end(),'end'会随着调用增加,正确的方式是:
def add_end(L=None):
if L is None
L=[]
L.append('end')
return L
5.参数不定时,可以组装成列表或元组
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
或者:
def calc1(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
调用时:calc([1,2,3]),calc1(1,2,3),calc(list),calc(*list)
6.关键字参数
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
其中,name和age均需输入,其他参数为字典
六、高级特性
(一)切片
L[1:3] #取第二个和第三个元素
L[-1:-3] #取倒数第1个到倒数第三个元素
L=range(100) #L=[0,1,2,...,99]
L[:10] #L=[0,1,...9]
L[-10:] #L=[0,91,92,...99]
L[:10:2] #L=[0,2,4,6,8]
L[::5] #L=[0,5,10,...,95]
(二)迭代
d={'a':1,'b':2,'c':3}
for key in d:
print key #打印'a''b''c'
for key in d.itervalues()
print key #打印 1,2,3
from collections import Iterable
isinstance('abc', Iterable) #true
isinstance([1,2,3], Iterable) #true
isinstance(123,Iterable) #false
for i, value in enumerate(['A', 'B', 'C']):
print i, value #打印下标和字符
(三)列表生成式
1.range(1,10) #[1,2,3,...,9]
2.[x * x for x in range(1, 11)] #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3.for i in range(1,11) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
L.append(i*i)
4.[x * x for x in range(1, 11) if x % 2 == 0] #[4, 16, 36, 64, 100]
5.[m + n for m in 'ABC' for n in 'XYZ'] #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
6.import os
[d for d in os.listdir('.')] #['.emacs.d', '.ssh', '.Trash', ]
7.d = {'x': 'A', 'y': 'B', 'z': 'C' }
for k, v in d.iteritems():
print k, '=', v #y = B x = A z = C
8.L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L] #['hello', 'world', 'ibm', 'apple']
(四)生成器
1.g = (x * x for x in range(10))
g.next() #0
g.next() #1
g.next() #4
2.g = (x * x for x in range(10))
for n in g:
print n #0,1,4,9,...,81
3.def fib(max):
n, a, b = 0, 0, 1
while n <= max:
yield b #每次调用时遇到yield返回,下次调用时,从yield开始执行到下一个yield
a, b = b, a + b
n = n + 1
fib(6) #定义了一个生成器
fib.next()