参考
1.B站,黑马程序员Python教程_600集Python从入门到精通教程(懂中文就能学会)。
1.一些csdn博客,文中已注明。
主要是一些学习记录,仅供参考。
背景
(1)新的解释性语言,用C语言实现,能调用C语言的库文件。
(2)计算机不能直接理解任何机器语言(0101001)以外的语言,将其他语言解释成机器语言的工具,称为编译器。
编译器翻译的方式有两种:编译(生成可执行文件再运行,效率高,只能在某个操作系统运行C,C++)&解释(逐行解释每一行源代码,效率低,在不同操作系统装不同解释器均可执行Python),区别在于翻译时间点的不同,当编译器以解释方式运行的时候,也称为解释器。
关于语言的解释,可看这个:if __name__ == ‘__main__‘的详细讲解
特点
(1)面向对象的语言。
是一种思维方式,是一门程序设计技术(找一个能解决问题的对象把问题解决了)。
python中函数、模块、数字、字符串都是对象,在python中一切皆对象。
(2)拥有强大的标准库(都是对象)。
python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数。标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。
(3)Python社区提供了大量的第三方模块,使用方式与标准库类似。功能覆盖:科学计算、人工智能、机器学习、Web开发、数据库接口、图形系统等多个领域。
执行
三种方式:解释器(python/python3)、交互式(ipython)、集成开发环境(PyCharm)
错误提示
NameError:名称错误
SyntaxError:语法错误
Indentation:缩进错误
其他提示
python2.x默认不支持中文,解释器名称python;python3.x支持。ASCII码显示中文字符,那个中文字符不是ASCII码。
程序执行原理
(1)程序运行硬件
CPU(大规模集成电路),内存(临时存储,速度快,空间小),硬盘(永久储存,速度慢,空间大)
(2)变量
概念
程序就是用来处理数据的,变量用来存储数据
定义
变量名只有第一次出现时才是定义变量,再次出现,不是定义变量,而是直接使用之前定义过的变量。
类型
分类:数字型(int整型,float浮点型,bool布尔型,complex复数型(平面场,波动,电感电容))和非数字型(string字符串,list列表,tuple元组,dictionary字典,set集合)
str:字符串,int:整数(python3里的long长整型合并为int了),bool:布尔,float:小数(浮点数)。
类型函数的使用
字符串之间可以使用+做拼接,用*做乘积。
input("请输入:")输入的都是字符串
print():将变量输出到控制台,print("*", end="")
type():查看变量类型
int(): 将x转换为一个整数
float():将x转换到一个浮点数
变量输入输出
输出文字信息的同时,输出数据,需要用到格式化操作符%
%s:字符串
%d:有符号十进制整数,%06d表示输出的整数显示位数,不足的地方用0补全
%f:浮点数,%02f表示小数点后只显示两位
%%:输出%
变量的命名
目标:标识符(变量名,函数名)和关键字;变量的命名规则。
标识符:字母、下划线、数字(不能以数字开头,不能与关键字重名)。
关键字:在python内部已经使用的标识符。
(3)字符
运算符
==、-!、>、<、>=、<=
位运算符:&,和and不一样,and是逻辑运算符。&进行的是二进制的比较。两个可以进行如下操作set(nums1)&set(nums2),set(nums1)&set(nums2)返回的是两个集合相等的元素的集合。
关键字
break 和 continue
关键字是python内置的、具有特殊意义的标识符。关键字后面不需要使用括号。
import keyword
keyword.kwlist
二者只针对当前循环
break:某一小条件满足时,退出循环。
continue:某一小条件满足时,不执行后续代码,继续循环
pass:表示占位符号,保证程序的代码结构正确。pass关键字不会执行任何操作。
转义字符:\t,\n
print字符串输出时,转义字符会将其转换为一个特殊符号
\t:在控制台输出一个制表符,协助在输出文本时,垂直方向保持对齐。
\n:在控制台输出一个换行符。
\\:反斜杠符号
\':单引号,帮助输出'
\n:换行
\t:横向制表符
\r:回车
\:放在尾部,表示续行。
(4)语句
if
tab键增加缩进或4个空格(建议),tab和空格不要混用。
逻辑运算符:and,or,not
while
记得加跳出条件
(5)函数
为注释函数,在def定义后面,用""" """给函数做说明。ctrl+q可以完成函数说明的查看。
概念
形参:定义函数时,小括号中的参数,是用来接受参数用的,在函数内部作为变量使用。
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的。
return:(1)可以返回一个函数的执行结果;(2)下方的代码不会被执行,返回到调用函数的位置。
作用
函数可以嵌套调用
模块
模块是工具包,使用import调用,每一个以扩展名py结尾的Python源代码文件都是一个模块,在模块中定义的全局变量、函数都是模块能提供给外界直接使用的工具。
模块名也是一个标识符,不能与关键字重名。
Pyc(c是compiled编译过的意思。)
__pycache__这种目录(cache表示缓存的意思),目录下有hm_10_分隔线模块.cpython-35.pyc文件,cpython-35表示官方用c语言开发的Python解释器的版本,pyc文件由Python解释器将模块的源码转换为字节码(二进制文件,然后才会生成机器码),这样保存字节码是作为启动速度的优化。
方法和函数
方法和函数类似,方法需要通过对象来调用,表示针对这个对象要做的操作。
对象.方法名(参数)
内置函数
len():容器元素个数
del():删除变量
max():返回容器最大值,字典只对key进行比较。
min():返回容器最小值
cmp():比较两个值,python3中删除。字典不能比较大小。
ord():求字母的ASCII,eg:ord("a")
enumerate():enumerate(num),num是列表的话。则有index和value两个值。
list():用于将元组、区间(range)等转换为列表
all():判断可迭代string、list、dict、tuple、set()是否有False,0,和""
range():range可以有三个参数,range(start, end, k),k代表步长。无论是正序还是逆序,都是左闭右开
符号
(1)->:返回值类型说明,元数据。
元数据:用于描述数据的数据,它是数据的描述和上下文,有助于组织、查找和理解数据。
其他
Optional():提示作用,是函数参数未被赋值或赋值错误时能有个提示返回。
#Optional
from typing import Optional
def foo_v2(a: int, b: Optional[int] = None):
if b:
print(a + b)
else:
print("parameter b is a NoneType!")
#只传入a位置的实参
foo_v2(2)
# 输出
>>> parameter b is a NoneType!
(6)高级变量
列表,元组,字典,字符串,集合。
列表
最频繁的数据类型,在其他语言中叫做数组。可以存放不同类型数据。
list(),[]:定义
len():获得二维数组的行len(A),获得二维数组的列len(A[0])
sum():求和,eg:results = sum(A)
.clear():全删
.remove():指定内容删除,删除第一次出现的数据
.pop():指定索引删除。默认删除最后一个,弹出最后一个元素并返回。
关键字del:本质是将一个变量从内存中删除,使用:del list[n],del m(m = 1),后续代码就不能再使用该变量。
.count():统计某个元素出现的次数
.index():[n].index(n)找列表中n这个数的索引
.sort():升序排序,从小到大。直接用命令list.sort(),不需要返回值,带返回值的语法是错误的。
按照某种规则排序时的写法如下,降序排序就用reverse=True:
A.sort(key=lambda x:abs(x), reverse=True)
A.sort(key=lambda x: (x[0], x[1])) # x是列表,lambda的返回值是元组,先按x[0]排序,x[0]相同时再按x[1]排序。至于升序还是降序,可以使用-x[0]这种取负数的形式。
nums = sorted(nums)
.insert():eg:que.insert(位置索引,插入的变量)
.reverse():逆序,反转
.iteration():从头到尾依次从列表中获取数据,在循环体内部针对每个元素执行相同操作。
.extend():a = list().entend([1, 2])这种是不允许的。
元组
tuple与列表类似,元组元素不能修改。通常保存不同类型数据。格式化字符串后的()本质是元组。元组的元素不重复。
():定义元组
.add():增加元素
.count():统计出现次数
.index():取索引
tuple[n]:取值
list(元组)
tuple(列表)
字典
python(4):Python中的六大数据类型——【tuple元组】和【dict字典】
定义:dict()或{},字典是无序可修改,列表是有序的对象集合。值可以取任意数据,键只能使用字符串、数字或元组这些不可变数据。
.get():通过key获取value的值如果没有key则赋初值,eg: table[num] = table.get(num, 0)。
字典名[key]=new_value:直接修改,如果没有则为添加。
update():针对两个字典,后边的字典会将前面没有的值添加,有则覆盖。
setdeafault():只能添加,如果原来有同key不会改变。
clear(), del, popitem()随机弹出,储存为元组,删除原来字典里的, pop()制定key删除。
for循环的是key
keys(), values(), items():分别表示储存为列表的形式,第三个为储存为列表套元组的形式。
.item():用于dict遍历,比如for key, freq in map.items()
.key():,.value(),.item():返回视图对象(view objects),提供字典实体的动态视图,字典改变,动态视图也会改变。key返回key值,value返回value值。
defaultdict能返回默认值。接受内置函数作为参数,key不存在时,返回的是默认值,list对应[ ],str对应的是空字符串,set对应set( ),int对应0。
from collections import defaultdict
字符串
.count():统计某个小字符串出现次数。例如统计空格的个数string.count(" ")
.index():某个子字符串出现位置
l = list(s), s = "".join(l)字符串没有s[num]的索引操作。需要将其转换为列表。
s = " ".join(word for word in s.split()),这种操作虽然没有提供可迭代的变量,但是提供了可迭代的对象,也是可以用空格间隔开的。
.strip():删除开头或结尾的字符串。
.split():返回的是列表。
集合
python(5):Python中的六大数据类型——【set集合】
set(list):将列表转换为集合,同时内部的重复元素会被抹去。
set():定义集合,eg:uset = set()
(7)开发涉及的用法
Linux操作系统
pip
程序开发
注释#后加TODO(名字)
指示是谁开发这个功能模块。
变量的操作
float("inf")
正无穷与负无穷
python正负无穷float(“inf“)、float(“-inf“)的用法
切片
切片适合字符串,列表,元组。字典不行,因为无序。
A[ : 2]:表示索引 0至1行;
A[ :, 2]:表示第3列;
a[2:]: 第三个到最后一个元素;
字符串[开始索引:结束索引:步长],eg:[::-1],将字符串逆序。
对于字符串s = 'abc',如果使用s[0:999] ===> 'abc'。末尾如果超过最大长度,则会返回至最后一个值,这个特性可以避免一些边界条件的处理。例如每次需要输出字符串等间距的字符串,最后不满足的边距也要输出,最后的这个就不用加if条件了。
None
python [ : , : ] [ : ,None , : ] 等形式的意义——Python学习系列
深拷贝浅拷贝
深拷贝list[]会改变内存地址,浅拷贝不会改变内存地址,当某个变量改变时涉及到的所有关于该变量的其他变量的值也会改变。
内置关键字&内置方法
关键字
nonlocal,外部嵌套函数内的变量
Python学习:关键字global和nonlocal的用法说明
lambda
关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解
__init__
简言:方法和属性初始化。
在Python中定义类经常会用到__init__函数(方法),首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。而__init__函数(方法)支持带参数类的初始化,也可为声明该类的属性(类中的变量)。__init__函数(方法)的第一个参数必须为self,后续参数为自己定义。
__call__
简言:使的实例对象可调用,执行__call__中的代码。
Python中那些能够在后面加()来调用执行的对象,被称为可调用对象。可调用对象包括自定义函数、Python内置函数、实例对象和实例方法等。
call()方法是Python中一个很特殊的方法。凡是可调用对象,都可以通过调用__call__()方法来调用该对象。如果类中定义了__call__()方法,那么该类的实例对象也将成为可调用对象。该对象被调用时,将执行__call__()方法中的代码。
显示
f" "
允许花括号内的变量和表达式子。
Python3创建目录mkdir(parents=True, exist_ok=True)
程序执行原理进阶
面向过程
过程:早期的编程概念。类似函数,只能执行,没有返回值。函数能执行,还可以返回结果。
注重步骤与过程,不注重分工。主函数--子函数--子函数,开发复杂项目比较难。改需求时不同的函数参数都要改变。
面向对象
类是对象的抽象,能够描述对象的属性和行为。
命名:满足大驼峰命名法(每个单词的首字母大写,单词与单词之间没有下划线。)
子类和父类
继承的类可在被继承的类的基础上添加额外的参数和方法,新类称为子类,扩展类;被继承的类称为基类、父类或者超类。
注意事项:子类可以覆盖父类的方法,定义同名;子类可以扩展父类的方法,定义同名并调用;super关键字:调用父类的方法和属性;多重继承;isinstance()判断一个对象是否是某个类或者子类的实例。
其他
双向队列
collection: python标准库,数据结构常用的模块。包含一些特殊的容器。
from collection import deque
堆
import heapq
heapq.heappush(heap, item):heap为定义的堆,item为增加的元素。
递归
递归的实现:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,递归返回时,从栈顶弹出上一次递归的各项参数。
内置库&Pytorch库
内置库及方法
.eq()
python operator用法,Python operator.eq()函数与示例
.mkdir()
Python3创建目录mkdir(parents=True, exist_ok=True)
collections
Python collections模块之defaultdict()详解
a = default(m, n),m为value类型,n为字典。
from collections import deque
math
Math.round(),Math.ceil(),Math.floor()的区别
operator
from operator import add, sub, mul
heapq
Pytorch
.numpy(), .item()
(tensor转换为python标量(int,float等)).cpu()
Pytorch中 .numpy() .item() .cpu() 区别
python中dtype、type()、astype()区别
.data()使数据独立于计算图之外,不会被记录。
tensor[:,None]