Skip to content

2022

Windows 10 使用VIM写python的基本设置

尽可能的少安装插件,使用原生vim的功能进行python小程序的方便编写。 如果不需要自动完成括号,只需要安装一个插件:jedi-vim用于函数提示就可以了。 自动完成括号应该也可以使用vim script完成,但是,没那功夫,有功夫直接使用vscode更好。

0.预备工作

确保

  • python 可以在CMD顺利运行
  • python 是64位

Warning

安装文件是32或64位应该很重要。至少我使用32位VIM配合64位Python是不成功的。别折腾。

1. 安装VIM

1.1 下载VIM

可以使用choco安装。 另一选择是下载64位VIM,请直接去Github 界面下载最新的Nightly版本 。<-这是我下载的版本 不去官网下载 的原因是:因为windows版本不是主要维护对象,上官网直接给你推一个32和64位通用的版本,下载安装以后会遇到很多困难,出了问题并没有什么信息可以参考。

1.2 安装

点击安装,除了选择完全安装以外,全部都是默认设置,安装完成。安装完成,走一遍vimtutor,确保自己能在先期存活下来再干别的事。

2. 配置VIM

2.0 复制配置文件

进入VIM安装目录,把_vimrc文件复制一份到当前用户文件夹下面。这个文件就是所有配置的基础。

2.1 更改配色

默认白色背景太刺眼,先上来使用一个深色的背景再进行其他操作。打开刚才的_vimrc文件,假设已经能在VIM里自由的编辑了。在文件最后一行,空一行,输入以下语句:

colorscheme desert
本条语句使用内置的desert配色,基本上可以接受这配色再干活。需要更改后面可以设置自己喜欢的配色。

Python f-string

本文展示如何通过f-string格式化字符串。

Python f-string 实用小片段

Python f-string是Python字符串格式化的最新语法。从Python3.6开始可用。在Python语言中,它提供了一种更快、可读性更好、更简洁、更不易出错的字符串格式化方法。

f-strings使用 f 前缀与花括号 {} 来格式化字符串。

类型、填充或者对齐等格式指示符在冒号后指定,例如f'{price:.3}',price是变量名。

Python字符串格式化

以下例子总结了Pyhton里可用的字符串格式化选项。

formatting_strings.py
#!/usr/bin/python

name = 'Peter'
age = 23

print('%s is %d years old' % (name, age))
print('{} is {} years old'.format(name, age))
print(f'{name} is {age} years old')
例子使用两个变量格式化字符串。

print('%s is %d years old' % (name, age))
  • 这是最老的选项。使用百分号%和经典的格式化指示符号,比如%s和%d。
print('{} is {} years old'.format(name, age))
  • 从Python 3.0开始,引入格式化函数以进行一些高级的格式化操作。
print(f'{name} is {age} years old')
  • Python f-strings 从Python 3.6以后可用。使用 \(f\) 前缀与花括号 { } 来格式化字符串。
python formatting_string.pyPeter is 23 years old
Peter is 23 years old
Peter is 23 years old

notepad++ 配置python运行环境(代码自动格式化/运行/高亮)

如果只是练习python,或者快速运行小程序片断,各种IDE就显得大材小用。配置一个notepadd++可以完成快速的任务。只需要配置3个方面的功能:

  • 运行
  • 代码自动格式化
  • 高亮

1. 运行

从Notepad++可以直接配置快捷键运行当前python程序。 点击 运行(R) -运行(R)... 在弹出的输入框内输入以下命令,点击 保存... 分配一个名称与快捷键,即可以按快捷键运行当前程序。

cmd /k  cd /d "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)" & pause & exit
解释:

  • cmd /k : 告诉Notepad++接下来运行的是Windows命令行程序
  • cd /d "$(CURRENT_DIRECTORY)" : 切换程序运行目录为当前目录,否则程序运行目录为Notepad++安装目录
  • & :运行多条命令连接符
  • python "$(FULL_CURRENT_PATH)" : 运行当前程序,前提是python要设置在系统PATH,否则python换成安装目录全路径
  • pause : 运行完程序后暂停
  • exit: 弹出提示"请按任意键继续..."

anaconda简单配置使用

Anacoda是Python的一个集合包,主要用于数据处理与机器学习。 它集成了众多你需要的包,可以方便的对包进行管理。 可以减少安装配置新包的时间。如果喜欢可以使用;如果不喜欢就不要使用,可以直接安装python包,通过pip安装新包。

