Python 学习笔记——4. 函数
函数格式Python 要求使用如下格式来定义函数。 1234def function_name([parameter_list]): ["function docstring"] function_body [return statement] 其中只有函数体是必要的(如果是空函数也需要使用pass或...占位),参数列表,文档字符串和return语句都可以省略。函数说明文档的字符串使用连续三个单引号或双引号包裹,看起来像多行注释。 简单示例空函数,没有任何效果 12def null(): pass HelloWorld 函数,打印字符串 12345def hello_world(): """ hello,world """ print('Hello, World!') 包含输入输出的减法函数 1234def subtract(x,y): return x-ysubtract(3,2) # 1 函数参数参数传递机制函数的...
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 绘图笔记
这里主要关注 Python Matplotlib 绘图的技术性内容,不讨论非技术性内容,例如论文中的绘图要求或偏好。 Matplotlib 介绍matplotlib 是模仿 MATLAB 风格的 Python 2D 绘图库(3D 的功能比较弱,还是基于 2D 引擎勉强实现的),同时提供了两套 api: 一个是面向过程的,主要调用 matplotlib.pyplot 的函数; 一个是面向对象的,主要调用 matplotlib 的两个子类:matplotlib.figure.Figure 和 matplotlib.axes.Axes ,使用它们的方法进行细节操作。 面向过程的 api 适合简易使用的场景,但是不容易弄清原理;为了更复杂的绘图要求,这里主要采用面向对象的 api。(MATLAB 绘图也是一样的问题,而且主要都在使用面向过程的接口) 关于绘图的呈现方式,在 Jupyter 中很可能会自动绘图而不需要 plt.show(),这与魔法指令 %matplotlib inline 有关。 在笔记中,需要使用如下模块: 123import numpy as npimport...
编码学习笔记
编码是最繁琐的问题之一了,尤其对于 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,制表...
Linux 文件和链接
inode在Linux中,文件的元信息被存储在一个 inode 中,inode 中包括除了文件名以外的所有文件信息,可以用stat命令,查看某个文件的 inode 信息,例如 1stat ~/.bashrc 输出形如 12345678 File: ‘.bashrc’ Size: 1494 Blocks: 8 IO Block: 4096 regular fileDevice: fd02h/64770d Inode: 25774323490 Links: 1Access: (0644/-rw-r--r--) Uid: ( 1004/ user) Gid: ( 1004/ user)Access: 2023-11-06 19:28:47.327126137 +0800Modify: 2023-11-06 19:27:47.324249034 +0800Change: 2023-11-06 19:27:47.345249343 +0800 Birth: - 其中: Inode项是inode编号,这是文件的唯一标识。...
Bash 学习笔记
Bash 启动配置bash (Bourne Again SHell) 是默认的 shell,有必要了解一下它不同启动方式下的配置过程。 当执行bash命令或者用户登录系统时,会陆续加载各种bash配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令,这些行为都算是启动bash时的过程。在不同的系统中具体的逻辑还是不同的,目前只关注Ubuntu和CentOS。 启动过程有两个维度的分类方式: 交互式和非交互式 交互式的标准情景:输入一个命令,然后输出user@host:path$,等待用户输入; 非交互式的标准情景:bash执行一个脚本,例如bash demo.sh。 登录和非登录:顾名思义,非登录情景可以加上--login或-l选项来伪装为登录情况。 可以通过下面的方法进行判断: 交互式的判断: 交互式环境下的$-变量会含有字母i; 交互式定义了提示符$PS1,但是非交互式会清空这个变量,因此echo $PS1可以区分。 登录和非登录的判断:shopt login_shell,返回on或off。 1echo $PS1;shopt login_shell...
文本文件的常见问题
关于文件的处理,在实际应用尤其是跨平台时会遇到各种各样的问题,主要包括如下几个问题: 非 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只会...
