华为AI全栈成长计划课程——AI基础篇——第一周笔记1
第1章 Python语言基础
1.1 初探Python
课程准备
- 首先安装Python,我安装了版本3.6。考虑到方便,所以使用的是Adaconda3自带的Python,并没有独自下载安装Python。
- 安装Visual Studio Code以及拓展
Magic Python
Python
Python for VSCode - 试运行Python代码,熟悉VSCode操作
Python
- 简单
- 功能强大
- 可移植性,可扩展性,可嵌入性
- 人生苦短,我用Python
Python 与 C语言
C语言:源代码->机器语言->链接->可执行文件->执行
Python:脚本语言,不需要编译成二进制代码,可以直接从源代码运行程序。源代码->字节码->机器语言->执行
Python实用函数
1. dir([obj])
显示对象的属性,如果没有提供参数,则显示全局变量的名字,通过执行dir(对象),可以看到其属性和函数信息。
2. help()
输入int,str,dict等获取帮助信息。
1.2 数据类型
标准类型:数字 字符串(str) 列表(list) 元组(tuple) 字典(dict) 集合(set)
其他类型:类型(type) Null对象(None) 函数 模块 类 文件
标准类型的三种分类方式:存储模型 更新模型 访问模型
数字
数字类型:整型 长整型 布尔型 浮点型 复数(real imag conjugate())
数字常量:16进制0x 8进制0o 2进制0b 长整数加大写字母L
运算:无++等运算符 引入了地板除//
转换函数:int() long() float() complex()复数 bool() hex()16进制 oct()8进制 bin()2进制 chr()ASCII码转字符 ord()字符转ASCII码
功能函数:abs() pow(num1,num2,mod=1)取num1的num2次方,可选取余 round(flt,ndig=0)浮点数保留ndig位小数
序列类型:下标[] 切片[起始:终止:步长] 重复* 连接+ 包含判断in/not in enumerate() len() reversed() zip(it0,it1,...,itN)返回一个列表
字符串
字符串常量:单引号 双引号 三重引号 字符串后无'\0'结尾
字符串序列:与序列操作相同 比较== < > !=
字符串连接:不推荐使用+连接字符串,可以使用str1.join(str2),效率更高
字符串格式化:%[(name)][flags][width][.precision]typecode% (a,b,c)
字符串操作符:“r”“R”原始字符串操作符号 “u”“U”Unicode操作符,转换成Unicode编码
字符串是不可改变的对象:对于不可改变的对象,像字符串,在赋值时作为左值的表达式必须是完整的对象,不能是单个元素或者常量。否则就会引发异常。就象我们前面举的给字符串的切片赋值的例子。
函数:min() max()
拓展:字符串的编码和解码s.encode(‘utf8’), s.decode() Unicode三明治:decode->process->encode bytes和bytearray
List列表
List:序列对象[],可使用序列操作,可比较,数据可变。内置cmp() len() max() min()函数。
常用函数:append() count() extend() Index() insert() pop() remove() reverse() sort()
List推导/解析:对list 中的每个元素应用一个函数/表达式, 从而将一个list 映射为另一个list for in循环遍历 map():map(function, sequence) -> 可迭代对象 reduce():reduce(function, sequence[, initial]) -> value
Tuple元组
Tuple:(),数据不可变,元组数据结构的物理内容不变,与引用对象无关,如若引用对象为列表,列表本身不可变,列表内数据相对可变。 常用函数count() index() Tuple与List相互转换 陷阱:单元素Tuple要加逗号“,”
Tuple好处:操作速度快,保护不可写数据,可作为dic的key,可用于字符串格式化。
Dictionary字典
Dictionary: 字典解析与列表解析类似
相关操作:
1、使用zip构造一个字典:dict=dic(zip(['server','database'],['linuxhost1','master']))
2、使用已经存在的key获取元素的值
3、使用不存在的key,字典新增加一个元素
4、字典元素的值可以是任意类型,如数字
5、字典的key是任意可hash的对象,如数字
6、del删除字典元素:del dict['server']
7、字典的clear()方法清除字典所有元素:dict.clear()
8、for in/for in enumerate循环遍历
9、使用dict函数传入键值对构造:dict1=dic(x=1,y=2)
10、使用现有dict解包构造新的dict:dic2=dict(**dic1)
11、使用dict的copy()函数构造dict:dic2=dic1.copy()
常用函数:clear() copy() get(key) items() keys() values() update() fromkeys() setdefault() sort()
set集合
集合:无序排列的可哈希的值,可作为dic的key
集合的类型:可变集合(set)和不可变集合(frozenset)
1、可变集合可以增删元素,是不可哈希的,因此既不能作为字典的键也不能作为其他集合中的元素。
2、不可变集合则正好相反。
集合支持的操作:
变量
Python一切皆对象,变量不是盒子,而是对象上的标注。
命名:
1、以字母或_开头,其他部分字母数字_,大小写敏感。
2、单下划线_foo开头不能被from import导入,双下划线__foo开头表私有成员,双下划线__foo__开头结尾表Python内特殊方法。
变量:声明 赋值(一次赋多值、多重赋值、增量赋值) 引用(每个对象有引用计数器,当计数器为0,自动调用垃圾回收机制,del只删除名称,不删除对象本身,也可完整删除对象中的元素)
浅拷贝和深拷贝:
1、浅拷贝指向同一对象,只是拷贝了引用的副本,如切片、copy模块的copy.copy()。
2、深拷贝指向不同对象,拷贝了对象本身的副本,如copy模块的copy.deepcopy()。
1.3 基本语句
print del if while for break continue pass
按照缩进自动识别语句和语句块的边界,空格和注释(#,''')都将被忽略
if:if...elif...else
条件表达式(即“三元操作符”):C/C++: condition? X:Y Python: X if condition else Y
else:while和for循环后可以有else语句,else语句缩进与while/for循环一致,以覆盖循环终止条件的判定,循环内break语句终止循环,不进入else语句块。
pass:空语句,在开发和调试很有用。