1. Anaconda和miniconda的选择

1.1 如果符合以下条件,请选择Anaconda:🐍

  • conda或Python新手
  • 倾向于方便性,一次性自动安装配置好Python和超过1500个科学包
  • 有点悠闲时间和磁盘空间 - 十几分钟和最少3GB(本人3个虚拟环境,17G)
  • 不想麻烦每次手动安装需要的包
  • 希望使用官方审查过操作性与可用性的包

1.2 如果符合以下条件,请选择miniconda:

  • 不介意每次手动安装需要的包
  • 没有时间与空间一次安装完所有的包
  • 想快速上手使用Python和conda,喜欢自己定制软件的过程

栈的应用(python):前缀表达式 <- 中缀表达式 -> 后缀表达式

1. 栈的实现

可使用列表,按自己的方式实现栈的数据结构。类的方法可以实现栈的基本操作。

既然是用列表实现的,可以创造一些方便的方法比如__repr__以方便查看栈的内容。

class Stack():
    def __init__(self):            # 使用空列表初始化栈
        self.items = []

    def isEmpty(self):             # 查看栈是否为空
        return self.items == []

    def push(self, item):          # 入栈基操
        self.items.append(item)

    def pop(self):                 # 出栈基操
        return self.items.pop()

    def peek(self):                # 查看栈顶元素
        return self.items[len(self.items) - 1]

    def __len__(self):             # 使用列表特性,返回栈的长度
        return len(self.items)

    def __getitem__(self, n):      # 使用列表特性,获取栈元素
        return self.items[n]

    def __repr__(self):            # 使用列表特性,打印栈内容
        if self.items:
            return str(self.items)
        else:
            return 'None'

2. 前缀表达式 <- 中缀表达式 -> 后缀表达式

  • 中缀表达式: 人类通常使用的表达式,易于人的理解
  • 前缀表达式: 计算机通常使用的表达式,易于机器理解与执行
  • 后缀表达式: 同上。

要理解这三种表达式,可以通过以下实例理解:

中缀表达式 前缀表达式 后缀表达式
A + B + A B A B +
A + B - C - + A B C A B + C -
A + B * C + A * B C A B C * +
(A + B) * C * + A B C A B + C *
A + B * C - D - + A * B C D A B C * + D -
(A + B) * (C - D) * + A B - C D A B + C D - *
A * B + C / D + * A B / C D A B * C D / +
A + B - C + D + - + A B C D A B + C - D +

使用pathlib替换os/os.path/glob

总结

从Python3.6开始,pathlib.Path 对象几乎可以在任何已经使用路径字符串的地方工作。因此,如果你使用的是Python3.6(或更高版本),我认为没有理由不使用 pathlib。

pathlib可以把以前比较繁复的路径工作处理得更简洁一点,请好好使用。

如果需要操作路径,在python3.6以前会经常使用os模块(mkdir、getcwd、chmod、stat、remove、rename 、rmdir、 chdir......)。现在比较推荐使用pathlib。pathlib模块用 path 对象上的方法替换了许多这些与文件系统相关的 os功能。

以下分段展示两个代码的不同实现方式,可以看出pathlib更简洁高效。

1. 新建文件夹与重命名

import os
import os.path

#创建了first/second目录
os.makedirs(os.path.join('first', 'sencond'), exist_ok=True)
#将 sau.txt 文件重命名为 first/sau.txt.bak,并移到first目录下
os.rename('sau.txt', os.path.join('first', 'sau.txt.bak'))

使用 Path 对象执行相同的操作,由于采用链式调用的方法,pathlib 代码将路径放在第一位。

from pathlib import Path

Path('first/second').mkdir(parents=True, exist_ok=True)

前提是移动目的地的文件结构要已经存在,rename不会给你在移动过程中新建文件结构。

from pathlib import Path

Path('sau.txt').rename('src/sau.txt.bak')

calculus_with_python

本书来源 实际上去gitbook阅读体验会更好,只是有时网速会慢。 由于epub格式公式显示全是乱的,就整理了一下输出PDF以便阅读。 整理好的PDF下载


关于

谨以此书献给我亲爱的家人

Python部分利用到了Numpy,Matplotlib,Sympy等Library。

