Python学习笔记:Python基础

Python学习笔记:Python基础

学自廖雪峰巨佬的Python3教程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431658427513eef3d9dd9f7c48599116735806328e81000

1.输出语句:print(),输入语句:input(),可以将输入语句的值赋予一个变量

2.Python能直接处理的数据类型有:整数(十进制,16进制都可以用,而且没有大小限制),浮点数(支持科学计数法,也基本没有大小限制,但是超出一定范围就直接表示为inf无限大),字符串(使用单引号或双引号括起来,如果要输出特定字符,则需要用转义字符“\”来标识);如果要用到斜杠,但是又不希望转义,则可以用r''把字符串括起来;如果字符串内部有很多换行,则可以用'''...'''的格式表示多行内容(那三个点并不需要自己输入,只需要用三个单引号开头就会自动进入多行输出格式);

布尔值(只有True和False两个值,支持一切布尔运算),空值(none,空值并不等于零,等同于DBMS里的null)

3.变量,命名规范一如其他语言,赋值语句使用“=”符号,变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。定义变量时,Python解释器干了两件事情(以a='ABC'为例):

  • 在内存中创建了一个'ABC'的字符串;
  • 在内存中创建了一个名为a的变量,并把它指向'ABC'。

当把变量a赋值给另一个变量b时,这个操作实际上是把变量b指向变量a所指向的数据

4.常量,常量就是不能变的变量,但是Python没有机制能保证某个变量不会被改变,所以,Python,压根没有常量设定
(╯‵□′)╯︵┴─┴ 

5.在Python中,有两种除法,一种除法是“/”;这种是精准除,还有一种是“//”,这种被称为地板除,即整除;取余数用“%”

6.8个bit作为一个byte,因此一个byte能表示最大的整数就是255,2个字节可以表示的最大整数就是65535,4个字节可以表示的最大整数是4294967295;然后老美发明了ASCII编码,只有127个字符,只有英文、数字和符号;中国制定了GB2312,用来处理中文,还不能和ASCII编码冲突,处理中文至少需要两个字节;Unicode把所有语言都统一到一套编码里,用2个字节表示一个字符;虽然Unicode处理了万国码的问题,乱码问题消失了,但是如果文本基本上都是英文还用Unicode的话,在存储和传输上很不划算,因此有了UTF-8,可变长编码,英文是1个字节,汉字通常是3个字节,生僻字是4-6个字节

7.在Python3中,字符串是以Unicode编码的,因此Python的字符串支持多语言。对于单个字符的编码,Python提供了ord()函数后去字符的整数表示,chr()函数则把编码转换为对应的字符;如果知道字符的Unicode编码,还可以直接输入Unicode编码返回中文。

8.由于Python的字符串类型是str,在内存中是以Unicode表示,一个字符对应若干个字节。但如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes,Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x=b'ABC'

以Unicode表示的str可以通过encode()方法编码为指定的bytes 

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not 
in range(128)

因为中文编码超过了ASCII的范围,所以Python会报错,反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes,可以通过decode()方法把bytes变为str,如果bytes中有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节

>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

 len()函数计算的是str类型的字符数,bytes类型的字节数

9.为了让Python解释器读取源代码时按UTF-8编码读取,通常要在文件开头写上这两行

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

同时,要确保文本编辑器正在使用UTF-8 without BOM编码

10.如果进行格式化输出,要使用%占位符,%d替换整数,%f替换浮点数,%s对应字符串,%x对应十六进制整数,有几个占位符后面就跟几个变量或者值,顺序对应,如果不太确定应该要使用哪个占位符,用%s总不会错,如果要输出%号,则需要用%%代替

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

11.List,一种有序的集合,可以随时添加和删除其中的元素,使用索引(下标)来访问list中每一个位置的元素,从0开始,如果要取最后一个元素,可以直接访问索引-1,以此类推,可以访问倒数第2,第3个,list里的数据类型不做限制

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

len()函数:获取list的个数
insert(index,value)函数:不加index参数,则会追加元素到末尾,指定索引号,则会把元素插入到指定的位置
pop(index)函数:不加index参数,删除List末尾的元素,指定索引号,则会删除指定位置元素
如果要把某个元素替换成别的元素,可以直接赋值给对应的索引位置
List元素也可以是另一个list,这样的List可以看成是一个二维数组,如果List中一个元素也没有,就是一个空的List

12.Tuple,元组,跟list很类似,但是Tuple一旦初始化就不能修改,没有插入元素的方法,但跟List一样可以正常获取数据

>>> t = (1, 2)
>>> t
(1, 2)

但是,要定义一个只有1个元素的Tuple,直接填1进去是不行的,这样会认为赋值变量为1,所以需要在1后面加上逗号

Tuple里有个坑,如果Tuple里又包含一个list,list里的元素是可变的,因为list本身才是Tuple的元素

13.Python里的条件判断,用if实现,then变成了冒号,依靠缩进作为代码块(一个语句块中的所有语句必须使用相同的缩进),else-if在Python里变成了elif

14.Python的循环,一种是for..in..:,这种有点像迭代器,顺带一提,range(x)函数可以生成一个以0开始的数量为x的整数数列;另一种循环是while condition:,只要满足条件就不断循环。

15.Python里的dict类似于其他语言的map,以<key,value>的形式存储,具有极快的查找速度,用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

或者可以通过get()方法,获取数据,如果key不存在,会返回None,或者自己指定的值:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

还可以通过in来判断key是否存在:

>>> 'Thomas' in d
False

dict内部存放的顺序和key放入的顺序是没有关系的,和list比较,dict有以下几个特点:

1.查找和插入的速度极快,不会随着key的增加而变慢;
2.需要占用大量的内存,内存浪费多。

而list相反:

1.查找和插入的时间随着元素的增加而增加;
2.占用空间小,浪费内存很少
所以dict是用空间来换取时间的一种方法,正确使用dict的第一条就是dict的key必须是不可变对象,因为dict根据key来计算value的存储位置,所以key不可变,以保证hash的正确性,在Pythonn中,字符串、整数等都是不可变的,因此可以用来作为key,而list是可变的,就不能作为key

要删除一个元素,可以使用pop(key)方法

16.set是一组key的集合,由于key不能重复,所以在set中,没有重复的key

要创建一个set,需要提供一个list作为输入集合

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

通过add(key)方法可以添加元素,remove(key)方法删除,而且set之间可以做交集(&)、并集(|)操作。

17.对于不可变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容,相反,这些方法会创建新的对象并返回,这样就保证了不可变对象本身永远是不可变的。

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

猜你喜欢

转载自blog.csdn.net/lrxcmwy2/article/details/84997987
今日推荐