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)
  • 布尔值运算:布尔值可以用andornot运算。 (与 / 或 / 非)
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的方法
  1. 获取list长度 len() ,参数为要获取长度的list

  2. 末尾追加元素 append() ,参数为要追加的元素

  3. 指定位置插入元素 insert() ,两个参数: 参数1,目标位置下标; 参数2,要插入的元素

classmates = ['Michael', 'Bob', 'Tracy']
#获取list长度
len(classmates)

#末尾追加元素
classmates.append('Adam')

#把元素插入到指定的位置,比如索引号为1的位置
classmates.insert(1, 'Jack')
  1. 删除list中元素 pop() .不加参数时删除列表中最后一个元素; 加一个参数----要删除元素的下标.
    返回被删除的元素

  2. 替换元素, 指定下标元素重新赋值

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

#删除末尾元素
classmates.pop()

#删除下标为1的元素( 'Bob')
 classmates.pop(1)

#替换下标为1的元素
 classmates[1] = 'Sarah'
2. 不可变有序列表(元组): tuple

tuple是python中另一种有序列表,称之为"元组". 它和list非常类似,但是tuple一旦初始化就不能修改


  1. 最后解释一下整数的除法为什么也是精确的。在Python中,有两种除法,一种除法是/:即使整除但结果仍然是浮点数
    还有一种除法是//,称为地板除,两个整数的除法仍然是整数,只保留结果的整数部分
    Python还提供一个余数运算,可以得到两个整数相除的余数,也只保留整数10 % 3 结果为 1 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值