Python自学笔记--基础篇
前言与简介
这是自己根据廖雪峰的官方网站进行Python学习的一个简单记录。可能只会记录自己感觉需要记录的东西,内容不会全面。如需参考请访问大佬的原地址,作为一个初学者"墙裂"推荐!!!
环境安装
关于这部分,我不想写…
输出与输入
主要作用于控制台
1 输出: print()
-
把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号
例
print("Hello, World !")
- 输出多个字符串进行拼接 使用"逗号" , 遇到逗号“,”会输出一个空格
- 可以输出变量,可以做数值计算,用法同java
2 输入:input()
- 控制台输入,注意用变量接.
例name = input()
- 输入时的提示信息
input("提示信息")
在提醒用户输入时,屏幕会出现设定的提示内容
例name = input('please enter your name: ')
数据基本类型
基本数据类型包括:整数、浮点数、字符串、布尔值、空值
1 整数
- Python可以处理任意大小的整数,当然包括负整数。由于计算机使用二进制,故表示十六进制数需要在前面加
0x
2 浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109 和12.3x108 是完全相等的。
- 用科学计数法表示,把10用e替代,1.23x109就是
1.23e9
,或者12.3e8
,0.000012可以写成1.2e-5
,等等
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。1
3 字符串
-
字符串是以单引号’或双引号"括起来的任意文本
-
字符转译
- 转义字符\ 可以转义很多字符,比如
\n
表示换行,\t
表示制表符,字符\ "'本身也要转义,所以\\
表示的字符就是\ - 多字符转译:
r''
表示''
内部的字符串默认不转义
- 转义字符\ 可以转义很多字符,比如
-
多行字符串: 由于同行过多
\n
不便阅读,所以可用'''
…多行内容,可自由换行…'''
的格式进行书写。多行文本头部‘’’
前加r
表示内部内容都不转译
4 布尔值 (True、False
)
- 布尔值运算:布尔值可以用
and
、or
和not
运算。 (与 / 或 / 非)
5 空值 ( None
)
同java null
变量与常量
1. 变量
变量名必须是大小写英文、数字和_的组合,且不能用数字开头
(同 java)
2. 常量
在Python中,通常用全部大写的变量名表示常量,实际上python对常量的修改并没有进行限制(与java不同),实际上就是个变量,但约定俗成。
注意:python 整数 浮点数 均没有大小限制
Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647。
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。
字符串与编码
字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。
最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。因ASCII能表现的字符有限,各国又分别扩展制定不同编码,例如中国的GB2312。因各国编码难免有所冲突,会导致乱码问题,Unicode编码产生,把所有语言都统一到一套编码里。
ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节(如果要用到非常偏僻的字符,就需要4个字节)。
如果把ASCII编码的字符用Unicode编码,只需要在前面补0就可以。
新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
所以,本着节约的精神,又出现了 把Unicode编码转化为“可变长编码”的UTF-8编码 。 UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符, 用UTF-8编码就能节省空间。
UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
总结一下现在计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
Python的字符串
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言
- Python提供了
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
ord('A')
输出:65
chr(65)
输出:A
- 如果知道字符的整数编码,还可以用十六进制这么写str:
'\u4e2d\u6587'
'中文'
两种写法完全是等价的。
- 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号'
或双引号"
表示:
x = b'ABC'
要注意区分'ABC'
和b'ABC'
,前者是str
,后者虽然内容显示得和前者一样,但bytes
的每个字符都只占用一个字节。
字符串与字节的编码与解码
- 以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)
纯英文的str
可以用ASCII编码为bytes
,内容是一样的,含有中文的str
可以用UTF-8编码为bytes
。含有中文的str
无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
在bytes
中,无法显示为ASCII字符的字节,用\x##
显示。
- 如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用
decode()
方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
- 如果bytes中包含无法解码的字节,decode()方法会报错:
如果bytes中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
数据类型–集合
list 和 tuple
1. 可变有序列表: list
#声明
classmates = ['Michael', 'Bob', 'Tracy']
#list里面的元素的数据类型可以不同
L = ['Apple', 123, True]
- list有序下标从0开始, -1索引可以找到最后一个元素, -2索引可以找到倒数第二个元素, 依次类推(注意数组越界问题
IndexError
) - 同一list里面的元素的数据类型可以不同
#list可嵌套,作为元素存在
s1 = ['python', 'java', ['asp', 'php'], 'scheme']
p = ['asp', 'php']
s2 = ['python', 'java', p, 'scheme']
要拿到’php’可以写p[1]
或者s[2][1]
,因此s1可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。
操作list的方法
-
获取list长度
len()
,参数为要获取长度的list -
末尾追加元素
append()
,参数为要追加的元素 -
指定位置插入元素
insert()
,两个参数: 参数1,目标位置下标; 参数2,要插入的元素
classmates = ['Michael', 'Bob', 'Tracy']
#获取list长度
len(classmates)
#末尾追加元素
classmates.append('Adam')
#把元素插入到指定的位置,比如索引号为1的位置
classmates.insert(1, 'Jack')
-
删除list中元素
pop()
.不加参数时删除列表中最后一个元素; 加一个参数----要删除元素的下标.
返回被删除的元素 -
替换元素, 指定下标元素重新赋值
classmates = ['Michael', 'Bob', 'Tracy']
#删除末尾元素
classmates.pop()
#删除下标为1的元素( 'Bob')
classmates.pop(1)
#替换下标为1的元素
classmates[1] = 'Sarah'
2. 不可变有序列表(元组): tuple
tuple是python中另一种有序列表,称之为"元组". 它和list非常类似,但是tuple一旦初始化就不能修改
最后解释一下整数的除法为什么也是精确的。在Python中,有两种除法,一种除法是
/
:即使整除但结果仍然是浮点数;
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数,只保留结果的整数部分
Python还提供一个余数运算,可以得到两个整数相除的余数,也只保留整数10 % 3
结果为 1 ↩︎