惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
IT之家
IT之家
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
J
Java Code Geeks
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
宝玉的分享
宝玉的分享
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
NISL@THU
NISL@THU
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
aimingoo的专栏
aimingoo的专栏
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Fortinet All Blogs
博客园 - Franky
L
Lohrmann on Cybersecurity
S
Secure Thoughts
量子位
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
I
InfoQ
C
CERT Recently Published Vulnerability Notes
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Proofpoint News Feed
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验 最深沉的梦 森林里倒下的树 现象与相 庸人自扰 React 与 Vue 的完美融合 开心就好吗 与原生家庭和解 两支毒箭 怎么自净其意 一尘不染 一片白云 让风穿膛而过 喝下去,然后闭嘴 活在当下 当纠结发生时 唯「我」独尊 一场把戏(时间) 一场把戏(二元对立) “我” 和 “我” 谁是众生? 船里没有人 玫瑰不需要说话 没有人能渡任何人 你我为轮,使之不再 当我们在谈论独立时 自我约束就是最好的自我接纳 从善与恶的表象出发 佛法不是心理学 别人眼中的你并不是你 高高山上走 祝你心想事成 祝你的噩梦早日发生 道是无情却有情 裙子只为自己而穿 不要盲目地评估自己 先别急着 “爱自己” 让生命欣然舞动 你无法复制乔布斯 符号不是目的 如果一件事发生了 每当我起心动念时 爱出者爱返 理解不是尊重的基础 在没有解决自己的问题之前 “知足常乐” 不是比较 逻辑是无法成为信仰的 买不到的自由 成为诵经者 伤口听不懂大道理 是立场让你不自由 - Unfreedom 天雨大不润无根之草 做自己的神 当心诱惑本身 牛洞冥思录 修罗启示录 让大脑自举 我更喜欢叫它无梦寺 存在主义也许不是解药 出南洋记 2022 的所有答复 没意义的表达 思考的记录 故宫暂行之幻想 极端的比较 解构的终极 舍利子是如何炼成的 心要野 佛教的偏见 文艺青年 我是动物
两小时 Python 之旅
Surmon · 2017-04-14 · via Surmon.me

转战机器学习了,补齐一点 Python 基本知识,并没有太深入, 只需要满足基本的机器学习代码能跑起来就可以,所以整理一些基本知识。

注:下文 Python 代指 Python3。

基本信息

  • 和 JavaScript 一样,面向对象、解释型、动态数据类型
  • 一切皆为对象(Object),包含原始数据类型也由内置构造函数创建,高阶对象为 Object
  • 单行注释使用 # 标识,多行注释同多行字符串
  • 靠缩进约束逻辑分支,无大括号等多余运算符
  • 支持多行单语句、单行多语句
  • 变量无需声明,必须赋值才会正式声明
  • 有自己的模块系统
  • 文件以 .py 结尾。

基本构成

Python 中一切皆对象,数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象。

不同的编程语言以不同的方式定义“对象”。 某些语言中,它意味着所有对象必须有属性和方法;另一些语言中,它意味着所有的对象都可以子类化。

在Python中,定义是松散的,某些对象既没有属性也没有方法,而且不是所有的对象都可以子类化。 简单可以解释为:Python 中的一切都可以赋值给变量或者作为参数传递给函数。

所有对象都有三个共同特征:

  • 身份:即对象数据(非变量)在内存中的唯一 id,可以通过函数 id(obj) 得到
  • 类型:对象的类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作,遵循怎样的规则。可以使用内建函数 type() 来查看对象的类型
  • :对象所表示的数据

大部分 Python 对象有属性、值或方法,使用句点 . 标记法来访问属性。 最常见的属性是函数和方法,一些 Python 对象也有数据属性,如:类、模块、文件等。

数据存储

字符串、数字数据在内存中均为引用类型,即栈内存保存数据本身,堆内存维护一个变量池,如下实例:

        
        

12345678

# 开辟内存存储数据'hello',并创建变量a,并将a的指针指向此数据 a = 'hello' # 开辟内存存储数据'world',并更改变量a的指针,销毁数据'hello' a = 'world' # 开辟内存存储数据"hello world!",并同时创建三个变量,将三个变量的指针同时指向此数据 b = c = d = "hello world!" # 多个变量赋值,同上,分别先后对应 e, f, g = 1, 2, 'python'

实际上变量 a 在首次声明并赋值时,栈区开辟内存存储 'hello' 字符串, a 再次赋值时,栈区重新开辟内存存储数据 'world' 字符串,同时将变量 a 的指针指向数据 'world',销毁数据 'hello'

其他数据类型,类似;如列表、字典:

        
        

12345

a = [1,2,3,4] # 变量a的指针不改变 a[0] = 5 # 变量a的指针改变 a = [2,3,4,5]

变量 a 更改列表子数据时,列表本身的指针和位置不会改变,但将a本身重新赋值时,则同上:原列表数据销毁、指针指向新列表数据。

Python中支持删除变量对对象的引用,使用 del 语句,如下:

        
        

1234567

