2017-06-24 09:50:14
一、变量
Python中的变量名的要求和C++基本一致
(1)只能以字母或者下划线作为开头,不能以数字开头
(2)标识符的其他部分可以有字母下滑线和数字组成,不允许有特殊字符出现如$等(c++中可以有$,且可以放在首位)
(3)不允许有空格,不允许有-分割
python 中只需要给变量赋值而不需要申明具体的数据类型,这是和c++有区别的地方
id(): 得到变量地址
eval(string s): 在内存中寻找 s这个变量名,有的话给出他的值
二、判断语句利用冒号和缩进完成
冒号必须要加上
if xxxx:
elif xxxx:
else xxxx:
#程序中出现中文会报错,需要加上coding=gbk
需要注意的是python中是没有switch case语句的
# coding=gbk# 出现了syntaxerror:non-utf-8 code 错误就是编码问题,需要加上 coding=gbkif name=="seu": print("东南大学")else: print("其他大学")name = input("请输入学校:")if name=="UCB": print("加州伯克利")else: print("其他大学")
三、循环语句
冒号必须要加上
1、while ...:
2、for...in:
for..in是另外一个循环语句,它在一序列的对象上逐一使用队列中的每个项目。else部分是可选的。如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。
for i in range(1,5): print(i)else: print("循环结束")
range()生成一个序列,前开后闭,第三个参数是步长,默认值为1
四、运算符和表达式
与c++不同的地方:
1、乘法* 既可以表示两个数相乘,若是字符串乘以数字则是将字符串复制多次
2、幂运算** a**b,表示a的b次幂
3、与或非 用的是英文表示 and or not
4、python不支持++ ,--等自增,自减操作
优先级:
五、函数
def xxx(xxx,xxx):
使用def关键字进行函数的声明,形参中可以存在有缺省值的存在,值得注意的是,和c++一致只能在末尾的参数有缺省值
若要修改外部参数值,需要加上global关键字,告诉编译器这是外部参数。
关键参数技术:即直接使用参数名进行赋值操作,避免了参数顺序,参数个数的问题,显得更加方便
def fun(x,y=5,z=10): print("x =",x,"y =",y,"z =",z)fun(3,z=1)
另外,可以使用return语句返回一个值,使用pass表示空语句
六、文档字符串
可以使用__doc__(注意双下划线)调用查看函数或者类中第一个未被赋值的字符串,一般用来解释函数的功能
def fun(x,y=5,z=10): "这个函数的作用是输出三个数字。" print("x =",x,"y =",y,"z =",z)print(fun.__doc__)
七、面向对象编程
基本语法:
class xxx:
def fun(self):
xxxx
(1)python中的类中元素在默认情况下都是public的,若要将某个数据声明成私有数据,则要在数据声明时在名字前加上两个下划线,形如:__privateval。
(2)public的数据不需要在函数外单独声明,只需要在__init__函数里加上就可以。
(3)函数外声明的数据属于整个类所有,类似于c++里的static静态成员数据,调用也是使用类名加上成员访问操作符
(4)类方法都必须加上self参数,这个和c++中的this指针是统一的,只不过必须要显示的表示出来
(5)__del__析构函数,在对象结束生命期的时候自动调用,也可以使用del 函数显示调用,必须要有self
(6)类初始化使用类名加上(),形如: p=xxx(xxx)
(7)析构函数一般不用写,因为python有自动回收机制,如果 自己写的话有一点需要注意的是,如果析构函数中修改了类的数据成员需要同过self.__class__.xxx来进行修改,否则会报错。简单的理解就是析构是针对当前对象的析构,所以需要通过self来进行调用与修改。更深层的理解是由于python回收机制的问题,由于回收的不可控性,如果只写一个del,则会导致出错。如果将所有的对象都显示调用析构函数,则也不会出错。不过这样显然得不偿失。
class Person: population=0 def __init__(self,name): self.name=name Person.population+=1 def show(self): print("目前的人口数是%d" %Person.population) def __del__(self): #写成Person.population-=1就会报错 self.__class__.population-=1 print("%s析构函数被执行了" %self.name)p1=Person("a")p2=Person("b")p1.show()del p1p2.show()
面向对象中的继承操作:
class Perdata: def __init__(self,name,age): self.name=name self.age=age def show(self): print("姓名:%s 年龄:%d" %(self.name,self.age))class Tecdata(Perdata): def __init__(self,name,age,salary): #调用父类的初始化函数 Perdata.__init__(self,name,age) self.salary=salary def show(self): #调用父类相应的函数 Perdata.show(self) print("工资为%d" %self.salary)t=Tecdata("TIMHY",22,1)t.show()
七、文件输入输出
python中使用file类完成相关文件的输入和输出操作
常用的函数:
.open("路径",模式)
.read() .readline() 读文件
.write(xxx) 写文件
模式‘r’(缺省模式) 读;‘w’ 写(若源文件里已经有内容,则清空从头开始写);‘a’ 结尾添加
f=open("e:\\t.txt",'w')s='''hello worldhello worldhello world'''f.write(s)f.close()fin=open("e:/t.txt")line=fin.readline();while len(line)!=0: #把结尾的换行符去掉,因为读取时已经将换行符读取到了 print(line,end='') line=fin.readline()
贴一段按行读取csv文件并输出的程序,比c++不知道高到哪里去了。
fin=open("C:/Users/YUAN/Desktop/ee.txt")fout=open("e:/ee.txt",'w')line=fin.readline().split(',');while len(line)==3: s=line[1]+" "+line[2] fout.writelines(s) line=fin.readline().split(',');fin.close();fout.close();
由于读取文件有风险,可能打不开,所以一般需要进行try-except语句进行控制。不过机制的Python提供了with open(...) as f:语句可以非常可靠的打开文件