开始学习使用python,但是在已经会java的情况下,会经常由于先入为主而产生小障碍,现在记录下一些遇到的知识点,通过对比快速的学习一种语言。
0.注释
用井号表示单行注释
# 单行注释
用三个引号表示多行注释
"""
多行注释
"""
1.python中的数据类型
整数、浮点数
python中不分 short、int、long,也不分float、double
字符串
在python中字符串是基本数据类型,可以用单引号括字符串
布尔
Ture,False,首字母大写
在python中的与或非不是&&、||和!--------取而代之的是and、or和not,也都是短路逻辑
python中使用变量不需要声明类型,变量没有类型
i =2 #不声明变量类型,不用分号
print(i)
i= 2.5
print(i)
i='sldjfklsd' #再次赋值为其他类型
print(i)
思考:一个数字占用的内存大小是多少?如果要操作字节数组怎么办,例如串口通信?
2.运算符
/,除,3/2会得到1.5
//,除,向下取整,3//2会得到1
**,幂运算,3**2会得到9
python中没有++,--
3.判断与循环
条件判断,if
pyhon不用大括号表示代码块,用的是冒号加格式缩进,同样距离缩进的代码属于同一个代码块,判断条件也不必须用括号括起来
if 100>=age >=18: #比较大小可以用一句写完
print('请进')
elif age >=0:#else if
print('请在成人陪同下进入')
else
print('输入错误')
循环
for...in... :
for x in range(101):#从0加到100
sum1 = sum1 + x
for x in range(1,100,2): # 相当于for (int x= 1; x<100; x+=2)
sum2 = sum2 + x #100以内的奇数的和
names = ['Michael', 'Bob', 'Tracy']
for name in names: #对列表进行遍历
print(name)
while,除了代码块的表示,其他与java一样,略
break:跳出整个for循环,continue:跳出本次循环,与java同样
python没有switch
4.集合
数组
python中没有数组的概念,可以用列表代替
列表list
使用起来即像数组又像ArrayList
a=[1,2,'3'] #可以装不同类型的元素
len(a)#求列表长度
a[-1] = 3 #可以取倒数第一个元素,也就是最后一个,比java方便
a.insert(0,0)
a.append(4)
a.pop(0)
a = a+[4,5,6] #两个列表拼成一个
元组tuple
与list类似,有序,一旦初始化之后就不能增删改
a=(1,2,'3')
字典dict
全称dictionary,对应map类型,键值对
a={'Michael': 9, 'Bob': 7, 'Tracy': 8}
if 'Tom' in a:
a.pop('Tom') #删除
else
a['Tom'] = 7.5 #新增一个键值对
集合set
python中单独把set叫做集合,无序,元素不重复,可以做交与并计算,只能遍历,不能单独取某一个元素
可以把java中的三种集合list、map、set对应python的列表、字典、集合
a={1,2,3}
a.add(4)
b=[1,1,2,2,3,3,4,4]
print( set(b) ) #用列表创建集合,去掉重复数值
5.函数
定义函数,使用def关键字,不标注返回值,参数没有类型,可以有默认参数,可以用可变参数,可以返回多个值
def maxtwo(lis):
x,y=0,0
for i in lis:
if i>x:
y=x
x=i
return x,y #实际上返回的是一个tuple
思考:python的参数传递,是值传递还是引用传递?
6.编译与解释
java需要编译成.class字节码文件(不是机器码),然后在jvm上解释运行,
python也是要编译出.pyc文件,然后运行在pvm上。
有人把这样的模式叫做半编译半解释与语言。但又有说法,python是一门解释性语言。
java是静态语言,python是动态语言
执行顺序:python并没有类似java的主函数入口,但是看很多人写代码会有这样的写法,来模拟main函数。
def main():
pass
if __name__ == '__main__': #魔法函数;
main() #在文件的最下边
python代码在执行过程中,遵循下面的基本原则:
自上而下的顺序
碰到普通语句,直接执行;
碰到函数,将函数体载入内存,并不直接执行
碰到类,执行类内部的普通语句,将类的方法载入内存,并不直接执行