一:基础知识
变量:Python与大多数其他计算机语言的做法稍有不同,它并不是把值存储在变量中,而更像是把名字贴在值上边,所以大多数python程序员会说“Python没有变量,只有名字”
字符串: 保持原始字符串 方案一:加r :string= r ‘C:\now’ 方案二:三重引号
操作符优先级:**(幂)//(语言除法)*(乘) /(数学真实除法) %(取余) +(加) - (减) <(小于) >()大于 and(与) not(非) or(或) 例: 3<4<5与3<4 and 4<5
输出:print 输入:input ("请输入合法字符:"); raw_input("什么东西都能接受");
分支与循环:(插代码)
列表:鱼C论坛说“列表:一个“打了激素”的数组”形容十分贴切 以中括号[1,2,'大王',1.2]表示
方法:添加一个 list.append(‘内容’) 扩展列表 list.extend(['内容1','内容2']) (也可以+但不建议使用) 插入 list.insert(1,'内容') 获取元素 与数组一样 list[2]
删除 list.remove('内容') del list[位置] 弹出:list.pop(索引) 列表分片:list[1:9:2]获得一个新的列表,为原列表重第一个到第九个每2个取一个值 反转 list.reverse()
排序:sort()从小到大 默认归并排序
元组:以小括号表示() 无法修改内容的列表 其他操作与列表一致 更新元组(在原元组的基础上新建一个元组,原元组被回收)tuple[:2]+('内容1',)+tuple[2:]
函数:
1 #定义一个函数 2 def add(num1,num2): 3 """这里可以写函数的说明文档""" 4 return num1+num2 5 #Python支持默认参数值 6 def add1(num1 = 2 ,num2 = 5): 7 """这里可以写函数的说明文档""" 8 return num1+num2 9 #Python 同样支持可变参数 10 def countnum(*num): 11 print("有%d个参数" % len(num)) 12 print(“第二个参数是:”,num[1])
字典:映射类型,以大括号{'语文':'A','数学':'A','英语':'B'} 项(item()),键(key()),值(valune())
创建字典:x=dict(语文='A',数学='A',英语='B')(dict为关键字)
方法:x.clean(); x.copy();返回字典 x.get("语文");返回value x.pop(); x.keys();返回含所有key的列表 x.values();返回含所有value的列表
集合: 以大括号set1={"1号","2号","3号","4号"},集合中每一个元素不重复,
set2=set(["1号","2号","3号","4号"])
set1==set2
输出:true
方法:add();remove();
文件:打开文件:open(file,mode='r',buffering=-1;encoding=Node;errors=None,newline=None,closefd=True,opener=None) 返回一个文件对象
'a'写入模式打开文件,文件存在·,则在末尾追加写入
方法:read(); readline(); write(str); writelines(seq); seek(offset ,from); tell();返回当前在文件中的位置
关闭文件:close();
文件系统:os模块
pickle模块:
1 import pickle 2 3 my_list = [123,3.14,'2号',['another list']] 4 #文件后缀为.pkl或者.pickle 5 pickle_file = open('E:\\my_list.pkl','wb') 6 #使用dump保存列表, 7 pickle.dump(my_list,pickle_file) 8 pickle_file.close() 9 10 11 pickle_filetwo = open(“E:\\my_list.pkl”,"rb") 12 #用load方法进行加载 13 my_listtwo = pickle.load(pickle_filetwo) 14 print(mylisttwo)
二:面向对象
类与对象:对象=属性+方法,类是对象的抽象,例如:“人”是一个类,“阿苍老师”就是一个对象,“拍电影”是他的一个方法,“大长腿”是他的一个属性
Java中的向上转型与向下转型
1 : 向上转型:大体可以理解为子类转换成父类,例子优先还是:
1 public class Animal { 2 public void eat(){ 3 System.out.println("animal eatting..."); 4 } 5 } 7 public class Cat extends Animal{ 9 public void eat(){ 11 System.out.println("我吃鱼"); 12 } 13 } 15 public class Dog extends Animal{ 17 public void eat(){ 19 System.out.println("我吃骨头"); 20 } 22 public void run(){ 23 System.out.println("我会跑"); 24 } 25 } 27 public class Main { 29 public static void main(String[] args) { 31 Animal animal = new Cat(); //向上转型 32 animal.eat(); 34 animal = new Dog(); 35 animal.eat(); 36 } 38 } 39 40 //结果: 41 //我吃鱼 42 //我吃骨头
(1):虽然将子类转换成父类,但调用方法是调用的是子类的方法,这里的转型只是父类的引用指向了子类的实例。
(2):如果子类还有父类中没有的方法 w 可以调用吗 ?答案当然是不能,子类转换成父类,子类多余的方法会丢失,就像例子中dog的run()方法会丢失
(3)为什么要用向上转型:父类是接口啊!接口的好处就不用说了,比如当你对所有动物全部放生,就不用一个个放生,可以 Save(Animal);就OK
2:向下转型:简单来说就是将父类转换为子类,但是转换可就不像向上转那末好转了!理解起来也比向上转型不好理解
(1):首先注意:向下转型的前提是父类对象指向的是子类对象,就是你必须先向上转然后才能向下转,可能会有人说转上去再转下来,没有意义啊!作用就是当再次转下来的时候,就可以调用向上转丢失的方法,而且编程以后接口一多会有很多泛型编程,这样就可以针对父类进行编程,如果需要再取用子类的方法。
(2):强制类型转换:将一个子类的引用赋值给超类,编译器是允许的,但将一个超类引用赋给一个子类变量必须进行强制类型转换,
public class Sys{ public static void main(String[] args) { Animal a=new Dog(); //向上转型 a.eat(); Dog aa=(Dog)a; //向下转型,编译和运行皆不会出错(正确的) aa.eat();//向下转型时调用的是子类的 aa.run(); Animal a2=new Animal(); Dog aa2=(Dog) a2; //-不安全的---向下转型,编译无错但会运行会出错 aa2.eat(); aa2.run(); } } //结果为: //我吃骨头 //我吃骨头 //我会跑 //报错······
结果表明:只有先经过向上转型的才能进行向下转型,向下转型必须要进行强制类型转换,
(3):另外要注意两点,
第一:如果Cat向上转成Animal,那末向下转Animal只能转成Cat,不能转成Dog,因为Cat怎么也不会变成Dog
第二:为了安全的类型转换,向下转型时最好先 if ( Dog instanceof Animal) 判断一下,否则一旦无法转换,程序就会直接终止