博客搭建完成后,我开始考虑使用图床,了解当下主流图床平台的过程中,在 Linux.do 论坛发现了免费图片托管解决方案,基于 Cloudflare Pages 和 Telegram,支持 Telegram Bot 存储渠道和 Cloudflare R2 存储渠道,在 GitHub 上有详细的教程。由于开通 Cloudflare R2 存储桶需要绑定支付方式,我手上暂时没有可用信用卡,因此只实现了 Telegram Bot 存储渠道。
功能介绍
支持绝大多数常见图片、视频、动图等
支持 Telegram Bot, Cloudflare R2 等多种存储渠道一键切换
支持自定义压缩质量,自定义开启前后端压缩功能
支持 MarkDown、HTML、BBCode 和原始链接四种格式复制
支持身份认证、防滥用
页面背景支持单图、自定义多图轮播、bing 随机图轮播等多种模式
自定义图床名称和 Logo
自定义网站标题和 Icon
无限图片储存数量,你可以上传不限数量的图片
无需购买服务器,托管于 Cloudflare 的网络上,当使用量不超过 Cloudflare 的免费额度时,完全免费
无需购 ...
编程学习
未读Python 装饰器(Decorator)是一种允许在不修改函数或方法代码的情况下,动态地为其添加额外功能的设计模式。装饰器常用于对函数的输入或输出进行处理、增加日志记录、性能监控、访问控制等。理解装饰器的关键在于理解 Python 函数是“第一类对象”(First-class objects),即函数可以作为参数传递,也可以作为返回值返回。
1. 基本原理装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数(可以是原函数或修改后的函数)。这个新函数通常包含了附加的功能逻辑。
12345678910111213def decorator_function(original_function): def wrapper_function(*args, **kwargs): # 在原函数执行前可以添加一些操作 print("Before executing the function.") result = original_function(*args, **kwargs) ...
一、安装环境依赖1. 安装环境依赖:1yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
2. 安装 gcc 编译器(有可能已经安装)1yum install gcc -y
二、安装 Python3以 Python3.7 为例讲解。
1. 下载 Python 安装包1wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
因为下载很慢,所以可以在本地通过更快的方式下载后再上传到服务器。
2. 将安装包移动到 /usr/local 文件夹下1mv Python-3.7.4.tgz /usr/local/
3. 在 local 目录下创建 Python3 目录1mkdir /usr/local/python3
4. 进入的 Python 安装包压缩包所在的目录1cd /usr ...
实战开发
未读报错信息
Failed to connect to github.com port 443
解决方案
修改 DNS 为: 114.114.114.114
修改代理
编程学习
未读12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import pandas as pdimport requestsfrom bs4 import BeautifulSoup''' 练习爬取豆瓣电影排名 top250'''# 定义一个空列表,用来存储电影信息movies = []# 定义请求头,否则请求会返回 418headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}# 每页25条for i in range(0, 250, 25): # 定义爬虫的目标网址 ...
变量变量定义的标准格式为:变量声明以关键字 var 开头,后置变量类型,行尾不加分号。
123456789101112//var 变量名 变量类型var name type// go 语言支持同时定义多个相同类型的变量// var 变量名1 变量名2 变量类型var name1 name2 type// 批量定义变量var ( name string age int)
当一个变量被声明之后,如果没有显式的给它赋值,系统自动赋予它该类型的零值:
类型
默认值
整型
0
浮点型
0.0
字符串
空字符串
布尔型
false
切片、函数、指针变量
nil
变量初始化短变量声明并初始化:(只能使用在函数内部)
123456789101112package mainimport "fmt"func main() {// := 自动推导 name := "jack" age := 18 fmt.Println(name, age) // 打印变量类型 fmt.Printf("%T,%T", ...
this可以用来修饰或调用属性、方法、构造器
this修饰属性和方法时this理解为:当前对象或者当前正在创建的对象(this.表示先在本类中查找,找不到再去父类找)
在类的方法中,我们可以使用”this.属性”或”this.方法”的方式,调用当前对象属性或方法。但是通常情况下,我们都选择省略”this.”。特殊情况下,如果方法的形参和类的属性同名时(例如set方法),我们必须显式的使用”this.变量”的方式,表明此变量是属性,而非形参。
在类的构造器中,我们可以使用”this.属性”或”this.方法”的方式,调用当前正在创建的对象属性或方法。但是通常情况下,我们都选择省略”this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用”this.变量”的方式,表明此变量是属性,而非形参。
this调用构造器时我们在类的构造器中,可以显式的使用”this(形参列表)”的方式,调用本类中指定的其他构造器;
构造器中不能通过”this(形参列表)”的方式调用自己;
如果一个类中有n个构造器,则最多有n-1个构造器中使用了”this(形参列表)”,至少1个使用”super( ...
编程学习
未读静态方法调用直接 类名.方法名 调用
非静态方法调用需要实例化对应的类来调用
注意事项
因为static和非static类型的方法加载时间不同,因此static类型的方法无法调用非static类型的方法或属性
创建了类的多个对象后,多个对象共享同一个静态变量;当某一个对象修改了该静态变量后,会导致其他对象再调用该静态变量时,是修改过的。(在修改之前调用静态变量则是修改之前的值)
static方法中,不能使用this、super关键字
static类型的结构随着类的加载而加载
静态结构前没有声明的都是省略的 “类名.”
编程学习
未读如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口。
我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。
在 java.util.function 包下定义了Java 8 的丰富的函数式接口
Java从诞生日起就是一直倡导“一切皆对象”,在 Java 里面面向对象(OOP)编程是一切。但是随着 python、scala 等语言的兴起和新技术的挑战,Java 不得不做出调整以便支持更加广泛的技术要求,也即 java 不但可以支持 OOP 还可以支持 OOF(面向函数编程)
在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda 表达式的类型是函数。但是在 Java8 中,有所不同。在 Java8 中,Lambda 表达式是对象,而不是函数,它们必须依附于一类特别的对象类型——函数式接口。
简单的说,在 Java8 中,Lambda 表达式就是一个函数式接口的实例。这就是 Lambda 表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 La ...