a = 10 b = 20 c = 30 d = [1,2,3,4] del a del b, c del d[0]

对象比较

  • == 操作符用于测试两个被引用的对象的值是否相等
  • is 用于比较两个被引用的对象是否是同一个对象

类型比较

  • type(obj) 判断数据类型
  • isinstance(object, classinfo) 判断实例是否属于某类

缓存和内存回收机制

缓存机制

Python 缓存了某些不变的对象对其进行复用,而不是每次创建新的对象。 在 Python 中变量都是指向某一对象的引用,当多个变量都引用了相同的对象,称为共享引用。

如下代码:

        
        

12345678910111213

# 由于变量仅是对对象数据的一个引用,因此改变 a 并不会导致 b 的变化 a = 1 b = a a = 0 print(a) # 0 print(b) # 1 # 对 a = [1, 2, 3] b = a a[0] = 0 print(a) # [0, 2, 3] print(b) # [0, 2, 3]

内存回收机制

每一个对象有两个标准的头部信息:

  • 类型标识符:标识对象数据类型
  • 引用的计数器:用于决定是否需要对对象进行回收

计数器记录了当前指向该对象引用的数目,一旦对象的计数器为 0,即不存在对该对象的引用,则这个对象的内存空间会被回收,和 JavaScript 中基本一致, 可以通过 sys 模块中的 getrefcount() 函数查询一个对象计数器的值。

        
        

123

import sys sys.getrefcount(1) # 实测python的编译过程和打印乃至getrefcount这个函数本身都会对目标对象造成多余的引用计数

数据类型

数字 Numbers

三种类型:

  • int:整型 int(num)
  • float:浮点型 float(num)
  • complex:复数型 complex(a, b)

运算相关:

  • 数学常量...
  • 数学函数...
  • 随机数函数...
  • 三角函数...

字符串 String

方法:str() 包含一堆内建函数

三种符号表示方式(三引号保持原有格式):

  • 'str'
  • "str"
  • '''str'''
  • """str"""

两种操作/读取方式:

  • 下标:str[0]
  • 中括号:str[:]

例子:

        
        

123

var1 = 'Hello World!' print ("已更新字符串 : ", var1[:6] + 'Surmon!') # 已更新字符串 : Hello Surmon!

列表 List

简单说:类似数组,可嵌套,可作为堆栈使用

基本格式:['str', 1, ['hello']],拥有各种类似数组操作的方法,访问方式可使用下标、中括号 [index:index]

元组 Tuple

简单说:类似列表,但只读。

基本格式:('', ''),和列表类似,拥有只读特性,可拼接,拥有基本操作方法。

集合 Sets

简单说:是一个无序不重复元素的序列

基本格式:{ } 字面量 或 set() 方法,创建一个空集合必须用 set() 而不是 { } 字面量,因为 { } 字面量是用来创建一个空字典。

复杂说:类似于数学中的集合,可以进行成员关系测试(交、差、并、补集),还可以用来去重。

BTW:类似于 JavaScript 中的 Set 数据结构。

字典 Dictionary

简单说:就是对象

与 JavaScript 并无太大异样,多了一些方法,和一些方法名称的不同,仅可通过 obj[key] 访问成员。

迭代器和生成器

就是 JavaScript 中的 Generatoryield,一句话的话就是:交出函数(运算)的执行权,即暂停执行

两个参考链接:

函数

普通函数基本没区别,区别的地方: 函数形参可以加一个 * 将函数所有不固定参数合并在一个元组,若参数为空,则返回一个空元组。

和 JvaScript 比的话,就是 ES5 中的构造函数,ES6 中的 Class。

它用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

对象是类的实例。就是面向对象啦,上下文不再是 this,而是类函数中的首参(一般定义为 self)。

类的专有方法:

  • __init__ : 构造函数,在生成对象时调用(对应 ES6 中的 constructor
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __div__: 除运算
  • __mod__: 求余运算
  • __pow__: 称方

包和模块

Python 中,包为最大内聚单位,当然它只是抽象的,它可能是个文件夹或是其他 whatever,他的意义就是更好地管理模块的命名空间。

假设现在有个模块的名称是 A.B, 那么他表示一个包 A 中的子模块 B。 就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用 package.moduleName 这种形式也不用担心不同库之间的模块重名的情况。

Python 中以文件为模块单位,模块中又可以区分不同的类、方法、对象或任何其他数据,和 Node.js 中的模块大同小异。

核心语句:

  • import ...
  • from ... import ...

核心对象和模块

  • File:对文件的操作
  • OS:处理文件和目录
  • json:对json数据的处理
  • 时间:timecalendar

多线程

多线程类似于同时执行多个不同程序,多线程运行有很多优点。

线程分为:

  • 内核线程:由操作系统内核创建和撤销
  • 用户线程:不需要内核支持而在用户程序中实现的线程

Python3 中线程相关的两个模块:

  • _thread(原 thread,已废弃)
  • threading

一般可以使用函数或者用类来包装线程对象。

...剩下的略复杂还没看,日后补上

初次学习,若有不足,多多指教!