以熟练使用Pytorch完成深度学习模型为目标,简单介绍Pytorch涉及到的Python基础(Python其它知识可以在遇到后再学习,先动手)。
这篇教程并不涉及Python的复杂方法,教程的结构如下:
1.Python实例
2.Python基础
- 2.1 Python数据类型
- 2.2 Python语法
3.Numpy
4.类
5.文件读写
6.错误分析
先通过一个Python实例来看一下Python的语法,这里可以看到对于函数,循环,if判断,都是用四个空格缩进来表示函数体或循环体,类似C语言的{},不再缩进就表示退出了函数体,# 表示注释。
# 函数
def add_do(string):
if "$" not in string:
string = "$" + string # 字符串组合
return string
# 把以下列表中缺少$的都加一个$
test = ["1","16","3","$8","11","$25","77","7","15"]
# 方法1
for i in range(len(test)):
test[i] = add_do(test[i]) # 修改列表的第i个值
print(test)
输出:
['$1', '$16', '$3', '$8', '$11', '$25', '$77', '$7', '$15']
2.1.1数字
数字用于储存数值,包括整型与浮点型,支持常见的数学运算,对特殊的如sin,cos计算需要引入额外的官方库,后面会有说明。
############### 运算 ################
a = 10
b = 5
print(a/b)
数字常见的方法如下:
# 取整
a = 1.6
b = int(a) # int是截断取整,若要四舍五入可以用int(a+0.5)
print(b) # 输出1
# 幂次
a = 10 ** 3
print(a) # 输出1000
2.1.2字符串
字符串由任意符号组成,用一对单引号’’或一对双引号””括起,两种写法是一样的。
############### 字符串 ################
a = "abc"
b = 'abc'
print(a == b) # 输出True
# 字符串常见运算
# case1 字符串相加
a = "hello"
b = " " # 空格也是字符串
c = "world!"
print(a+b+c) # 输出"hello world!"
# case2 去除字符串头尾两端的符号
a = " my name is F! "
print(a.strip()) # 输出"my name is F!"
b = "my name is F!\n"
print(b.strip("\n")) # 输出"my name is F!"
# case3 替换
a = "mh name is F!"
print(a.replace("h", "y")) # 输出"my name is F!"
# case4 分割字符串
a = "x1=1,x2=2,x3=3,x4=4"
l = a.split(",")
print(l) # 输出['x1=1', 'x2=2', 'x3=3', 'x4=4']
练习: 字符串a = ”hello world”, 判断”world”是否在字符串a中。
2.1.3列表(重点)
列表是Python中最基本最常用的数据结构,也是numpy数组的基础,需要重点掌握。
2.1.3.1列表访问
列表用[n]符号进行访问,且n从0开始,注意列表截取查询时,写法是a[x:y]表示取x,x+1,x+2…y-1,不包含y这个位置的值,类似于集合的左闭右开[x,y)。
l = [1,2,3,4,5] # 定义一个长度为5的列表,元素可以为数值,字符串,列表,字典等
# 列表访问,可以正序与倒序访问。
print(l[0]) # 输出1,即列表的第一个元素
print(l[-1]) # 输出5,即列表的最后一个元素
#print(l[5]) # 报错,超出列表范围。
2.1.3.2 列表常用方法
# 列表截取
b = l[1:3]
print(b) # 输出[2,3],即列表的第1个元素到第3-1个元素
# 列表常用方法
# case1列表添加元素
a = ["a","b","c"]
a.append("d")
print(a) # 输出['a', 'b', 'c', 'd']
# case2列表删除元素,通过指数删除
a = ["a","b","c"]
del a[0]
print(a) # 输出['b', 'c']
# case3 求长度
a = [1,2,3,4,5]
print(len(a)) # 输出5
# case4 判断元素是否在列表中
a = ["x","y","z"]
if "x" in a:
print("x in list a!")
2.1.3.3 列表循环
# 列表循环方法1,不能修改列表中的元素
a = [1,2,3,4,5]
for item in a:
item=0
print(a) # 输出[1,2,3,4,5]
# 列表循环方法1,可以修改列表中的元素,但是不建议直接修改列表中的元素。
a = [1,2,3,4,5]
for i in range(len(a)):
a[i]=0
print(a) # 输出[0,0,0,0,0]
2.1.3.4 转化为列表
# 其它数据类型转为列表,几乎万物皆可列表
a = "he wo!"
print(list(a)) # 输出['h', 'e', ' ', 'w', 'o']
a = set((1,2,3)) # 定义集合
print(list(a)) # 输出[1, 2, 3]
练习1: 列表a = [1,2,3],列表b = [3,4,5],问:a+b等于什么?
练习2: 列表a = [[1,2,3],[4,5,6]],列表的size为2*3,访问列表的第一行(最外层),第二列元素(里层)。
2.1.4元组
元组与列表类似,只是一旦定义后无法更改,元组基本支持列表除了增删操作以外的所有方法。
2.1.5字典
字典由键与值组成,它们之间一一对应,字典的一一对应是个很重要的特性。
字典的意义:
1.Python用字典查询很快,列表的话需要遍历查找。
2.经常需要存储一一对应的值,比如有十个人,每个人借了几本书,通过字典的人名与书名列表可以用一个变量来储存,不然可能需要十个变量来储存。
练习1: 用一个字典储存字典的意义2中描述的问题。
2.2 Python语法
2.2.1 print
程序运行时间通常会比较长,中途很多步骤打印结果方便自己知道运行进度,运行结果,如果有错误可以马上停止程序。
print有以下三种常见方式。
print("hello python!")
print("pi is:",3.1415926)
print("a={0},b={1}".format(1,2))
字符串的格式化方法.format()比较常用,可以用(1,2,…)中的数据1,2,…替换字符串中的{},按顺序依次替换。
2.2.2 if条件判断
# True,False为bool值,首字母大写
# if判断语句后面冒号,且判断的内容行缩进四个空格
if True:
print("True")
a = 10
b = 5
if a > b:
print("a = ",a)
print("b = ",b)
print("a is bigger than b!")
elif a == b:
print("a = ",a)
print("b = ",b)
print("a is equal to b!")
else:
print("a = ",a)
print("b = ",b)
print("b is bigger than a!")
单个条件的写法有以下三种比较常见,形式不单一,只要if后面跟着判断即可,不过判断的等号要注意是两个等号”==”,例如if a==1:
# 单个条件的写法
if a > b:
pass
if a in list:
pass
if True:
pass
# 多条件的写法
if a > b and a > c:
pass
if a in list and a >b:
pass
if a >b or a>c:
pass
第一行为循环判断,如果满足条件,则进入循环体,执行完循环体后i自动更新为下一个,再到第一行的判断…
continue:进入循环判断,不执行后面的判断是否等于50以及打印
break:退出循环
练习1 :# 把以下列表中缺少 的 都 在 前 面 加 一 个 的都在前面加一个 的都在前面加一个符号
test = [“1”,“16”,“3”,"$8",“11”,"$25",“77”,“7”,“15”]
2.2.4 函数
定义函数的格式如下:
"""
def 函数名(形参1,形参2,...):
函数内容
return 结果
"""
函数的定义与调用实例:
def my_sum(a,b):
result = a + b
return result
c = my_sum(1,2)
print(c)
注意:
后续设置的变量名称不能与函数名重复
2.2.5 import模块
Python之所以好用,是因为有很多开发者提供了各个领域的模块,从数学运算,地理信息,图像处理各个方面都有“包”提供,基本上都涵盖所需要的代码,所以Python开发者又称为“调包侠”。
Python是脚本语言,但是一个项目一般不会只有一个.py文件,多个.py文件之间的交互通过import模块来实现。
2.2.5.1 import官方库
Python官方提供了很多库,比如math,内置很多sin,cos等计算的函数。
"""
方法1:from A import a,b,...
方法1 import的函数可以直接调用
方法2:import A
方法2可以通过点符号来调用A中的函数,有时调用的库名字太长可以用as定义一个缩写
方法3:from A import *
方法3直接把库中的所有函数都import,要慎用,避免与自己的代码变量重名。
"""
# case1
from math import sin,cos
print(sin(1))
# case2
import math as m
print(m.sin(1))
# case3
from math import *
print(sin(1))
2.2.5.2 跨文件调用方法或者类
创建两个文件,一个test1.py,一个main.py,要在main.py里调用test1.py中的函数。
在test1.py中编写函数主体:
这里可以看到用from xxx import xxx的形式可以引入其它文件,那问题来了,程序怎么知道test1.py文件在哪里呢?会搜索本地资源吗?test1.py放在哪里该代码才能生效?