建议新手安装Enthought的 Canopy Python Distribution ,本书中用到的Library就都满足了。

推荐的函数库调用方法:

import numpy as np

import matplotlib.pyplot as plt

import sympy


第一部分 单元微积分

函数

我们可以将 函数(functions) 想象成一台机器\(f\),每当我们向机器提供输入\(x\),这台机器便会产生输出\(f(x)\)

这台机器所能接受的所有输入的集合称为 定义域(domain) ,其所有可能输出的集合称为 值域(range) 。函数的定义域和值域有着非常重要的意义,如果我们知道一个函数的定义域,便不会将不合适的输入丢给函数;知道函数的值域,便能判断一个值是否可能是这个函数所输出的。

一些函数的例子

1. 多项式(polynomials) :

\[f(x)=x^3-5x^2+9\]

因为这是一个三次函数,当\(x\to -\infty\)\(f(x) \to -\infty\);当\(x\to \infty\)\(f(x)\to \infty\),因此这个函数的定义域和值域都是实属集\(\mathbb{R}\)

遇到百分百的女孩

村上春树 3 (1)

  1. 👹 Haruki Murakami (born January 12, 1949, Kyōto, Japan) is a Japanese novelist, short-story writer, and translator whose deeply imaginative and often ambiguous books became international bestsellers.
Month of may 2


Not suprise

This was sounds from ur right airpods pro, the left one is broken (1)

  1. To fix 1 broken airpods pro, needed ¥140 (1),which I can not afforded.

    1. Yes, Chinese Yuan

In case you're curious™

Go home if you're tired ®

四月一个晴朗的早晨,我在原宿后街同一个百分之百的女孩擦肩而过。

不讳地说,女孩算不得怎么漂亮,并无吸引人之处,衣着也不出众,脑后的头发执着地带有睡觉挤压的痕迹。年龄也已不小了- -应该快有30了。严格地说来,恐怕很难称之为女孩。然而,相距50米开外我便一眼看出:对于我来说,她是个百分之百的女孩。从看见她身姿的那一瞬间,我的胸口便如发生地鸣一般的震颤,口中如沙漠干得沙沙作响。

Gonna make a record in the month of May

In the month of May, in the month of May

Gonna make a record in the month of May

When the violent wind blows the wires away

Gonna make a record in the __month of May__{.blue}

In the month of May, in the __month of May__

Gonna make a record in the __month of May__

*When the violent wind blows the wires away*

或许你也有你的理想女孩。例如喜欢足颈细弱的女孩,毕竟眼睛大的女孩,十指绝对好看的女孩,或不明所以地迷上慢慢花时间进食的女孩。我当然有自己的偏爱。在饭店时就曾看邻桌一个女孩的鼻形看得发呆。

Atrribute Rank
Weak foot and neck
Big eyes
Good-looking fingers
Eating slowly
Shape of nose

但要明确勾勒百分之百的女孩形象,任何人都无法做到。我就绝对想不起她长有怎样的鼻子。甚至是否有鼻子都已记不真切,现在我所能记的,只有她并非十分漂亮这一点。事情也真是不可思议。

“昨天在路上同一个百分之百的女孩擦肩而过。”我对一个人说。

“唔,”他应道,“人可漂亮?”

“不,不是说这个。”

“那,是合你口味那种类型喽?”

“记不得了。眼睛什么样啦,胸部是大是小啦,统统忘得一干二净。”

“莫名其妙啊!”

“是莫名其妙。”

“那么,”他显得兴味索然,“你做什么了?搭话了?还是跟踪了?”

“什么都没有做。”我说,“仅仅是擦肩而过。”

sequenceDiagram
    autonumber
    title: Me talk to stranger
    participant Haruki Murakami
    participant Stranger
    Haruki Murakami->>Stranger: I passed by a 100% girl on the street yesterday.
    Stranger-->>Haruki Murakami: Well, is she pretty?
    Haruki Murakami->>Stranger: No, not that.
    Stranger-->>Haruki Murakami: Then, is she your type?
    Haruki Murakami->>Stranger: I don't remember.I forgot everything, <br>such as what the eyes looked like and whether the breasts were big or small.
    Stranger-->>Haruki Murakami: What the hell!
    Haruki Murakami->>Stranger: Yep, WTH.
    Stranger-->>Haruki Murakami: Then, 
    loop 
        Stranger ->> Stranger: Boring~
    end
    Stranger-->>Haruki Murakami: What did you do? Did you flirt with her? Or did you fellow her?
    Haruki Murakami->>Stranger: Nothing, just passed by.

