Python 学习笔记——3. 流程控制与异常
一些关于流程控制的语法,除了继续吐槽一下 Python 的缩进规则之外,也没什么好说的,各种语言都大同小异,直接给例子即可。 条件语句 if 条件 直接给例子,只需要注意一下用elif而非else if 1234567891011121314if a==1: ...if x<0: ...else: ...if x<0: ...elif x==0: ...else: ... 最简单的单行 if 也是可以的 1if True: print("hello") 还可以使用如下的单行 if 表达式,类似于 C 语言的三目运算符,它算作表达式,因此也可以用在 lambda 表达式中 123result = 1 if True else -1 # 1result = (lambda : 1 if 3>4 else -1)() # -1 注意:在 if 中的条件可以包括与或非等更复杂的逻辑判断,但是只能使用 and or not 来代表,不支持 && || !;(C++对这两套都支持,但是主要使用后者) 这...
Python 学习笔记——2. 字面量与运算符
字面量 字面值是内置数据类型常量值的表示法,也就是硬编码在 Python 脚本中的数据,包括数字和字符串等的表示形式。 数值字面量 主要包括如下的数值字面量 整数,例如100 浮点数,例如3.12,10.,.001和3.14e-10 复数,例如1+2j(注意不是 i 而是 j,并且 j 前面不能有空格) 注意: 对于整数,默认十进制,可以使用 0b 开头表示二进制,使用 0x 开头表示十六进制等。 对于长整数,可以加下划线增加可读性,没有实际效果。例如 123_456_789。 根据参考文档,严格来说数值字面量不含正负号-和+,并且有纯虚数而没有复数,复数是实数和纯虚数的组合。 布尔字面量 布尔字面量包括两个:True 和 False。 在某些情况下,相当于数字中的 1 和 0: 121 == True # True0 == False # True 字符串字面量 Python 不区分字符和字符串,字符视作长度为 1 的字符串。 字符串需要用单引号或者双引号包裹,\ 被用作转义特殊字符,例如 \" 表示双引号。 12print('hello,\"li,...
Python 学习笔记——1. 基础
概述 Python 是一个非常友好的高级语言,Python 的特点比如:面向对象,动态类型,交互式执行,万金油,胶水语言。 Python 类似于 Java,不允许直接操作内存,底层实现了垃圾收集机制(GC)。 Python 在轻量级的使用上无疑是非常香的,并且现在在数据科学领域也达到了称霸的地位。 虽然我同时也在使用 C++,但是 C++ 的语法复杂程度让我从来没有写完整 C++ 学习笔记的打算,只能学一点写一点,慢慢积累,Python 倒是可以尝试一下。 正所谓:人生苦短,我用 Python。 接下来的笔记并不是具有顺序性的,内容会相互交叉,因为如果非要对笔记进行先后排序,就必须将函数、类等重要内容拆成基础和进阶部分来写,但作为整理性质的笔记,并没有这个必要。 关于 Python 绘图的部分,我计划专门写一个系列关于 Python 数据可视化的笔记。 主要参考官方教程和官方文档,前者适合入门,而后者在概念理解上更加详细。 Python 常识 解释器 和 c/c++这种编译型语言不同,Python 作为解释型语言,需要 Python 解释器才能运行,Python 解释器有很多不同...
Python 绘图笔记
matplotlib 介绍 matplotlib 大致是类似 matlab 风格的 2D 绘图库(3D 的功能比较弱,还是基于 2D 引擎勉强实现的),同时提供了两套 api: 一个是面向过程的,主要调用 matplotlib.pyplot 的函数; 一个是面向对象的,主要调用 matplotlib 的两个子类:matplotlib.figure.Figure 和 matplotlib.axes.Axes ,使用它们的方法进行细节操作。 面向过程的 api 适合简易使用的场景,但是不容易弄清原理;为了更复杂的绘图要求,这里主要采用面向对象的 api。关于绘图的呈现方式,在 Jupyter 中很可能会自动绘图而不需要 plt.show(),这与魔法指令 %matplotlib inline 有关。 在这一系列笔记中,需要使用如下模块: 123import numpy as npimport matplotlibimport matplotlib.pyplot as plt 由于 matplotlib 的内容太多太杂,这里只会介绍最容易理解的,最本质的面向对象的接口,然后作为辅助...
编码学习笔记
编码是最繁琐的问题之一了,尤其对于 C++ 这种 string 还只是char *简易封装的底层语言来说,对于非 ASCII 的字符串的处理需要考虑各个环节的编码,只要错了一项最终就是乱码。 对于一些更高级的语言比如 Python3,全部使用 utf8 就少了很多乱七八糟的乱码问题。 为了避免潜在的乱码麻烦,可以采用如下做法: 对于所有文本,默认使用 UTF-8 编码 对于所有源码,只采用英文(ASCII 编码),无论语言/编译器/解释器对编码的支持如何 对于源码中的注释,尽量使用英文(ASCII 编码),即使必须使用中文注释,也应该采用 UTF-8 编码 ASCII 码 首先从 ASCII 码开始,在早期的计算机中,使用一个字节(8 比特,实际上是 7 比特)来表示所有英文字母和常见的标点符号,以及回车,制表符等控制字符,如下表。 这里 4 比特用一个十六进制数来表示,实际上没有用完\(2^8=256\)个,只用了一半 128 个,具体而言就是只用了 7 比特,最高位始终为 0。 其中还包括了一些控制字符,比如著名的换行符:CR/LF,制表符 HT(tab),剩下的 12...
文本文件的常见问题
关于文件的处理,在实际应用尤其是跨平台时会遇到各种各样的问题,主要包括如下几个问题: 非 ASCII 字符的编码问题:UTF-8?(这个问题太大了,因此放在另一篇专门的笔记中) 换行符的问题:LF or CRLF? 制表符问题:tab or space? 二进制数据的大小端问题 本文将主要对这些问题进行简要整理。 换行符问题 不同平台上文本文件的换行符是不一样的,具体来说: Windows:CRLF \r\n Linux:LF \n macOS:早期是 CR \r,现在已经改成 LF \n 现在只有 Windows 的 CRLF 是个异类了。其实严格来说\r的含义是回车,回到行首;\n的含义是换行,换到下一行。 换行符不一致会带来很多问题:例如 Linux 的文本文件在 Windows 上,可能出现无法换行,连续显示一大段的效果;例如 Windows 的文本在 Linux 上可能出现大量的^M,这就是\r并没有被理解为换行符的一部分。 原生的一些文本处理程序,可能无法兼容其它系统上的换行符,例如 Windows 自带的记事本只支持 CRLF,bash 脚本只支持 LF。 ...
Everything 查询语法整理
学习整理一下 everything 的高级用法吧,感觉这对于提高 Windows 上的生产力很有帮助。(不砍柴,光想着磨刀 ing) everything 的基本工作流程: 输入一个指令或多个指令的组合 everything 对输入指令进行解析,获取具体要求(解析规则受到筛选器以及设置中的选项影响) everything 在数据库中进行检索,检索的项可能是:文件或文件夹的直接名称,或含有绝对路径的完整名称,这与具体情况和开启的选项有关。 检索是否与指令的具体要求相符,返回满足要求的所有项(不区分文件/文件夹) 注:Windows 在文件名和文件夹名称当中不能包含如下特殊字符,允许出现空格 1\ / : * ? " < > | 这些特殊字符可能在 everything 中有特殊的语法作用。 1. 搜索选项 我们首先关注菜单栏->搜索的部分选项: 解释一下:(如图即是默认的状态) 区分大小写 全字匹配: 不开启全字匹配:我们输入txt可能匹配到a.txt或者txt2.zip,即txt可能不是作为一个完整单词 开启全字匹配:确保txt只会作为一个完...
Nginx基本使用与建站配置
记录一下 Nginx 的基本使用与建站配置,免得改的时候又忘记了。 (这里不涉及 hexo 博客的具体配置细节,有专门的笔记) Nginx 基本使用 基本命令 常见操作要求在 root 用户下进行: 第一类操作 启动:systemctl nginx start 关闭:systemctl nginx stop 重启:systemctl nginx restart 第二类操作 测试:nginx -t,显示配置文件目录,检查 nginx.conf 是否有语法错误,并进行测试。 重新加载配置:nginx -s reload,reload 命令会重新加载配置文件,此时 nginx 服务不会中断,服务启动,文件即加载成功。 平稳地关闭:nginx -s quit,迅速地关闭:nginx -s stop。 配置逻辑 首先记录一下 Nginx 的配置逻辑:(root 用户直接apt-get安装,而非源码编译)nginx 配置文件全部位于/etc/nginx/目录,其中值得关注的包括: nginx.conf 主配置文件 sites-available/ 文件夹 sites-ena...
Windows Cpp 编程中的几个问题
几个最常见的坑,专门为了处理 Windows 的几个麻烦问题。 关于 scanf 警告不安全 scanf 代表的一类标准库函数被微软的 MSVC 编译器视作不安全的,可能有缓冲区溢出的危险,因此它总是不厌其烦地建议替换为 scanf_s。通常我们不想理会这个建议,可以使用下面的选项 12345678#if defined(_MSC_VER)#pragma warning(disable : 4996)#ifndef _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#endif#endif 这里我们进行了冗余的设置,#pragma选项和下面的_CRT_SECURE_NO_WARNINGS宏定义都可以用来关闭这些警告,相当于加了两道保险。 输出中文乱码 如果源文件采用 utf-8,在 Windows 尝试进行中文输出,那么我们很可能遇到中文乱码的情况,原因是活动代码页是默认的 GBK 编码而非 utf-8。我们可以手动执行chcp 65001更改活动代码页为 utf-8,但这个做法不仅麻烦,而且程序执行时有时会打开一个新的界...
Visual Studio 简单使用记录
之前的 C++编程都是在 Linux 或者 VScode+MinGW 进行的,但有时难免需要使用宇宙第一 IDE,简单记录一些 VS 的基本使用吧,尤其了解一下分布在各个菜单栏各个按钮下的常用配置。(直接命令行参数多省事,省得在各种菜单的犄角旮旯里找配置选项) 本文全部在 VS2019 完成,并且不考虑 MSVC 的纯命令行使用。 1. 解决方案与项目 项目是 VS 中的基本概念,例如某个库的开发就是一个项目,解决方案是项目的上层概念,一个解决方案可以包含多个项目。简单情况下一个项目会对应一个同名的解决方案。 解决方案在文件系统中直接对应一个xxx.sln解决方案文件,它记录了解决方案层面的配置信息,实质是一个类似 INI 格式的纯文本文件,形如 12345678910Microsoft Visual Studio Solution File, Format Version 12.00# Visual Studio Version 17Project("{GUID}") = "MyProject", "MyPr...
