从09年6月份接触java至今,对于java一些比较表象的技术自己应该也算是有一个大概的认识,诸如桌面编程和WEB编程都有所涉及,期间也发扬了‘浅尝则止’的风格学习了SSH三大主流框架,DWR,ExtJs,JQuery等富客户端框架,以及稍微了解了一下Ibatis,SPringMVC,JBPM,Lucene,Freemaker等框架,学习了这一长串的框架,可以说明一点:我确实够浮躁。
有一个晚上我在想,学习了这些技术,难道就算会所谓的编程?不!绝对的错!很庆幸,能够认识万老师,既是我的老师更是我的朋友,他一直以来都会跟我谈论一些流行的技术,但更多的是希望我可以‘把基础知识学牢’;而另一位是去年我找工作时的一位面试官,大概比我大个三四岁吧,那天跟我聊了很久,我记得最清楚的一句话:‘基础你懂了多少,你就赚了多少’。 经过这之后,我突然我感觉自己是否是了花太多的时间学习所谓的流行技术,而这些所谓流行技术可能也是最容易过时的,就算不那么容易过时,但只会运用,而不懂其原理,我想最多只能算是‘代码工人’,慢慢的,我也开始阅读一些基础一点的书籍,诸如《操作系统概念》,《数据库系统概念》,《深入理解计算机系统》,《TCP/IP详解》,《用TCP/IP进行网际互联》,《数据结构与算法分析》,《计算机组成原理》等,虽然有时候感觉会比较枯燥,但读懂后的恍然大悟也确实受益不少,比如操作系统中的内存管理,调度算法,I/O系统,TCP/IP中的各种协议的运用场合以及代码实现等一些比较原理性的知识都可以把其思想运用到其他软件设计当中,比较web开发中的缓存,比如hibernate的各级缓存,比如局域网通讯工具的socket编程等。不过我还是处于‘菜鸟’的级别,在以上这一些只是我的一点自己的看法,可能很多是不太对或者干脆就是错误的,但也无所谓了,就权当是一种过程,以后回头看来,也算是一种心路历程。
可能这就是为什么IT行业如此辛苦的原因吧。我觉得如果只是对于一些基础性的知识比较深入,而对于一些流行技术却不太了解,我想也是很难混饭吃的,毕竟IT业不全是研究所,尤其是在于中国的大环境下,可能也很难有所谓的研究氛围,我听过两句话:‘know everything about something ’ 和 'know something about everything',意思是‘懂全部知识的一些’和‘懂得一些知识的全部’,因为人的精力是有限的,很难对于一个领域进行非常深入的认识,而对于各个领域都有一个大概的了解,即‘浅尝则止’可能稍微容易一些,而且在中国的大环境下,你不可能真正的深入到一些领域,如‘求伯君’和‘王江民’之辈可能也为数不多,所以我做了一个很艰难的决定,在尽量深入基础知识的同时,尽量多了解一些知识。还是想说,这只是我的一点看法,可能不太成熟,可能不太正确。所以顺着这个思路,最近在学习Python,之后再打算了解下Ruby。为了供以后参考,特意把学习python的一些入门细节写于此,只是入门。而总个过程无非是google,没有使用度娘,你懂的。。。
1.安装Python
google之,很悲剧,python官网竟然被和谐,很想不通。莫非pytho官网也涉黑或涉黄,转而使用《zi由门》fan墙,你懂的,链接:http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi 我使用的是2.6版本,因为考虑到之后的web开发,Django框架貌似还不能支持3.x。 下载完成之后无非是循环的‘下一步’
2.Hello World
安装完成后,从开始处打开IDLE(Python GUI),相当于是python的shell窗口
老生常谈,装好后,无非是先来一个‘Hello World’,而Python的‘Hello World’无非是时间上最简洁,最简单的:
3.学习Python的类库
直接贴笔记:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- python入门笔记
f=["1","2","3"]
f[0]
'1'
f[-1] //倒数第一个
'3'
'hello'[3]
'l'
example = [1,2,3]
example[1:2]
example[:1]
example[-2:-1]
example[:]
example[1:2:-2] skip 被2整出的 并且倒序
[21]*3
[21,21,21]
'he'*3
'hehehe'
f=['1','2']
'1' in f
True
关于function
len('dddd') //'dddd'的长度
4
f=[1,2,3]
1 in f //判断1在不在f中
true
num=[1,2,3]
max(num) //得出num里面的最大值
3
min(num) //得出num里面的最小值
1
[1,2,55]
a=[1,2,3]
del a[2] //把索引2对应的数字删掉
a
[1,2]
nn=list('hh')
nn[1:]=list('aa') //让nn的1索引开始加入'aa'
nn
hhaa
f=[1,2,3]
f.append(4) //在f之后添加4
f
[1,2,3,4]
f=[1,2,3]
f.count(4) //计算f中4的个数 为0
0
f.count(1) //计算f中1的个数 为1
1
f=[1,2,3]
a=[5,6]
a.extend(f) 在a之后添加f
a
[5,6,1,2,3]
a=[1,2,3]
a[2]=55 //把索引2对应的数字改为55
a
a=[1,2,3]
a.index(1) //求1在a的索引 为0
0
a=[1,2,3]
a.insert(1,88) //在1插入88
a
[1,88,2,3]
a=[1,2,3]
a.remove(1) //删除1
a
[2,3]
a=[2,1,3]
a.sort() // 对a排序
a
[1,2,3]
a=[2,1,3]
sorted(a) //d对a排序
[1,2,3]
b=(1,2)
n[1]=55 //不能改变n 其为元组 tuple
b="hi %s" //%s作为占位符
a="Jim"
print(b % a)
hi Jim
字典
b={'k':'kobe','t':'tracy','y':'yao'}
b['k'] //打印k的key对应的value
kobe
b={'k':'kobe','t':'tracy','y':'yao'}
a=b.copy() //把b复制给a
a
b={'k':'kobe','t':'tracy','y':'yao'}
b={'k':'kobe','t':'tracy','y':'yao'}
b.clear() //把a清空
b
{}
b={'k':'kobe','t':'tracy','y':'yao'}
'k' in b //判断b中是否有key 'k' 代替了以前的 has_key
True
/////////////////////////////111
if statement if语句
h.py
x="xxx"
if x=="xxx":
print('ok')
run h.py
ok
///////////////////////////////111
/////////////////////////////222
else statement
elif statement
h.py
x="aas"
if x=="aa":
print('ok')
elif x=="aas":
print('ohohxx')
else:
print('fu')
run h.py
ohohxx
/////////////////////////////222
/////////////////////////////333
Nesting statement // 嵌套语句
h.py
x="a"
y='b'
if x=="a":
if y=="b"
print('o')
else:
print('x')
else:
print('it is what')
run h.py
o
/////////////////////////////333
/////////////////////////////4444
>>> 1==1
True
>>> 1!=2
True
>>> 1<=3
True
>>> 1>=5
False
>>> 1 is 1
True
>>> one=[1,12]
>>> two=[1,12]
>>> one is two
False
>>> one is one
True
>>> one=two
>>> one is two
True
/////////////////////////////4444
/////////////////////////////555
and or
>>> x=1
>>> if x>3 and x<5:
print('ok')
>>> if x<4 or x>4:
print('yep')
yep
/////////////////////////////555
/////////////////////////////666
while
>>> x=1
>>> while x<8:
print(x)
x=x+1
1
2
3
4
5
6
7
/////////////////////////////666
/////////////////////////////777
for
>>> x=['xx','ss','ff']
>>> for s in x:
print(s)
xx
ss
ff
/////////////////////////////777
/////////////////////////////888
for
>>> a={'1':'ss','d':'ff','fff':'ff'}
>>> a
{'1': 'ss', 'fff': 'ff', 'd': 'ff'}
>>> for i in a:
print(i)
1
fff
d
>>> for x in a:
print(x+a[x])
1ss
fffff
dff
/////////////////////////////888
/////////////////////////////999
define function
>>> def plus(x,y):
return x+y
>>> print(plus(1,2))
3
/////////////////////////////999
/////////////////////////////aaa
define function
>>> def plus(x,y):
return x+y
>>> print(plus(1,2))
3
/////////////////////////////aaa
/////////////////////////////bbb
default parameters
>>> def name(x='tracy',y='kobe'):
print('%s vs %s' % (x,y))
>>> name()
tracy vs kobe
>>> name('s')
s vs kobe
>>> name('huang','wei')
huang vs wei
>>>
/////////////////////////////bbb
/////////////////////////////ccc
multiple parameters
>>> def list(*s):
print(s)
>>> list('ss')
('ss',)
>>> list('dd','dd')
('dd', 'dd')
>>> def mm(name,*age):
print(name)
print(age)
>>> mm('zhag',2,3,4,5,66,44)
zhag
(2, 3, 4, 5, 66, 44)
/////////////////////////////ccc
/////////////////////////////ddd
关于 ** ,可以打印出字典
>>> def xx(**a):
print(a)
>>> xx(a=4,d=r,f=6)
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
xx(a=4,d=r,f=6)
NameError: name 'r' is not defined
>>> xx(a=5,t=6,g=8)
{'a': 5, 't': 6, 'g': 8}
>>> def aa(name,age,*other,**map):
print(name+age)
print(other)
print(map)
>>> aa('huangwei','21',1,2,3,4,a=2,b=4)
huangwei21
(1, 2, 3, 4)
{'a': 2, 'b': 4}
/////////////////////////////ddd
/////////////////////////////eeee
tuple as parameters
>>> def xx(x,y,z):
return x+y*z;
>>> tu=(1,2,3)
>>> print(xx(*tu))
7
/////////////////////////////eeee
/////////////////////////////ffff
oop
define class
>>> class Test:
name='tracy'
age=12
def show(self):
return 'i am working'
>>> test=Test()
>>> test.name
'tracy'
>>> test.age
12
>>> test.show()
'i am working'
>>>
/////////////////////////////ffff
/////////////////////////////gggg
classes and self
>>> class TT:
def defName(self,name):
self.name=name
def display(self):
return self.name
def say(self):
print('hello %s' % self.name)
>>> tt=TT()
>>> tt.defName('huang')
>>> tt.display()
'huang'
>>> tt.say()
hello huang
>>>
/////////////////////////////gggg
/////////////////////////////hhhh
subclasses and superclasses
>>> class P:
var1='hello'
var2='world'
>>> class S(P): //S继承P
pass
>>> s=S()
>>> s.var1
'hello'
>>> s.var2
'world'
/////////////////////////////hhhh
/////////////////////////////iiii
over write
>>> class P:
var1='hello'
var2='world'
>>> class S(P):
var2='huoxing'
>>> s=S()
>>> s.var1
'hello'
>>> s.var2
'huoxing'
>>>
/////////////////////////////iiii
/////////////////////////////jjjj
multiple super
>>> class F:
v1='i am f'
>>> class M:
v2='i am m'
>>> class S(F,M):
pass
>>> s=S()
>>> s.v1
'i am f'
>>> s.v2
'i am m'
/////////////////////////////jjjj
/////////////////////////////kkkk
constructors
>>> class T:
def __init__(self):
print('init ing')
>>> t=T()
init ing
>>>
/////////////////////////////kkkk
/////////////////////////////llll
import modules
先把***.py保存到python安装的文件夹下
再在程序中import ***.py
>>> import go
>>> go
<module 'go' from 'C:\Python31\go.py'>
>>> go.go()
let us go
>>>
/////////////////////////////llll
/////////////////////////////mmm
>>> go2=go.go
>>> go2
<function go at 0x013C7780>
>>> go2()
let us go
>>>
/////////////////////////////mmm
/////////////////////////////nnn
about module info
import math
>>> math.sqrt(81)
9.0
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>> help(math)
Help on built-in module math:
..................省略
>>> math.__doc__
'This module is always available. It provides access to the\nmathematical functions defined by the C standard.'
>>> math.__name__
'math'
/////////////////////////////nnn
/////////////////////////////oooo
about file operation
>>> fob=open("F:\\test.txt",'w')
>>> fob.write('traccy cy')
9
>>> fob.close()
>>> fob=open("F:\\test.txt",'r')
>>> fob.read(5)
'tracc'
>>>
>>> fob=open("F:\\test.txt",'r')
>>> fob.read(5)
'tracc'
>>> fob.read()
'y cy'
>>> fob.read()
''
>>>
/////////////////////////////oooo
////////pppp
readline and readlines
>>> fob=open("F:\\test.txt",'r')
>>> fob.readline()
'traccy cy\n'
>>> fob.readlines()
['ggggg\n', 'ttt\n', 'gggg']
>>>
write lines
>>> fob=open("F:\\test.txt",'w')
>>> fob.write('sss\n ssss\n sss\n')
15
>>> fob.close() //一点要close 否则 无法写入
>>>
>>> fob=open("F:\\test.txt",'w')
>>> lists='ddddddddddddddddddddddddddd'
>>> fob.writelines(lists)
>>> fob.close()
>>>
////////pppp
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
估计这笔记没人能看懂,所以在这里说一下python的一些基本知识点:
1.我觉得python最大的特点是没有大括号的代码块符号和没有标点进行分句,而且也算是弱类型(可能不大适合金融行业的编码)如:
定义方法:
def testMethod(a,b):
print a+b
定义类:
class testClass():
name='huangw'
age=21
def setName(self,strName):
self.name=strName
def showName(self):
print self.name
循环:
for循环
is=[1,2,3,4,5]
for i in is:
print i
if循环
f1,f2,f3=1,True,False #可以连续赋值
if f1==3:
if f2:
print 'f1 is 3 and f2 is true'
else:
print 'f1 is 3 and f2 is false'
elif f1==2:
if f2:
print 'f1 is 2 and f2 is true'
else:
print 'f1 is 2 and f2 is false'
else f1==1:
print 'f1 is 1'
4.继续python:
之后继续学习了wxPython和pygame,分别是桌面编程和游戏编程,都有所涉及吧,其实就是一些类库,没有深入
5.python之web开发:
(1)图书馆借来了《Python网络编程基础》,主要是Socket编程以及Email协议,FTP,SSL等协议的简单实现,打算寒假深入学习一下
(2)使用Django框架开发,其主要思想为:MTV------Model Template View,其实也属于MVC思想的一个变种,即业务逻辑与界面开发松耦合开发,利用其框架做出了一个增删改查的Demo,至于细节,可以参考《The Django Book 2.0》 链接:http://www.stopdownloading.com/book/dl/401
因为2.5之后(不包括2.5)的python版本对于数据库编程,我用的是MySql,不再提供.egg文件的安装,而是使用DLL文件进行补丁式的安装,步骤如下:
(1)下载libmmd.dll(附件)和libguide40.dll(附件) http://sourceforge.net/forum/message.php?msg_id=5613887
两个dll文件并复制到python安装目录的Lib\site-packages下.
(2)在 site-packages/MySQLdb 目录下修改以下文件:
1) __init__.py 文件
将
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
修改为:
class DBAPISet(frozenset)
2)“converters.py” 去除:
from sets import BaseSet, Set
3) “converters.py” 文件,将 Set 修改为 set (只有两处):
48 行: return set([ i for i in s.split(',') if i ])
128行: set: Set2Str,
6.总结
以上内容只当是我的一个入门笔记