第一部分:基本语法如下
1.简单的数学运算
- 可以直接运算,不用提前做赋值操作(目前发现是这样,用的jupyter notebook 编译器)
2.它会自己判断你的数据类型,就是一个int/double,它会输入double的
2.变量的赋值
1.变量的赋值也是可以直接进行的例如
2.变量同样可以进行运算
3.同样想java这样支持同时给多个变量赋值
3.函数的调用
1.使用系统内置的函数不用声明可以直接调用,调用形式是“函数名(参数)”,如这个绝对值函数
max函数,等等很多
4.不同数据类型的生成
1.普通字符串的生成,像java这样用“”或者‘’表示(感觉每门语言的开始都是hello world)
2.多行字符串的生成可以用三引号“““”””来表示(这个特殊点)
3.用[]生成列表(在列表里面可以运算也可以表示字符串)
4.用{}生成集合(甚至可以运用到集合的特点(唯一性),有点东西haha)
5.用{}也可以生成字典
从上述发现我已经给a赋值很多次不用的数据类型都没有定义,也可以用,这里语法好像宽松很多
5.循环和判断
1.for循环(这个和java不同的是发现目前不用指定循环次数)
tips:这里用了一个缩进下面会说到,这里的n就是我们要把集合里面的数赋值给它,然后输出
2.if判断
这里我们发现if条件判断的参数同样支持表达式形式
6.代码块的缩进
1.从上的例子我们可以发现只要缩进是相同的,Python就会将他们当做一个代码块,这个缩进的大小是任意的(我还是喜欢一个制表符,方便啊)。
2.这个缩进一般用在判断(if,else,elseif等语句)、循环、定义函数、处理异常、上下文管理器、定义类
3.重点要注意的是使用缩进的时候要用:引导,不然会报错
7.自定义类型
1.这个就相当于java中自定义一个类并写好它的属性和方法,同样是用class关键字
这里用的是书本的例子,为什么会报错呢?原因是那个_init_这个初始化函数原来前后是两个__下划线的。
修改后运行如下
2.属性可以通过赋值修改
3.还可以动态的添加新的属性
4.同样可以调用类里面的方法,直接调用即可
8.变量名的覆盖
因为我们可以给函数随意赋值,所以有可能会改变系统内置的函数例如书本这个例子
所以我们在使用这个使用要尽量避免给Python已有的变量名进行赋值
8.模块的使用
这个和其他变成语言一样,使用import关键字导入相应的库以便于用它的函数或者方法
第二部分:数据类型
类型 | 实例 | 类型 | 实例 |
整型 | -100 | 列表 | [1,1.2,''hello] |
浮点型 | 3.1416 | 元组 | ('ring',1000) |
长整型 | 10000000L | 集合 | {1,2,3} |
布尔型 | True、False | 字典 | {'dog':11,'cat':2} |
字符串 | 'hello' | NumPy数组 | array([1,2,3]) |
这里我就直接把书中这个放过来吧,这里我总结书上所说的运算和取值范围为以下几点
- Python会自己判断数据类型并作出相应的处理
- Python超出数据范围会自动变换,例如超出整数的最大值会变成长整型
- Python可以用进行指数运算,例如10**3=1000(即10的三次方)
- Python可以进行复数运算,是通过调用real和imag来实现(分别求实部和虚部)
- Python可以自动进行混合运算,只要将表达式写好就行
- 类型之间也支持强制转换(但是浮点转换成整数只保留整数部分)
- 进制表示法,分别在数字面前加上(0b、0或0o、0x)来表示二进制、八进制、十六进制
第三部分:字符串的基本操作
总结来说分为以下几点
1.字符串的连接(和java一样,通过+号连接)
2.字符串的乘法得到的是字符串的重复次数(特别点,java会报类型错误)
3.通过内置函数求字符串的长度
4.可以通过对象调用内置函数做不同的事情(object.method()),例如
(1)用split()按某种方式从左边开始分割字符串(默认空白符)
(2)(自定义也行)
(3)(可以通过过调整参数决定分割次数)
(4)(rsplit()则是从右边开始)
(5)(其余方法参考书本分别是join()、replace()、upper()、lower()strip()、
rstrip()、),它们的功能别分是(连接字符、替换字符、让字符全大写、全小写、取出两端多去空格、去除结尾多余空格)
(6)转义字符的使用(同java差不多,如换行是\n,制表符是\t,反斜杠是\)
(7)代码的换行(这个特殊点,有两种方法,分别是用括号和反斜杠,需要的注意的是双引号)
(8)数字和字符串之间的转化,同样直接调用函数就可以实现例如:
tips(其中str适合人看,repr适合Python解释器看)
同样的可以实现进制之间的转换(分别对应16、8、2进制)
(9)可以计算字符串的ASCII码,利用ord()函数和chr()实现正向和反向求解
5.字符串的格式化输出(利用%或者format()方法)
tips:前面的%s和%d是表示输出的类型,后面的%表示用()里面的参数依次替换
tips:花括号的内容依次被format()方法里面的参数替换,同时这个format()方法的替换还支持指定形式的替换,例如
指定位置替换
指定名字替换
tips:上述指定替换的位置都可以替换,只是标识符要相对应,否则报错
此外还可以用{}进行格式化输出例如
1.指定字符串长度,不够的时候在后面用空格补充
2.指定整数长度,不够在前面补空格
3.指定浮点数,指定显示小数后几位(注意那个数字前面.哦)
6.Unicode字符串
- Python的字符串类型在表示其他语言会出现问题
.
由此发现虽然不影响输出,但是字符长度不是我么认知的那样,故而要用Unicode编码
表示方法是在前面加个u,然后发现字符类型变成了unicode,此时我们再次查看它的长度
tips:用str()函数和unicode()函数可以实现字符串和Unicode字符串之间的转换,但是必须是英文字符,例如上面的例子a字符(哈哈)就不能直接转换,还有非英文的Unicode字符串吗也不能直接转换成字符串,例如b.
当然,如果实在要实现这样的转换,可以用Python提供的方法decode()和encode()。
例如
这里能够转码的原因是指定了字符的编码方式(“utf-8”)
7.索引
Python可以通过[]来对一个有序的序列进行索引(从0开始的索引的是序列的第一个元素,注意这个点),例如
如果[]里面的参数是个负数则代表是从后面开始索引(此时是从-1开始的)
tip:注意不能超过索引范围,不然出错是必然的
8.分片var[lower:upper:step](其实就是指定一个范围索引,不声明默认从第一个元素开始,注意中间是用:分开)例如
前后两个值可以省略,代表的意思有三种,省略前面的默认值就是0,省略后面的默认值就是使用当前字符串的长度,两个都省略则是直接输出原本的字符串,例如
其中也是可以使用负数的
都省略
最后我们解释一下那个step
举个栗子如下
可以看出后面那个数值决定的是每多个数值取一下作为一个新的字串(省略前面那就是从第一个元素开始,可以看出这个数值包括第一个数值)
所以如果我们把它取值为-1的话,那么就只倒过来每隔一个取值,意思就是将字符串倒置输出
还有一个有趣的是如果我们将那个upper数值取值超过当前字符串的长度不会报错,就会当做字符串的最大值输出
9.列表
列表的基本表示:
-
使用[]生成
-
只使用[]或list()函数能生成空列表
列表的基本基本操作: -
可以用len()函数求其长度
-
可以做连接操作(将列表内的元素按顺序连接在一起)
-
和字符串相同,进行乘法操作就是重复多次
-
列表也一样可以进行索引和分片,同时可以修改里面的内容(但是单纯的字符串不行)
-
元素的删除
-
从属关系的判断
-
不改变列表的方法
-
改变列表的方法
修改里面的元素
单纯的字符串不能修改
也可以分片式修改(当间隔为1的时候就不需要考虑替换序列的长度,Python用的是整段替换方法)
间隔为1时:
这里比较有趣的是如果把空的序列替换进去的话就能实现删除的效果
元素的删除(使用关键字del) -
单纯删除某个位置的元素
-
分片式删除(step的数值代表删除间隔为多少的)
删除间隔为2的(删除第一个6、第三个9、第5个5)
从属关系的判断(利用 in 和 not in 关键字)
- 测试是否在序列中
- 测试是否在字符中
不改变列表的方法
-
count()(计算某个元素出现的次数)
-
index()(返回某个元素第一次出现的索引位置)
如果元素不存在就会报错
改变列表的方法 -
append()(向列表的最后添加单个元素,但如果这个元素是个序列,那么不会展开)
-
extend()(将另一个序列的元素依次添加到序列的最后)
-
insert()(指定位置插入元素,插入后的元素依次后移)(书本上有错误,百度发现它的写法有问题(手动滑稽脸))
-
remove()(将列表中的第一个指定元素删除,即重复的元素就只会删除第一个,如果该元素不存在就会报错)
-
pop()(删除指定位置的元素并返回它的值,参数是负数也行)
-
sort()(排序方法,按一定的规则从小到大排序,这个规则由Python自定,参数值reverse=true时是反向排序)
-
sorted()(这个和上面不同点在于这个会将排序好的列表存储到一个新的列表并显示,这就表明了不会改变原来的列表而实现了排序)
-
reverse()(就是反向排序,但是不会进行大小比较,就是单纯的反向排序而已)
-
reversed()(同理是不改变原列表的反向排序,他返回的是一个迭代器,不是列表,要使用list()方法输出)
10.元组(就是不可变的列表)
元组的基本操作
- 创建元组
- 查看元组
特别的,要想创建单个元素的元组,那么不能只在括号内写元素,还要加一个“,”号(同样的括号也可以省略,但是逗号不能省略)
元组的方法
count()(同列表一样)
index()(同列表一样)
元组可以和列表互相转换(使用tuple()、list())
元组与多变量赋值实现特殊效果(被赋值的变量个数必须等于元组的元素个数)
这样就能实现两个数值的交换了
元组可变的例外情况(就是元组里面的元素本身是可变的)
我们可以发现虽然元组不可变,但是通过改变元组里面的元素从而变相的改变了元组
11.字典(键–值)
-
字典的生成(通过{}或者用dict()函数)
详细介绍下dict()函数的三种生成字典的方法
-
字典的查看(通过索引查看,只能索引‘键’,不是索引‘值’)
-
字典中键的不可变性(指的是字典的键的值只能是一个不可变的值,故而键的值经常用两种不可变的类型,即整数和字符串。当然,不可变的元组也同样可以作为键的值)
,
由此可见,因为列表是可变的,所以抛出异常 -
从属关系的判断(用关键字in,记住是判断键,不是判断值)
字典的方法 -
get()(用于解决用索引查询不到数据抛出异常问题,当键不在时就返回default值(由我们指定,默认为none))
-
pop()(同样在删除指定位置的元素时可以提供返回被删除的值,删除不存在的指定位置是返回default值(默认返返回none,可以指定))
-
del()(同样是删除,但是没有返回值)
-
update()(直接对相应的键赋值也可以更新,不过批量操作时就用这个)
我们可以发现,这个更新会把已经存在的更新,不存在的添加 -
keys()(返回一个由所有键组成的列表,就是用来查看一个字典的所有键的值)
-
values()(这个就是查看字典的值的方法,返回一个值的列表)
-
items()(这个就是返回字典键值对的元组列表(有点拗口,就是元组组成的列表,元组的元素时字典的一个键值对))
12.集合
集合的生成
-
用set()函数
-
直接用{}(但是不能用来生成空的集合,因为空的{}生成的字典)
集合的运算(符合数学中集合的运算规则) -
并集(a,b位置可以交换)
-
交集(同上)
-
差集(不能交换,因为结果表示的是第一个集合不在第二个集合的元素组成的集合)
-
对称差值(可以交换(用symmetric_difference()这个方法),就是并集和交集的差)
-
包含关系(计算子集、真子集或者说表示)
直接用<=或者>=判断谁包含谁
调用issubset()方法判断某个集合是不是它的子集
用>或者<判断真子集(子集是包括本身的元素的集合,真子集是出本身的元素的集合。)
集合的方法
-
add()(和列表的append()方法类似,就是添加单个元素,添加的必须是不可变的元素,如果添加相同的元素,集合本身不改变)
-
update()(与列表的extend()相似,添加多个元素,可以把一个序列作为参数)
-
remove()(删除集合中的单个元素,当不存在时会抛出异常)
-
pop()(因为集合是无序的,所以这个没有参数,但是可以随机删除集合中的一个元素并返回这个元素的值)
-
discard()(这个和remove差不多,不同点在于就算是删除不存在的元素它也不会抛出异常)
从属关系的判断(使用关键字in)
不可变集合(Frozen Set,创建之后就不可以更改,用于作为字典的键)
最后就写到这里,等后面学习跟进再回来补充