前不久刚确定好了这个暑假学习STM32的计划,但众所周知,flag立下后不是被推倒就是在被推倒的路上。本次学Python是因为暂时需要用到Openmv,决定入门一手python后再去学Openmv。学习目标:从C语言和Java角度类比记忆Python的语法和编写规则,不需要太深入,只求懂语法和编写规则,以后觉得感兴趣就深入探索一波Python。
一.
1.Python的变量声明不需要声明基本的数据类型,且变量可以被任意类型的数据初始化或者再赋值。
2.Python的数据类型转换格式是 ”要转换成的数据类型(需要转换的数据)“,Python有布尔类型,但比java好一点点,布尔类型中真是首字母大写的True,假是 False
3.获取键盘数据用的是 input(”会输出的内容“),比Java都更会省代码量。
4.print是输出内容代码,基本和C语言的一致,但有了一个Java里的print特性,有自动数据类型转换,会把所有数据转换成字符串再输出,所以有了数据拼接的功能。
5.注释格式和C语言类比就是将 : 单行注释//变为了# ;多行注释/**/变为了''' '''。
6. C语言用花括号表示代码块{},但Python使用缩进表示同一个代码块,比如当缩进同为一个tab时就为同一个代码块
str_1="字符串变量1"
str_2='字符串变量2'
data_1=123 #整型变量1
data_2=1234
data_1=str_1 #将整型变量转为存储字符串的变量
str_3=int(data_2) #将data_2的数据转换为字符串形式后赋给字符串变量3,也就是"1234"
>>> age=input("请输入你的年龄:")
请输入你的年龄:123
>>> age=int(input("请输入你的年龄:")) #这里用了一个强制类型转换,input是获取键盘输入数
#据,将这个数据转换成int型后再赋给age,猜测应该
#是为更好运算数据
请输入你的年龄:1234
>>> print("123\0xa123")
123 xa123
>>> print(r"123\0xa123")
123\0xa123
'''
由此可见在print的双引号前加一个R或r就能
将转义字符取消使用
三个引号或三个双引号单独使用是注释。三个单引号或一个单引号在print中用则代替双引号,猜测应该是懒得用转义字符,又为了防止和一些需要双引号或单引号的场景同时出现而没有左右配对的问题
'''
age =int(input("今年多大了"))
if(age==18):
print(age)
print("岁了")
else:
print("不想告诉你")
今年多大了18
18
岁了
二.
1.运算符方面多了两个://是求商的整数部分,x**Y是求x的Y次方
2.逻辑运算符上有点变化:C语言里的&&变为了and;||变为了or;!变为了not。我记得C语言里面有一个函数库里面也是这样用的。
3.运算符优先级,不记得就用小括号手动分割运算。
三.
1.if判断表达式后面和else后面都要加英文的冒号 : ,同时C语言的elseif有点变形。
2. while循环的判断式后要加一个: ,猜测应该是将会有代码块的地方都要加冒号 : ,
for循环变化较大,这个有点像Java里的foreach方法,可以遍历集合元素。相当于把foreach里的 中间变量:集合变成了 迭代变量 in 对象。
这个对象有Range(start,end , step),start形参是累加开始的地方,可以省略此参数,省略时默认为0;end累加结束的地方,不可省略,当只有一个参数时默认是end的参数;step是累加间隔数,可以省略,省略时默认为1。两个参数时表示start和end。当然,这个对象也可以是别的”集合“。
3.break、continue和pass语句。前两个没什么变化,但新增的pass语句是一个。。。。。空语句,目前我只知道它可以用来占个位置,但无实际功能。
四.
1.序列,从功能描述来看,可以从C语言的数组来类比,索引就是int [4]里的4,元素就是这个int 数组的第五个int数据。PYthon比较先进吧,,,,,,它的序列索引竟然可以标负的,而且正的索引和负的索引可以表示同一个序列;无论正负 ,索引都是从小到大,正索引第一个是0,负索引最后一个是-1,且它前面的元素索引一定比-1小。我怀疑想出这个模块的作者受过很长的数组的折磨,不然Ta是怎么想到从后面开始去取数组元素的。
2.切片,格式上与for循环那个range对象有点像,不过这个切片是可以给全部数组用的。序列名[start:end:step],这三个参数都可以省略,但冒号不能省略;开始默认为0,结束默认为数组长度,step默认为1;但只有第三个参数省略时,第二个冒号才可以省略。
3.序列相加。
加入概念,元组,列表;这两个都是序列;列表的元素是可以修改的(可以修改元素的值),而元组的元素不能修改,但元组元素的元素可以修改,一维数组也就是指向二维的地址不能修改,但二维却存储着数据,数据可以修改;序列和元组另外一点就是它的元素可以是其他任意数据类型,有点像C语言的结构体,由自己确定每个结构体的元素。
序列相加只能和相同类型的相加,比如元组和序列就不是同一种类型的,列表和字符串也不是同一个类型的。
4. 序列乘法,列表后面*n(n是个正整数),可以与print结合,做到了我以前想做的事,将循环和print结合起来。
5. 判断一个元素是否在一个序列中,用 需要判断的元素 in 指定的序列,或者 需要判断的元素 not in 指定的序列。语句返回值是布尔类型。
6.一些很好用的函数,max()求最大值,min(),len()求元素个数(相当于求长度吧),list()将序列转换为列表,str(),将其转换为字符串,sum()求元素和,sorted()对元素进行排序,reversed()将当前序列反过来排序。
7.创建列表用 列表名字=[元素1,元素2,,,,,]也可以是空的,或者用list(对象)将对象的值变为列表;删除列表用 del 列表名字,但Python有自动回收的功能,会自动删除不用的列表。
8.列表的for循环多了一种,for index,item in enumereate(对象):变量index存储索引值,item存储索引对应的元素值,enumereate()的作用是将对象的索引组合起来。
9.列表添加元素, 列表名字.append(对象),Java的list.add();
加列表添加进另一个列表, 列表名字1.extend(列表名字2),作用是将列表2的元素放进列表1的末尾。
删除元素,del 数组名字[对应元素的下标];数组名字.remove(要删除的元素值)。
获取指定元素的出现次数:要查找的列表.count(指定的元素)。
获得指定元素的下标: 要查找的列表.index(指定的元素)。
10. 元组在前面提到元组的元素是不可修改的,但元组是可以被再赋值的(间接法修改单个元素)。。。。。。列表是用[]包围起来的,元组是()包围起来的,没有括号包围起来的序列统一为元组。
五.
1.字典个人认为这个很像Java里封装好了的Map接口。钥匙(key)必须是唯一的,对应的值(value)可以不唯一,但这种对应关系(key-value)必须不变。在Python中这种字典创建有两种,直接像序列那样创建,或者用dict(键序列,值序列)赋予字典。
2.集合,只能使用set()创造空集合,其添加和删除有add,remove,和pop().同时Python里的集合还有交集、并集和差集,分别是& | -。
六.
1.函数,创建函数与C语言近乎一样,但多了一个注释栏,这个注释栏也可以被调用。
Python创建函数需要将def写在前面,用于表示这是在创建函数。