python与java语法中的区别(笔记)

引子

从开始学习python以来,前几天我一直在学习基础理论知识,就在刚刚,我尝试了下敲代码,法相python作为一门偏解释性的语言,和之前学过的C++、java还是有很多区别的。于是我准备以我相对熟悉的java为参照,在此不定期记录python与java的一些语法不同之处,方便日后解决python问题和回顾java。
这里贴一下我学习Python的方式,是前辈给我介绍的廖雪峰的博客,将东西讲得是比较详细的,举的例子也比较接地气,很适合我这样的初学者学习。
博客地址:https://www.liaoxuefeng.com/wiki/1016959663602400

变量

同时创建多个变量并赋值

在java中,如果想要创建a和b两个变量,并赋值为0,语句应该为:

int a,b = 0;

而在python中并不支持你这么干
血淋淋的教训
相同的目标需可以如下两种语句实现:

a,b = 0,0
a = b = 0

下面的定义方式暂且不表,单论上面这种,这种定义方式其实也不是python提供的同时创建多个变量并赋值的途径,而是python的tuple数据类型的元组拆分。
在上述语句中,相当于把“0,0”看作“(0,0)”,然后将tuple中第一个元素赋给a,第二个元素赋给b。随着深入了解,我发现python还可以通过如下语句来交换两个变量的值:

a,b = b,a

那冒泡排序是不是就不用三个桶子来回倒,可以一步搞定了,想想有点爽。

集合

在java中常见的集合是list、map、set这三种
三者的区别差不多是这样的:

\listmapset
常见子类ArrayList,LinkedList,VectorHashtable,HashMap,TreeMapHashSet,LinkedHashSet,TreeSet
线程安全VectorHashtable采用底层方法时线程安全
有无序TreeMap有序,其他无序
可否重复key不能重复,value可以

在python中的集合类型我目前接触的为list、tuple、dict、set

\listtupledictset
类比java不限数据类型的list不限数据类型且内容不可变的listMapset
初始化-需要--
有无序
可否重复key不能重复,value可以

其中值得一提的是set里的元素可以进行交并等数学运算。

方法

在Python中,方法名居然是可以被当做一个变量的,在Java中这是不可能的。
Python中你甚至可以看到这样的代码

a = func(1) 
print('a = ',a) #a = 1
b = func
print(‘a = ’,b(1)) #a = 1
func = 1
func(1) #这里会报错

如上,方法名在Python中几乎是完全被当成变量看待了,一个方法名指向一组语句,这个指向可以被其他变量复制,只想同样的地址;如果这个指向被改变了,那么这个方法名对应的方法也就失效了。

语法

自增自减

python中没有++和–!!!!
在这里插入图片描述
我最开始还以为是我的list格式有问题,没想到是语法不支持。发现这件事情的时候人都要崩溃了,还是太年轻了,想象力不够。。。
那没有“++”、“–”的话,自增操作只能通过原始一点的方式来实现了:

i = i + 1;
i += 1;

不过这两种方式也有说道,在对于不可变对象时(int、string、tuple),两者没什么区别,但是在操作可变对象时(list、dict),“i += 1不会改变i的内存地址,而“i = i + 1”则会
两者有这种区别是因为后者在进行运算时,相当于新建了一个地址来存放原来地址与1加和后的值。

继承

这里直接引用廖雪峰博客中的原话:

def run_twice(animal):
	animal.run()

对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。

对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了。

也就是说这里在父类中写的方法并不在意数据类型,虽然写的是animal类,但实际上可以把它当做object,只要这个类里面有需要调用的run()方法就可以了。

switch

Python中是没有switch函数的,switch能做到的事情可以用elif来做,也就是说在Java中被当做屎山的书写风格在Python中是正解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值