当前位置:博客首页 > Python > 正文

第1课 Python3基础语法与数据结构

作者: Jarvan 分类: Python 发布时间: 2019-04-04 19:57 百度已收录

一、基础语法

1. 编码

Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码,如果是Python文件,建议文件的编码都是utf-8编码,同时在文件的头部指定一下文件使用的编码:

 -*- coding: gbk -*-

字节和二进制:八个二进制位就可以组合出256种状态,这被称为一个字节(byte),一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111

ASCII码: 上个世纪60年代,美国对英语字符与二进制位之间的关系,做了统一规定,这被称为ASCII码 ,一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

非ASCII编码: 利用字节中闲置的最高位编入新的符号,可以表示最多256个符号。所有这些编码方式中,0–127表示的符号是一样的,不一样的只是128–255的这一段

Unicode:Unicode,就像它的名字都表示的,这是一种所有符号的编码。是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样。非unicode编码都可以用decode解码为unicode

(txt文档中ANSI也就是gbk编码)

Unicode存在的问题:
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。 英文字符一个字节就可以表示,而汉字需要至少两个,造成存储浪费。

UTF-8

UTF-8是Unicode的实现方式之一。 UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。编码规则:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。


下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
——————–+———————————————
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

示例: 下面,还是以汉字”严”为例,演示如何实现UTF-8编码。
已知”严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此”严”的UTF-8编码需要三个字节,即格式是”1110xxxx 10xxxxxx 10xxxxxx”。然后,从”严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,”严”的UTF-8编码是”11100100 10111000 10100101″,转换成十六进制就是E4B8A5。

Unicode与UTF-8之间的转换:利用记事本另存为: ANSI,Unicode,Unicode big endian 和 UTF-8
1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。
3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

Little endian和Big endian:
第一个字节在前,就是”大头方式”(Big endian),第二个字节在前就是”小头方式”(Little endian)。 Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格, 用FEFF表示。这正好是两个字节,而且FF比FE大1。

实例:

用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。

知识拓展:字符编码:Unicode和UTF-8之间的关系

2. 标识符

标识符就是在程序的变量名或函数名以及类(对象)名

  • 第一个字符必须是字母表中字母或下划线( _ ) 。
  • 标识符的其他的部分由字母、数字和下划线组成。
  • 标识符对大小写敏感
  • 在 Python 3 中,非 ASCII 标识符也是允许的了,也就是说可以支持中文标识符。

3. 保留字

保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块, 可以输出当前版本的所有关键字:

import keyword
keyword.kwlist

‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’,
‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’

4. 注释

  • 单行注释:#号会注释掉它所在行在它后面的所有字符
  • 多行注释:多行注释是使用三引号来进行的,可以是三单引号(”’)或三双引号(“””)

5. 行与缩进

为使得代码更加规范而且容易管理和移植,建议统一使用4个空格来进行缩进。注意不要使用tab键来进行缩进,除非你的编辑器能够将tab键转换为4个空格

6. 多行语句

有时候代码比较长,一行写不下就要用到多行语句, 赋值语句的多行语句可以用“/”来实现

total_all = 1000 + \
            200 + \
            3000
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
"(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

[]、{}以及()中的多行语句不需要用反斜杠

二、数据结构

程序,其实就是数据结构+算法,因此掌握了数据结构就相当于掌握了程序的一半知识。还有另一半就是算法,算法是依托于数据结构的,因此掌握数据结构是十分重要的。

1. 定义

  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构
  • 数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。

2. 数据类型

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构

Python3中有六种标准的数据类型
数字(number)
字符串(string)
列表(list)
元组(tuple)
集合(set)
字典(dictionary)

3. 按照是否可变分类

是否可变是指类型一旦定义之后是否还可以修改,如果可以在原来的基础上做修改那么就是可变的,如果不能修改则是不可变的。

  • 不可变数据类型:数字、字符串、元组、不可变集合(frozenset)
  • 可变数据类型:列表、字典、集合(set)

三、学习方法

  • 多记笔记
  • 大量练习
  • 先自己查资料尝试解决,实在不可行再询问他人

发表评论