Python学习笔记
以前所写python学习笔记,python初学时期的,两篇合而为一,原始出处:python学习笔记1python学习笔记2
备忘,如有转载,请注明出处。
——by realasking
Linux下Python程序名应取作:xxx.py,然后程序第一行写成:
#!/usr/bin/env python
未加语言相关的环境变量设置时,不应在python程序中加入非ASCII的字符,程序文件中以#
引起的行为注释行。
Python程序写好后可按如下方法运行:
$python ./xxx.py 参数1 参数2 ...
其中python这一命令由系统环境变量$PYTHON
的值或alias
指定的python来决定,而参数的引入,是通过sys.argv
来实现的,
应这样来使用参数:
import os
import sys
input_Args=sys.argv
Arg1=input_Args[1]
Arg2=input_Args[2]
由于参数是字符串,所以如果要传递数值型参数,需要用相应的函数转换,比如:
Arg1=float(Arg1)
python最方便的一点是它是胶水语言,较头痛的则是它的数据类型、文件读写等和其它语言有较大差别,第一个容易忘记的
地方是,它没有double型,它的float型即double精度,类型转换也应用float(A)
这样的形式。另外,python的数据类型一般
不需要专门声明,不过可以定义空数组,在数值计算中,这个做法还是有些用的:
tmp=[]
python的循环和条件判断,采用缩进来区分,没有其它定界符,相同缩进表示相同层级的语句,至于循环和条件语句的开
始行的行末,则需要添加:
作为标志,比如条件判断:
a=11
b=10
if b > a :
print "b>a"
elif b < a :
print "b
在python中,感觉使用while
循环比for
循环更方便些,比如:
AA=11
a=0
while a < AA :
执行语句
a=a+1
用python读取格式化文本不是太方便,不过还是有办法的,比如读取一个数据矩阵中的一行数据:
f=open(input_file_name,"r")
......
data=[]
line=f.readline()
line=line.strip()
data.append(map(float, line.split(' ')))
.....
f.close()
如果是要读取整个矩阵,在data=[]
和最后的append
之间加上循环就是了。
矩阵或向量运算,应该采用numpy
和scipy
,做法是:
import math
import numpy as np
import scipy as sp
然后就可以进行运算了,比如加法、除以一个数:
npdata=np.array(data)
data_sum=np.add(npdata,npdata)
data_frac=np.true_divide(npdata,2)
也可以按列合并矩阵(要求两矩阵行数一样):
new_matrix=np.hstack([mat1,mat2])
或按行合并矩阵(要求两矩阵列数一样):
new_matrix=np.vstack([mat1,mat2])
合并矩阵的命令同样可以用于合并向量,但是合并向量的时候有时会提示行列数不对,那可能是因为一个的维度是
(n个)
,而另一个的维度是(n列,1行)
,这种情况下,可用reshape
来进行转换:
array2=array2.reshape(n)
new_array=np.hstack([array1,array2])
查看矩阵或向量维度的办法是:
xxx.shape
对于一个矩阵,若按其第一列元素大小顺序来对整个矩阵进行行排序,则执行:
mat1=mat1[mat1[:,0].argsort()]
在屏幕上输出数组:
print mat1
保存一个矩阵到文件:
np.savetxt(输出文件名,矩阵名)
Linux下python使用和学习笔记,面向对象部分,包括函数、多个返回值、传递对象、模块、面向对象等内容,
共分7个文件,其中test.py是主文件,mod.py是一个简单的函数文件,modclass.py是一个类,也是modinheritance.py的基类,
而以xxinheritancexx为名的都是派生和继承的练习。
test.py的内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python函数、类、模块学习脚本
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import mod as md
import numpy as np
import modclass as mc
import modinheritance as mi
import modinheritance2 as mi2
import modmultiinheritance as mmi
def firstfunc() :
print '第一个函数'
firstfunc()
a=0.0
b=''
c=''
def testnumber(a,c) :
global b
a=a+1.0
b='你好'
c=b
return [a,b,c]
#python可用列表或元组返回多个参数,放到不同变量中
[a,b,c]=testnumber(a,b)
print a,b
c=''
[a,b,c]=testnumber(a,c)
print a,b,c
#测试不同数据类型的传递
d=np.array([[1,2,3],[4,5,6],[7,8,9]])
def nptest(x) :
y=np.sin(x)
return [x,y]
[xx,y]=nptest(d)
print d
print xx
print y
cc=xx*y
print cc
#测试module文件中的函数
[xxx,yy]=md.nptest(d)
print xxx
print yy
#类的测试
zs=mc.modclass()
zs.nptest(d)
[xxxx,yyy]=zs.getxy()
print xxxx
print yyy
#测试列表
xxtmp=[]
i=0
while i < 10:
zss=mc.modclass()
zss.nptest(xxxx)
[xxxx,yyy]=zss.getxy()
xxtmp.append(zss)
print xxtmp[i].x
i+=1
#派生类测试
mis=mi.modinheritance()
mis.nptest(xxxx)
[xxxxx,yyyy,cc]=mis.getxy()
#派生类测试2
mis2=mi2.modinheritance2()
mis2.nptest(xxxx)
[xxxxx,yyyy,cc,dd]=mis2.getxy()
print xxxxx,yyyy,cc,dd
#多重继承测试
mis3=mmi.modmultiinheritance()
mis3.nptest(xxxx)
cccccc=mis3.getxy()
print cccccc
mod.py文件内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#函数的使用
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
def nptest(x) :
y=np.sin(x)
return [x,y]
modclass.py文件内容,也是类的构建:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的使用
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
class modclass:
#初始化,定义内部变量
def __init__(self):
self.a=0
self.x=np.array([])
self.y=np.array([])
#从外部传值进来进行计算
def nptest(self,x):
self.x=x
self.y=np.sin(self.x)
#返回值
def getxy(self):
return [self.x*self.y,self.y]
modinheritance.py文件内容,也是类的继承:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
import modclass as mc
class modinheritance(mc.modclass):
#初始化,定义内部变量
def __init__(self):
mc.modclass.__init__(self)
self.b=0
self.aa=np.array([])
self.bb=np.array([])
#从外部传值进来进行计算
def nptest(self,x):
#调用父类同名函数,内部变量仍然共享
mc.modclass.nptest(self,x)
#self.a是父类中提供的内部变量,继承而来
self.b=self.a+2
#调用getxy也是父类中的
[self.aa,self.bb]=mc.modclass.getxy(self)
#返回值
def getxy(self):
return [self.aa,self.bb,self.b]
modinheritance2.py文件的内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生2
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
import modclass as mc
import modinheritance as mi
class modinheritance2(mi.modinheritance):
#初始化,定义内部变量
def __init__(self):
mi.modinheritance.__init__(self)
self.c=0
self.cc=np.array([])
#从外部传值进来进行计算
def nptest(self,x):
#调用父类同名函数,内部变量仍然共享
mi.modinheritance.nptest(self,x)
#self.a是父类中提供的内部变量,继承而来
self.c=self.b*2
#返回值
def getxy(self):
return [self.aa,self.bb,self.b,self.c]
modinheritance3.py文件的内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生3
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
import modclass as mc
import modinheritance as mi
class modinheritance3(mi.modinheritance):
#初始化,定义内部变量
def __init__(self):
mi.modinheritance.__init__(self)
self.c=0
self.cc=np.array([])
#从外部传值进来进行计算
def nptest(self,x):
#调用父类同名函数,内部变量仍然共享
mi.modinheritance.nptest(self,x)
#self.a是父类中提供的内部变量,继承而来
self.c=self.b*2-1
#返回值
def getxy(self):
return [self.aa,self.bb,self.b,self.c]
modmultiinheritance.py文件的内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的多继承和派生
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09
import numpy as np
import modclass as mc
import modinheritance2 as mi2
import modinheritance3 as mi3
class modmultiinheritance(mi2.modinheritance2,mi3.modinheritance3):
#初始化,定义内部变量
def __init__(self):
mi2.modinheritance2.__init__(self)
mi3.modinheritance3.__init__(self)
self.cc=np.array([])
#从外部传值进来进行计算
def nptest(self,x):
#调用父类同名函数,内部变量仍然共享
mi2.modinheritance2.nptest(self,x)
mi3.modinheritance3.nptest(self,x)
[a,b,c,d]=mi2.modinheritance2.getxy(self)
[e,f,g,h]=mi3.modinheritance3.getxy(self)
self.cc=h*b+f/g
#返回值
def getxy(self):
return [self.cc]
执行结果:
[realasking@Laptop mod_test]$python ./test.py
第一个函数
1.0 你好
2.0 你好 你好
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[ 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 ]
[ 0.6569866 0.98935825 0.41211849]]
[[ 0.84147098 1.81859485 0.42336002]
[-3.02720998 -4.79462137 -1.67649299]
[ 4.59890619 7.91486597 3.70906637]]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[ 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 ]
[ 0.6569866 0.98935825 0.41211849]]
[[ 0.84147098 1.81859485 0.42336002]
[-3.02720998 -4.79462137 -1.67649299]
[ 4.59890619 7.91486597 3.70906637]]
[[ 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 ]
[ 0.6569866 0.98935825 0.41211849]]
[[ 0.84147098 1.81859485 0.42336002]
[-3.02720998 -4.79462137 -1.67649299]
[ 4.59890619 7.91486597 3.70906637]]
[[ 0.62742108 1.76304538 0.17392737]
[ 0.34550582 -4.77841949 1.667137 ]
[-4.56932481 7.90020068 -1.99363595]]
[[ 0.36833317 1.73056479 0.03009844]
[ 0.11701337 -4.76800625 1.65940619]
[-4.52264351 7.89176398 1.8180512 ]]
[[ 1.32622372e-01 1.70852457e+00 9.05779427e-04]
[ 1.36609043e-02 -4.76063376e+00 1.65289587e+00]
[ -4.44147235e+00 7.88613188e+00 1.76276049e+00]]
[[ 1.75371785e-02 1.69234561e+00 8.20436258e-07]
[ 1.86614503e-04 -4.75509451e+00 1.64732846e+00]
[ -4.27947407e+00 7.88205653e+00 1.73038103e+00]]
[[ 3.07536865e-04 1.67985944e+00 6.73115654e-13]
[ 3.48249724e-08 -4.75075909e+00 1.64250647e+00]
[ -3.88467867e+00 7.87895041e+00 1.70839371e+00]]
[[ 9.45789219e-08 1.66987858e+00 4.53084684e-25]
[ 1.21277870e-15 -4.74726233e+00 1.63828512e+00]
[ -2.62823228e+00 7.87649452e+00 1.69224667e+00]]
[[ 8.94517247e-15 1.66168844e+00 2.05285731e-49]
[ 1.47083218e-30 -4.74437593e+00 1.63455555e+00]
[ 1.29074388e+00 7.87449858e+00 1.67978152e+00]]
[[ 8.00161105e-29 1.65482924e+00 4.21422313e-98]
[ 2.16334731e-60 -4.74194900e+00 1.63123425e+00]
[ 1.24045771e+00 7.87284127e+00 1.66981536e+00]]
[[ 6.40257794e-057 1.64898987e+000 1.77596766e-195]
[ 4.68007157e-120 -4.73987740e+000 1.62825592e+000]
[ 1.17338934e+000 7.87144118e+000 1.66163597e+000]]
[[ 1.68042640e-225 1.63955432e+000 0.00000000e+000]
[ 0.00000000e+000 -4.73652238e+000 1.62313097e+000]
[ 9.55219008e-001 7.86920111e+000 1.64895184e+000]] [[ 4.09930043e-113 9.97325369e-001 0.00000000e+000]
[ 2.19030699e-239 9.99669830e-001 9.98500367e-001]
[ 8.82872574e-001 9.99867812e-001 9.96475032e-001]] 2
[[ 1.68042640e-225 1.63955432e+000 0.00000000e+000]
[ 0.00000000e+000 -4.73652238e+000 1.62313097e+000]
[ 9.55219008e-001 7.86920111e+000 1.64895184e+000]] [[ 4.09930043e-113 9.97325369e-001 0.00000000e+000]
[ 2.19030699e-239 9.99669830e-001 9.98500367e-001]
[ 8.82872574e-001 9.99867812e-001 9.96475032e-001]] 2 4
[array([[ 1.43475515e-112, 3.49063879e+000, 0.00000000e+000],
[ 7.66607448e-239, 3.49884441e+000, 3.49475128e+000],
[ 3.09005401e+000, 3.49953734e+000, 3.48766261e+000]])]