她由东往西走,我从西向东去,在四月里一个神清气爽的早晨。1

Month of May, it's a violent thing

In the city their hearts start to sing

Well, some people sing,

It sounds like they're screaming

Used to doubt it

But now I believe it

我想和她说话,哪怕30分钟也好。想打听她的身世,也想全盘托出自己的身世。而更重要的,是想弄清导致 19814 月一个晴朗的早晨我们在原宿后街擦肩而过这一命运的原委。里面肯定充满和平时代的古老机器般温馨的秘密。

如此谈罢,我们可以找地方吃午饭,看伍迪·爱伦的影片,再顺路到宾馆里的酒吧喝鸡尾酒什么的。弄得好,喝完说不定能同她睡上一觉。

可能性在扣击我的心扉。

我和她之间的距离以近至十五六米了。

问题是,我到底该如何向她搭话呢?

  • SILLY


    Hello! Can you talk to me? Even for 30 minutes.

  • SILLY2


    Excuse me, is there any laundromat open 24 hours in this area?

  • STRAIGHT


    Hello! You are the perfect girl for me!

“你好!和我说说话可以吗?哪怕30分钟也好。”

过于傻气,简直象劝人加入保险。

“请问,这一带有24小时营业的洗衣店吗?”

这也同样傻里傻气。何况我岂非连洗衣袋都没带!有谁能相信我的道白呢?

也许开门见山好些。“你好!你对我可是百分之百的女孩哟!”

不,不成,她恐怕不会相信我的表白。纵然相信,也未必愿同我说什么话。她可能这样说:即便我对你是百分之百的女孩,你对我可不是百分之百的男人,抱歉!而这是大有可能的。假如陷入这般境地,我肯定全然不知所措。这一打击说不定使我一蹶不振。我已32岁,所谓上年纪归根结底便是这么一回事。

我是在花店门前和她擦肩而过的,那暖暖的小小的气块儿触到我的肌肤。柏油路面洒了水,周围荡漾着玫瑰花香。连向她打声招呼我都未能做到。她身穿白毛衣,右手拿一个尚未贴邮票的四方信封。她给谁写了封信。那般睡眼惺忪,说不定整整写了一个晚上。那四方信封里有可能装有她的全部秘密。

Image title 走几步回头时,她的身影早已消失在人群中。



当然,今天我已完全清楚当时应怎样向她搭话。但不管怎么说,那道白实在太长,我笃定表达不好――就是这样,我所想到的每每不够实用。

总之,道白自“很久很久以前”开始,而以“你不觉得这是个忧伤的故事吗”结束。

  • Month of May, everybody's in love
  • Then the city was hit from above
  • And just when I knew what I wanted to say
  • A violent wind blew the wires away
  • We were shocked in the suburbs

很久很久以前,有个地方有一个少男和一个少女。少男18,少女16。少男算不得英俊,少女也不怎么漂亮,无非随处可见的孤独而平常的少男少女。但两人一直坚信世上某个地方一定存在百分之百适合自己的少女和少男。是的,两人相信奇迹,而奇迹果真发生了。

一天两人在街头不期而遇。

“真巧!我一直在寻找你。也许你不相信,你对我是百分之百的男孩。从头到脚跟我想象的一模一样。简直是在做梦。”

两人坐在公园长椅上,手拉手,百谈不厌。两人已不再孤独。百分之百需求对方,百分之百已被对方需求。而百分之百需求对方和百分之百地被对方需求是何等美妙的事情啊!这已是宇宙奇迹!

Now the kids are all standing with their arms folded tight

Kids are all standing with their arms folded tight

Well, some things are pure and some things are right

But the kids are still standing with their arms folded tight

I said some things are pure and some things are right

But the kids are still standing with their arms folded tight

Equation of love

\[ \begin{aligned} e^{i\pi}+1&=0 \\ 1&= -e^{i\pi} \\ 100 \% &= -e^{i\pi} \end{aligned} \]

但两人心中掠过一个小小的,的确小而又小的疑虑:梦想如此轻易成真是否就是好事?

交谈突然中断时,少男这样说道:

