【album】Python使用笔记

描述

  1. python是一种解释性文件,代码要通过解释器解释运行。python解释器就是python.exe这个程序。
  2. pip也是一个pip.exe的程序,是用来管理python的第三方库。
  3. 有两种执行方式:脚本执行 & 交互式执行。前者是 cmd 中用 python 文件名 来运行(Linux常用);交互式运行就是在解释器里面运行的方式。
  4. Python解释器同一时间只能运行一个程序的一条语句。 标准的交互Python解释器可以在命令行中通过键入 python 命令打开。

GPU

 

编程

方法

参考【那少年和狗】的博客【Python中@staticmethod和@classmethod的作用和区别】:

Python有3种方法,静态方法(staticmethod),类方法(classmethod)和实例方法。

对于一般的函数foo(x),它跟类和类的实例没有任何关系,直接调用foo(x)即可。

在类A里面的实例方法foo(self, x),第一个参数是self,我们需要有一个A的实例,才可以调用这个函数。

当我们需要和类直接进行交互,而不需要和实例进行交互时,类方法是最好的选择。类方法与实例方法类似,但是传递的不是类的实例,而是类本身,第一个参数是cls。我们可以用类的实例调用类方法,也可以直接用类名来调用。

静态方法类似普通方法,参数里面不用self。这些方法和类相关,但是又不需要类和实例中的任何信息、属性等等。如果把这些方法写到类外面,这样就把和类相关的代码分散到类外,使得之后对于代码的理解和维护都是巨大的障碍。而静态方法就是用来解决这一类问题的。

比如我们检查是否开启了日志功能,这个和类相关,但是跟类的属性和实例都没有关系。

多线程

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。 线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

参考:【个人博客】【Python 多线程与多进程】

文件

从本质上讲,文件是用于存储数据的连续字节集。这些数据以特定格式组织,可以是任何像文本文件一样简单的数据,也可以像程序可执行文件一样复杂。最后,这些字节文件被翻译成二进制文件1,0以便计算机更容易处理。

大多数现代文件系统上的文件由三个主要部分组成:

  • 标题(Header):有关文件内容的元数据(文件名,大小,类型等)
  • 数据(Data): 由创建者或编辑者编写的文件内容
  • 文件结束(EOF):表示文件结尾的特殊字符

读取

参考:【个人博客】【Python文件的读写操作】

excel

可以使用pandas读取。参考:【pandas】使用笔记 - 博客园 (cnblogs.com)

【报错:not supported】【参考:https://blog.csdn.net/weixin_44073728/article/details/111054157】

pickle

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。

pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

参考:

【个人博客】【Python对象持久化存储工具pickle】

【Python pickle模块:实现Python对象的持久化存储】

【CSDN博客】【详解python中pickle模块的一些函数】

json

参考:【博客园】【【json】文件&数据处理】

.pth

pytorch中的模型文件 .pth 文件,是一个包含 四组 “key-value”的字典,类型分别如下:

torch.save / torch.load

IPython / Jupyter

自省[?]

在变量前后使用问号?,可以显示对象的信息。

?还有一个用途, 就是像Unix或Windows命令行一样搜索IPython的命名空间,与通配符结合可以匹配所有的名字。

魔术命令

IPython中特殊的命令(Python中没有)被称作“魔术”命令。这些命令可以使普通任务更便捷, 更容易控制IPython系统。魔术命令是在指令前添加百分号%前缀。例如,可以用 %timeit 测量任何Python语句的执行时间。

魔术命令可以被看做IPython中运行的命令行。许多魔术命令有“命令行”选项,可以通过?符号查看。

可以用 %run 命令运行所有的Python程序。 【ipynb脚本中】

文件解压

参考:【博客园】【【jupyter】文件解压】

基本数据类型

python 与 C 语言和 Java 语言的一点不同,表现在它的变量不需要声明变量类型,这是因为像 C 语言和 Java 语言来说,它们是静态的,而 python 是动态的,变量的类型由赋予它的值来决定。

Python3 废除了 long 类型,将 0 和 1 独立出来组成判断对错的 Bool 型,即 0 和 1 可以用来判断 flase 和 true。但是根本上并没有修改原则。这里的 Bool 型依然是 int 型的一部分,所以依然能当做数字参与运算,所以 Python3 里的 Bool 型是 int 型的一个特例而不是一个独立的类型。

参考教程[2],Python3 的六个标准数据类型:

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

number

Python3 支持 int、float、bool、complex(复数)

在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。像大多数语言一样,数值类型的赋值和计算都是很直观的。

内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

  • 数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。在混合计算时,Python会把整型转换成为浮点数。

String

Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。索引值以 0 为开始值,-1 为从末尾的开始位置。(Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。)

加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,紧跟的数字为复制的次数。

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

List

List(列表) 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号 [] 之间、用逗号分隔开的元素列表和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。Python 列表截取可以接收第三个参数,参数作用是截取的步长。

加号 + 是列表连接运算符,星号 * 是重复操作。索引值以 0 为开始值,-1 为从末尾的开始位置。

与Python字符串不一样的是,列表中的元素是可以改变的。List 内置了有很多方法,例如 append()、pop() 等等。

Tuple

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。 元组中的元素类型也可以不相同。

元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取。其实,可以把字符串看作一种特殊的元组。

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。string、list 和 tuple 都属于 sequence(序列)

一般来说,函数的返回值一般为一个。而函数返回多个值的时候,是以元组的方式返回的

构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

  • tup1 = ()      # 空元组
  • tup2 = (20,)  # 一个元素,需要在元素后添加逗号

Set

集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 

基本功能是进行成员关系测试和删除重复元素。列表和元组不会把相同的值合并,但是集合会把相同的合并。

  1. 无序:集合是无序的,所以不支持索引;字典同样也是无序的,但由于其元素是由键(key)和值(value)两个属性组成的键值对,可以通过键(key)来进行索引
  2. 元素唯一性:集合是无重复元素的序列,会自动去除重复元素;字典因为其key唯一性,所以也不会出现相同元素

Dictionary

字典(dictionary)是Python中另一个非常有用的内置数据类型。

列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的。

python中的字典是使用了一个称为散列表(hash table)的算法,其特点就是:不管字典中有多少项,in操作符花费的时间都差不多。如果把一个字典对象作为for的迭代对象,那么这个操作将会遍历字典的键

微积分

参考:https://www.cnblogs.com/NaughtyBaby/p/5419043.html

运算符优先级

运算符说明Python运算符优先级
小括号 () 20
索引运算符 x[index] 或 x[index:index2[:index3]] 18、19
属性访问 x.attrbute  17
乘方 ** 16
按位取反 ~ 15
符号运算符 +(正号)或 -(负号) 14
乘、除 *、/、//、% 13
加、减 +、- 12
位移 >>、<< 11
按位与 & 10
按位异或 ^ 9
按位或 | 8
比较运算符 ==、!=、>、>=、<、<=  7
is 运算符 is、is not 6
in 运算符 in、not in 5
逻辑非 not 4
逻辑与 and 3
逻辑或 or 2

虽然 Python 运算符存在优先级的关系,但并不推荐过度依赖运算符的优先级,因为这会导致程序的可读性降低。尽量用()控制运算速度。

[1]中展示了更详细的优先级由低到高排列的运算符表格。

参考

[1] https://blog.csdn.net/qq_41573234/article/details/81351693

[2] https://www.runoob.com/python3/python3-data-type.html

[3] 部分参考《利用 Python 进行数据分析 · 2

posted @ 2018-05-12 20:04  Skye_Zhao  阅读(247)  评论(0编辑  收藏  举报