《深度卷积神经网络原理与实践》笔记 第四章 Python编程基础

本笔记是依据周浦城等教授编著的《深度卷积神经网络原理与实践》的个人笔记(Version:1.0.0)

整理作者:sq_csl

第四章 Python编程基础

1.1 Python 语言简介(略)

1.2 Python 3环境搭建

1.2.1 Windows下的安装

1.Python官方网站下载IDLE(https://www.python.org/downloads/)
2.下载并安装Anaconda(https://www.anaconda.com/download/)
调用IPython、Jupyter Notebook

1.2.2 Linux 下的安装

此处介绍的是Ubuntu的下载。
虽然Ubuntu有预装的Python,但安装的是Python 2.x版本,不过建议安装Python 3.x的同时仍然保留Python 2.x版本。

①打开终端,用wget命令到Python官网下载安装包:

wget http://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

②使用tar命令对压缩包解压:

tar -xzvf Python-3.7.5.tgz

③解压完成后,会在当前目录下产生目录Python-3.8.1,使用cd命令切换到该目录下编译安装,依次输入以下命令:

cd Python-3.7.5
./configure -with-ssl
make
sudo make install

④接下来需要安装Python编译外部模块文件使用的Python-dev,输入以下命令:

sudo apt-get install python-dev

⑤最后,安装pip

sudo apt-get install python-pip
sudo pip3 install -upgrade pip

也可以直接安装Anaconda来更新Python,以2020.02版本为例:

sh Anaconda3-2020.02-Linux-x86_64.sh

1.3 Python程序设计

1.3.1 编程规范

标识符

通常遵循以下习惯:
1.变量、函数名中的英文字母一般小写,以增加程序可读性。
2.应该较好表达变量值的含义,一般选用相应的英文单词、拼音缩写的形式,尽量不用简单符号来命名。
3.尽量不用易混淆的单个字符,例如:0和o;1和l。
4.避免开头和结尾都用下划线的情况(由Python特性决定)

缩进

一般为4个空格,或者制表符(Tab)为基本缩进单位。
注意:上面这两个不能混用。

注释

printf('Hello World!')  #输出“Hello,World”。这个是单行注释
  

''
多行注释

''


'''
多行注释也可以这样
提示:注释和语句之间至少要用两个空格分开
'''

1.3.2 变量、数据类型

数字

类型:int、float、complex(复数类型,虚部以i或j结尾)、bool(只有True和False两种)

字符串

用引号表示。
举例:

a='安徽省';
b='合肥市';
c='紫云路292号';
print(a+b+c)

安徽省合肥市紫云路292

Tip:在Python中,input( )函数输入的内容都当成字符串,如果要当成数值类型处理都需要先进行数据类型的转换。转换成字符串:str( );转换成整数int()。

列表

方法1:列表名=[值1,值2,…,值n]
方法2:list( )

举例1:

>>>list1=['r','g','b'];  #定义了3个字符串的列表
>>>list2=list((1,2,3,4));
>>>list2
[1,2,3,4]

>>>list1[0]
'r'

与列表相关的函数:
①del或remove( ):删除
②pop( ):删除指定位置的元素
③append( ):列表末尾添加元素
④insert( ):插入指定位置
举例2:

>>>list1=['安徽','合肥',1958,2021];
>>>list1.append(2022);
>>>print(list1)
['安徽','合肥',1958,2021,2022]

>>>list1.insert(2,'蜀山';
>>>print(list1)
['安徽','合肥','蜀山',1958,2021,2022]

>>>list1.remove(1);
>>>print(list1)
['安徽','蜀山',1958,2021,2022]

>>>year=list1.pop(2);
>>>year
1958
>>>print(list1)
['安徽','蜀山',2021,2022]

元组

方式1:元组名=(值1,值2,…,值n)
方式2:tuple( )函数创建元组
注意:元组中元素不允许被删除!可用del来删除整个元组。
举例1:

>>>tup1=(11,45,14);
>>>tup[2]
14

>>>tup2=(114,514);
>>>tup3=tup1+tup2;
>>>print(tup3)
(11,45,14,114,514)

对元组切片,可得一个新元组。
举例2:

>>>nums=[11,45,14,191,981,0];
>>>tup4=tuple(nums);
>>>print(tup4)
(11,45,14,191,981,0)

>>>tup5=tup4[1:5];
>>>print(tup5)
(45,14,191,981)

>>>del tup5
>>>print(tup5)
NameError:name 'tup5' is not defined

字典

又称为关联数组或哈希表。
字典名={键1:值1 , 键2:值2 , … , 键n:值n}
语法格式:字典名[键]
举例:

>>>dict={'Name':'小明''Age':19,'Class':'ACM班'};
>>>print("dict['Name']:",dict['Name'])
dict['Name']: 小明

>>>dict['Age']=20;
>>>dict
{'Name':'小明''Age':20,'Class':'ACM班'}

>>>dict['Gender']='Male';
>>>dict
{'Name':'小明''Age':20,'Class':'ACM班','Gender':'Male'}

集合

无序且元素不重复的序列。
方法一:集合名={元素1, 元素2, … ,元素n}
方法二:集合名=set(列表或元组)
可使用“-” “|” “&”运算符进行差集、并集、交集运算
举例:

>>>set1={1,2,3,4,5};
>>>print(set1)
{1,2,3,4,5}

>>>num={1,2,3,2,1};
>>>print(num)
{1,2,3}

>>>a=set('abcd');
>>>b=set('cdef');
>>>print("a和b交集:",a&b)
a和b交集:{'d','c'}

>>>print(a-b)
{'a','b'}

1.3.3 运算符与表达式

算术运算符

‘+’(加)’-’(减)’*’(乘) ‘/’(除)’//’(整除)’%’(求余数)
‘**’ (幂运算)
举例:

>>>2**10
1024

赋值运算符

变量名=表达式
12种复合赋值运算符:+=、-=、*=、/=、//=、**=、|=、&=、^=、<<=、>>=。

关系运算符

用于两个值进行比较,运算结果为True(真)或False(假)。
常用关系运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
举例:

>>>a=5;
>>>b=10;
>>>a==b
False

逻辑运算符

and(逻辑与) or(逻辑或) not(逻辑非)

位运算符

按照二进制形式逐位进行运算。
&(按位与)、|(按位或)、^(按位异或)、~(按位求反)、<<(左移)、>>(右移)

>>>a=0b00111100;
>>>b=0b00001101;
>>>a&b
12
>>>bin(a|b)
'0b111101'

成员运算符

成员操作符判断序列中是否有某个成员,包括in、not in两种,返回值位True或False
举例:

>>>3 in [1,2,3]
True

>>>3 not in [1,2,3,4]
False

1.3.4 结构化程序设计

顺序结构

按照语句出现的先后顺序运行。

选择结构

if、if-else、if-elif-else语句

提醒:请严格按照缩进规则!

if语句
if 表达式:
	语句块
if-else语句
if 表达式:
	语句块1
else:
	语句块2
if-elif-else
if 表达式1:
	语句块1
elif 表达式2:
	语句块2
...
elif 表达式n:
	语句块n
else:
	语句块n+1

循环结构

for、while语句

for循环语句
for 循环变量 in 遍历结构:
	语句块
whlie循环语句
while 表达式:
	语句块

建议:为了保证可读性以及复杂度,建议循环嵌套层数不超过三层。

1.3.5 函数与模块

函数的定义与调用

用关键字def,此时函数名后面的括号中的变量称为形式参数(简称形参)
函数只有被调用才会被执行,调用方式:函数名(形参表)。

def 函数名(形参表):
	函数体
return 返回值

函数的嵌套和递归

举例:(求阶乘)

def fac(n):
	if (n==0 or n==1):
		facc=1
	else:
		facc=n*fac(n-1)
	return facc
n=int(input("Please input number n="))
print("n! =",facc(n))

Please input number n=10
n! =3628800

内置函数

>>>dir(__builtins__) #查看所有的内置函数名
input( )

从键盘键入数据赋给变量(输入类型:字符串),括号内内容显示
使用方法:

变量=input("提示信息")

print( )

基本输出函数
使用方法:

print(表达式1,表达式2,表达式3,...,表达式n)

打开(建立)文件函数

调用open( )函数打开文件
使用方法:

fileobj=open(filename[,mode[,buffering]])

说明:通过字符串filename来指定希望打开哪个路径下的文件名,并返回一个文件对象。
mode参数常用:‘r’(读模式),‘w’(写模式),‘a’(追加模式),‘b’(二进制模式)

读文本文件函数

方法1:采用不设置参数的read( )方法
方法2:采用readlines( )从文件中获取一个字符串,每个字符串就是文件中的每一行。

写文本文件函数

函数:write( )、writelines( )
注:为了确保数据一致性,写文件时不允许读取数据
举例:

>>>filename="c:/test.txt";
>>>file1=open(filename,"w",encoding='utf-8');
>>>file1.write("你好,世界!");
>>>contents=file1.readlines();
>>>print(contents)
['你好,世界!']
>>>file1.close(); #文件关闭

模块

采用关键字import来导入某个模块,具体方式如下:

import 模块名

有时候只需要用到某个模块中某个函数或者某几个函数:

from 模块名 import 函数名1.函数名2...

使用*运算符可以导入所有函数

from 模块名 import *

可以采用关键字as来指定简短而独一无二的别名,类似于外号,如:

import numpy as np

变量的作用域

全局变量与局部变量(略)

1.3.6 面向对象的程序设计

面向对象程序设计是上世纪80年代针对大型软件的设计而提出的一种计算机编程架构。
Python语言采用了面向对象程序设计的思想,遵循“万物皆为对象”的原则,完全支持面向对象的基本功能,如封装、继承、多态以及对基类方法的覆盖或重写,并且Python中的字符串、列表、字典、元组等内置数据类型都具有和类完全相似的语法和用法。

类和对象

定义:

class 类名:
	定义数据成员
	定义成员函数

类名一般约定用大写字母开头,函数用小写字母开头。

定义类之后,就可以用来实例化一个对象。语法形式: 对象名=类名(实参表)
若要访问对象中的某个数据成员或成员函数,语法形式为:对象名.成员名。

构造函数与析构函数

构造函数的作用:为对象的数据成员赋初值,函数名固定为__init__。其中第1个参数固定为self,代表当前参与操作的对象本身。其他参数对应于类的数据成员,其数量与需要在构造函数中赋初值的数据成员的数量相同。

析构函数的作用:用于对象被撤销时释放其所占用的内存资源。

注:①定义类时一般要定义构造函数,以便为数据成员赋初值。
②构造函数在定义对象时会自动执行,但不能显式调用。
③可以不定义析构函数,不过此时将采用默认的析构函数。

class Circle:
	def __init__(self,r=10):
		self.__radius=r;
	def disp(self):
		print("半径={}".format(self.__radius));
	def area(self):
		return 3.1416*self.__radius*self.__radius;
	def peri(self):
		return 2*3.1416*self.__radius;
cir1=Circle(6);
cir2=Circle();
cir1.disp();
print("面积={}".format(cir1.area()))
print("周长={}".format(cir1.peri()))
cir2.disp()
print("面积={}".format(cir2.area()))
print("周长={}".format(cir2.peri()))

半径=6
面积=113.0976
周长=37.6992
半径=10
面积=314.16
周长=62.832
私有成员和公有成员

private 和 public
注:①以一个_开头的是基类或派生类内受保护的成员。
②以≥2个_开头且不以2个或多个结束的是私有成员。
③其他的符合命名规则的标识符称为公有成员。

数据成员

可区分为属于类的成员和属于对象的成员。
类成员既可以通过对象名访问,也可以通过类名访问。
对象成员只可以通过对象名访问。
举例:

class Circle:
	__total=666;   #类成员
	def __init__(self,r=10):
		self.__radius=r;  #对象成员
	def disp(self):
		print("半径={}".format(self.__radius));
	def area(self):
		return 3.1416*self.__radius*self.__radius;
	def peri(self):
		return 2*3.1416*self.__radius;
cir1=Circle(6);
cir2=Circle();
print(Circle._Circle__total); #通过类名访问类成员
print(cir1._Circle__total);   #通过对象名访问类成员
print(cir2._Circle__total);   #同上
print(cir1._Circle__radius);  #通过对象名访问对象成员
print(cir2._Circle__radius);  #通过对象名访问对象成员

666
666
666
6
10
成员函数

对象函数(对象方法)、类函数(类方法)、静态函数(静态方法)

继承与多态

继承与派生
多态

1.4 Python基础工具库

1.4.1 Numpy

Numpy是Python进行科学计算的基础软件包,主要提供了高性能的N维数组实现以及计算能力,还提供了和C、C++、Fortran等编程语言集成的能力,另外还实现了包括线性代数、傅里叶变换以及随机数生成等一些基础的算法。
NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray对象是用于存放同类型元素的多维数组,其中的每个元素在内存中都有相同存储大小的区域。
可从网站:https://www.scipy.org 下载

使用Numpy数组的创建

内置功能函数

arange( ) 创建一位数组
创建高维数组可对arange( )函数输出的一维数组调用reshape( )函数进行变形。
zeros( ) 创建一个填充0的数组
ones( ) 创建一个填充1的数组
empty( ) 创建一个随机数数组
full( ) 创建一个填充定值的n×n数组
eyes( ) 创建一个n×n的单位阵
linspace( ) 在指定的间隔内返回均匀间隔的数字
举例:

Python的列表转换
使用特殊的库函数

数组的索引与访问

方法1:基于0~n的下标直接进行索引
方法2:采用切片的方式,通过内置的slice( )函数,设置start、stop和step参数,对Numpy数组进行切片

Numpy中的数学运算

1.4.2 Pandas

Series(一维同构数组)
DataFrame(二维异构表格)

1.4.3 Matplotlib

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sq_csl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值