“我说,再尝试一次吧!如果我们两人真是一对百分之百的恋人的话,肯定还会有一天在哪里相遇。下次相遇时如果仍觉得对方百分之百,就马上在那里结婚,好么?”

“好的。”少女回答。

于是两人分开,各奔东西。

So young, so young,

So much pain for someone so young, well

I know it's heavy, I know it ain't light

But how you gonna lift it with your arms folded tight?

First they built the road, then they built the town

That's why we're still driving around

And around

然而说实在话,根本没有必要尝试,纯属多此一举。为什么呢?因为两人的的确确是一对百分之百的恋人,因为那是奇迹般的邂逅。但两人过于年轻,没办法知道这许多。于是无情的命运开始捉弄两人。

一年冬天,两人都染上了那年肆虐的恶性流感。在死亡线徘徊几个星期后,过去的记忆丧失殆尽。事情也真是离奇。当两人睁眼醒来时,脑袋里犹如D·H劳伦斯少年时代的贮币盒一样空空如也。

但这对青年男女毕竟聪颖豁达且极有毅力,经过不懈努力,终于再度获得了新的知识新的情感,胜任愉快地重返社会生活。啊,我的上帝!这两人真是无可挑剔!他们完全能够换乘地铁,能够在邮局寄交快信了。并且分别体验了百分之七十五和百分之八十五的恋爱。

如此一来二去,少男32,少女31岁了。时光以惊人的速度流逝。

四月一个晴朗的早晨,少男为喝折价早咖啡沿原宿后街由西向东走,少女为买快信邮票沿同一条街由东向西去,两人恰在路中间失之交臂。失却的记忆的微光刹那间照亮两颗心。两人胸口陡然悸颤,并且得知:

她对我是百分之百的女孩。

他对我是百分之百的男孩。

然而两人记忆的烛光委实过于微弱,两人的话语也不似十四年前那般清晰。结果连句话也没说便擦身而过,径直消失在人群中,永远永远。

Two-thousand nine, two-thousand ten Wanna make a record how I felt then When we stood outside in the month of May And watched the violent wind blow the wires away If I die in the month of May Let the wind take my body away, yeah I wish I may, I wish I might Don't lay me down there with my arms folded tight

你不觉得这是个令人感伤的故事么?

是的,我本该这样向她搭话。

Start again in the month of May

Start again in the month of May

Come on and blow the wires away

Come on and blow the wires away x 2

Start again in the month of May

Start again in the month of May

Come on and blow the wires away

Come on and blow the wires x 2 away


  1. April was not a good Month. 

  2. Arcade Fire 

  3. 👹 Haruki Murakami (born January 12, 1949, Kyōto, Japan) is a Japanese novelist, short-story writer, and translator whose deeply imaginative and often ambiguous books became international bestsellers. 

Grasshopper从0开始

  • Grasshopper命令巨多,安装几个插件以后让你真正领会一下什么叫眼花缭乱。 在canvas上写好的程序上,如果想找一个电池是从哪里来的,可以按CTRL+ALT,同时鼠标点住想显示位置的电池,会有几个很Q的红色指示告诉你这个电池的位置。 红色箭头
  • 输入输出参数可变的电池,如果需要多加输入/输出,不断放大电池,就可以看到+号了。

cairosvg安装配置与批量转换svg to png

Gitee这几天发现个问题,文章里引用的SVG图片全部解析不出来。不好看不舒服。需要把SVG图片全转换成PNG图片再上传。发现cairosvg可以做这个事,安装配置不是那么简单。

1. 安装cairosvg

conda里默认的channel里并没有cairosvg,后面发现conda-forge里有。

conda config --add channels conda-forge     # 添加conda-forge源
conda install cairosvg                      # 安装主包
conda install cairo                         # 安装库

2. 安装DLL依赖

3. 程序细节

程序很简单了,就是进入文件夹,迭代。把文件放入SVG文件夹同目录下,运行就OK了。

import cairosvg
from pathlib import Path


def Svg2Png():
    SrcDir = Path('.').resolve()
    SvgList = [svg for svg in SrcDir.iterdir() if svg.suffix == ".svg"]
    for svgFile in SvgList:
        pngFile = svgFile.with_suffix(".png")
        if not pngFile.is_file():
            cairosvg.svg2png(url=str(svgFile), write_to=str(pngFile), scale=3)


Svg2Png()

4. 批量替换文件后缀

post里搜索替换所有.svg.png