commit 79f15c2b1692e559f4a5bbddc3bed88c9c15e20e
Author: Ryan6981 <995559618@qq.com>
Date: Fri Aug 2 08:24:28 2024 +0800
up
diff --git a/Anytype.20240802.082116.32/.md b/Anytype.20240802.082116.32/.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/01-tech-notes.md b/Anytype.20240802.082116.32/01-tech-notes.md
new file mode 100644
index 0000000..0a6662b
--- /dev/null
+++ b/Anytype.20240802.082116.32/01-tech-notes.md
@@ -0,0 +1,24 @@
+# 01-Tech Notes
+
+
+
+
+# 编程语言技术
+
+- python [Python 集](python_x.md)
+- Rust [Rust 集](rust.md)
+
+
+
+Lua语言
+Kotlin语言
+Mojo语言
+Julia语言
+Nim语言
+Autoit脚本
+Vlang语言
+Autojs脚本
+技术相关常用工具 [03001-Docker](03001-docker.md)
+
+
+
diff --git a/Anytype.20240802.082116.32/01001-python.md b/Anytype.20240802.082116.32/01001-python.md
new file mode 100644
index 0000000..9fecb14
--- /dev/null
+++ b/Anytype.20240802.082116.32/01001-python.md
@@ -0,0 +1,35 @@
+# 01001-Python
+### Python基础及相关技术知识
+### -01\_py用法查询笔记 \| [py\_qnotes](py_qnotes.md)
+### -02\_20个非常有用的 Python 单行代码 \| [python\_20code](python_20code_i.md)
+### -03\_Py示例随记\| [RNlist](rnlist.md)
+### -04\_68个Py内置函数\| [68fun](68fun.md)
+### -05\_Dash及Py虚拟环境搭建 \| [Dash](dash.md) [Conda虚拟环境搭建](condaxu-ni-huan-jing-da-jian.md)
+### -06\_Py练习 \| [Pylen](pylen.md)
+
+[Python 集](python_x.md)
+### 虚拟环境搭建
+[Miniforge下载](https://mirrors4.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/Release%2024.3.0-0/)
+```
+虚拟环境安装:
+如:bash Miniforge3-24.3.0-0-Linux-x86_64.sh
+
+#进入容器
+docker exec -it fda199c418cc /bin/bash
+
+
+#启动终端编辑器helix,保存布局
+ x zellij attach de_rustings
+
+ x zellij --layout de_rustings.kdl
+
+
+
+#虚拟环境激活
+#miniforge3 虚拟环境相关命令
+mamba env list
+mamba create -n pytest-dev python=3.8 -y
+mamba activate pytest-dev
+
+
+```
diff --git a/Anytype.20240802.082116.32/01002-rust.md b/Anytype.20240802.082116.32/01002-rust.md
new file mode 100644
index 0000000..b1db38a
--- /dev/null
+++ b/Anytype.20240802.082116.32/01002-rust.md
@@ -0,0 +1,9 @@
+# 01002-Rust
+-
+-
+- 01-Rust\_notes
+- 02-Linux下超轻量级Rust开发环境搭建
+
+
+[Rust\_notes](rust_notes.md)
+
diff --git a/Anytype.20240802.082116.32/02-life-notes.md b/Anytype.20240802.082116.32/02-life-notes.md
new file mode 100644
index 0000000..2b0a155
--- /dev/null
+++ b/Anytype.20240802.082116.32/02-life-notes.md
@@ -0,0 +1,2 @@
+# 02-Life Notes
+
diff --git a/Anytype.20240802.082116.32/02001-study.md b/Anytype.20240802.082116.32/02001-study.md
new file mode 100644
index 0000000..ed8286c
--- /dev/null
+++ b/Anytype.20240802.082116.32/02001-study.md
@@ -0,0 +1,2 @@
+# 02001 -Study
+
diff --git a/Anytype.20240802.082116.32/02002-reading-notes.md b/Anytype.20240802.082116.32/02002-reading-notes.md
new file mode 100644
index 0000000..335794c
--- /dev/null
+++ b/Anytype.20240802.082116.32/02002-reading-notes.md
@@ -0,0 +1,2 @@
+# 02002-Reading Notes
+
diff --git a/Anytype.20240802.082116.32/02003-soft.md b/Anytype.20240802.082116.32/02003-soft.md
new file mode 100644
index 0000000..606d3be
--- /dev/null
+++ b/Anytype.20240802.082116.32/02003-soft.md
@@ -0,0 +1,2 @@
+# 02003-Soft
+
diff --git a/Anytype.20240802.082116.32/03-tools.md b/Anytype.20240802.082116.32/03-tools.md
new file mode 100644
index 0000000..1219a67
--- /dev/null
+++ b/Anytype.20240802.082116.32/03-tools.md
@@ -0,0 +1,2 @@
+# 03-Tools
+
diff --git a/Anytype.20240802.082116.32/03001-docker.md b/Anytype.20240802.082116.32/03001-docker.md
new file mode 100644
index 0000000..3acd40e
--- /dev/null
+++ b/Anytype.20240802.082116.32/03001-docker.md
@@ -0,0 +1,17 @@
+# 03001-Docker
+- [Docker容器常用命令](dockerrong-qi-chang-yong-ming-ling.md)
+- [Docker基础知识](dockerji-chu-zhi-shi.md)
+
+
+
+
+## 应对Docker停服后的解决方案:
+
+- [https://zhuanlan.zhihu.com/p/629169129](https://zhuanlan.zhihu.com/p/629169129)
+
+
+- [https://github.com/tech-shrimp/docker\_installer](https://github.com/tech-shrimp/docker_installer)
+
+
+
+
diff --git a/Anytype.20240802.082116.32/04-temp-later.md b/Anytype.20240802.082116.32/04-temp-later.md
new file mode 100644
index 0000000..48376da
--- /dev/null
+++ b/Anytype.20240802.082116.32/04-temp-later.md
@@ -0,0 +1,2 @@
+# 04-Temp Later
+
diff --git a/Anytype.20240802.082116.32/04-temp-later_f.md b/Anytype.20240802.082116.32/04-temp-later_f.md
new file mode 100644
index 0000000..48376da
--- /dev/null
+++ b/Anytype.20240802.082116.32/04-temp-later_f.md
@@ -0,0 +1,2 @@
+# 04-Temp Later
+
diff --git a/Anytype.20240802.082116.32/68fun.md b/Anytype.20240802.082116.32/68fun.md
new file mode 100644
index 0000000..a7980ef
--- /dev/null
+++ b/Anytype.20240802.082116.32/68fun.md
@@ -0,0 +1,344 @@
+# 68fun
+# 68个Python内置函数
+```
+
+
+原创 华安9527 测试开发学习交流 2023-07-13 07:00 发表于浙江
+图片
+
+Python是一种非常流行的编程语言,其内置的函数库也很强大。本文将介绍Python内置函数库中的68个常用函数,并提供相应的代码示例。这些函数涵盖了Python中常见的数据类型、字符串、列表、字典、元组、集合、文件操作以及其他常用功能。下面分别进行介绍:
+
+https://mp.weixin.qq.com/s/X74Pd6YPMf8H832UOWNlYw
+
+数字函数
+
+
+### abs()
+用于返回一个数的绝对值。
+a = -5
+print(abs(a)) # 5
+
+### divmod()
+用于取两个数的商和余数。
+a, b = 10, 3
+print(divmod(a, b)) # (3, 1)
+
+### pow()
+用于计算一个数的幂。
+a, b = 2, 3
+print(pow(a, b)) # 8
+
+### round()
+用于对一个数进行四舍五入。
+a = 2.8
+print(round(a)) # 3
+
+图片
+
+字符串函数
+
+
+### chr()
+用于将ASCII码转换为对应的字符。
+print(chr(97)) # 'a'
+
+### ord()
+用于将一个字符转换为它的ASCII码。
+print(ord('a')) # 97
+
+### len()
+用于返回一个字符串的长度。
+s = 'hello world'
+print(len(s)) # 11
+
+### str()
+用于将其他类型的数据转换为字符串类型。
+a = 123
+print(str(a)) # '123'
+### capitalize()
+用于将字符串的第一个字符转换为大写。
+s = 'hello world'
+print(s.capitalize()) # 'Hello world'
+### lower()
+用于将字符串中的所有字符都转换为小写。
+s = 'Hello World'
+print(s.lower()) # 'hello world'
+### upper()
+用于将字符串中的所有字符都转换为大写。
+s = 'Hello World'
+print(s.upper()) # 'HELLO WORLD'
+### swapcase()
+用于将字符串中的大小写字母互换。
+s = 'Hello World'
+print(s.swapcase()) # 'hELLO wORLD'
+### title()
+用于将字符串中每个单词的首字母转换为大写。
+s = 'hello world'
+print(s.title()) # 'Hello World'
+### strip()
+用于去除字符串的开头和结尾的空格或者指定字符。
+s = ' hello world '
+print(s.strip()) # 'hello world'
+### replace()
+用于将字符串中的指定字符替换为指定的字符。
+s = 'hello world'
+print(s.replace('l', 'i')) # 'heiioworid'
+### split()
+用于将字符串按照指定的字符分割为多个子串。
+s = 'hello,world'
+print(s.split(',')) # ['hello', 'world']
+### join()
+用于将多个字符串连接成一个字符串。
+lst = ['hello', 'world']
+print('-'.join(lst)) # 'hello-world'
+
+
+列表函数
+
+
+### len()
+用于返回一个列表的长度。
+lst = [1, 2, 3, 4, 5]
+print(len(lst)) # 5
+
+### max()
+用于返回一个列表中的最大值。
+lst = [1, 2, 3, 4, 5]
+print(max(lst)) # 5
+### min()
+用于返回一个列表中的最小值。
+lst = [1, 2, 3, 4, 5]
+print(min(lst)) # 1
+
+### sum()
+用于返回一个列表中所有元素的和。
+lst = [1, 2, 3, 4, 5]
+print(sum(lst)) # 15
+
+### sorted()
+用于对一个列表进行排序。
+lst = [3, 1, 4, 2, 5]
+print(sorted(lst)) # [1, 2, 3, 4, 5]
+### reversed()
+用于反转一个列表中的元素。
+lst = [1, 2, 3, 4, 5]
+print(list(reversed(lst))) # [5, 4, 3, 2, 1]
+### list()
+用于将其他类型的数据转换为列表类型。
+t = (1, 2, 3)
+print(list(t)) # [1, 2, 3]
+
+### append()
+用于在一个列表的末尾添加一个元素。
+lst = [1, 2, 3]
+lst.append(4)
+print(lst) # [1, 2, 3, 4]
+### insert()
+用于在一个列表的指定位置插入一个元素。
+lst = [1, 2, 3]
+lst.insert(1, 4)
+print(lst) # [1, 4, 2, 3]
+### remove()
+用于删除一个列表中的指定元素。
+lst = [1, 2, 3]
+lst.remove(2)
+print(lst) # [1, 3]
+### pop()
+用于从一个列表的末尾删除一个元素并返回该元素。
+lst = [1, 2, 3]
+print(lst.pop()) # 3
+print(lst) # [1, 2]
+### extend()
+用于将一个列表中的元素添加到另一个列表的末尾。
+lst1 = [1, 2, 3]
+lst2 = [4, 5, 6]
+lst1.extend(lst2)
+print(lst1) # [1, 2, 3, 4, 5, 6]
+### index()
+用于返回一个元素在列表中首次出现的位置。
+lst = [1, 2, 3, 4, 5]
+print(lst.index(3)) # 2
+### count()
+用于返回一个元素在列表中出现的次数。
+lst = [1, 2, 2, 3, 3, 3]
+print(lst.count(2)) # 2
+
+
+
+字典函数
+
+
+### len()
+用于返回一个字典中键值对的个数。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(len(d)) # 3
+
+### keys()
+用于返回一个字典中所有的键。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(d.keys()) # dict_keys(['a', 'b', 'c'])
+### values()
+用于返回一个字典中所有的值。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(d.values()) # dict_values([1, 2, 3])
+
+### items()
+用于返回一个字典中所有的键值对。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(d.items()) # dict_items([('a', 1), ('b', 2), ('c', 3)])
+### get()
+用于返回一个字典中指定键的值,如果键不存在则返回默认值。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(d.get('a')) # 1
+print(d.get('d', 0)) # 0
+
+### pop()
+用于从一个字典中删除指定键并返回对应的值。
+d = {'a': 1, 'b': 2, 'c': 3}
+print(d.pop('b')) # 2
+print(d) # {'a': 1, 'c': 3}
+
+### update()
+用于将一个字典中的键值对更新到另一个字典中。
+d1 = {'a': 1, 'b': 2}
+d2 = {'b': 3, 'c': 4}
+d1.update(d2)
+print(d1) # {'a': 1, 'b': 3, 'c': 4}
+
+
+
+元组函数
+
+
+### len()
+用于返回一个元组中元素的个数。
+t = (1, 2, 3)
+print(len(t)) # 3
+
+### max()
+用于返回一个元组中的最大值。
+t = (1, 2, 3)
+print(max(t)) # 3
+
+### min()
+用于返回一个元组中的最小值。
+t = (1, 2, 3)
+print(min(t)) # 1
+
+### tuple()
+用于将其他类型的数据转换为元组类型。
+lst = [1, 2, 3]
+print(tuple(lst)) # (1, 2, 3)
+
+
+
+集合函数
+
+
+### len()
+用于返回一个集合中元素的个数。
+s = {1, 2, 3}
+print(len(s)) # 3
+
+### max()
+用于返回一个集合中的最大值。
+s = {1, 2, 3}
+print(max(s)) # 3
+
+### min()
+用于返回一个集合中的最小值。
+s = {1, 2, 3}
+print(min(s)) # 1
+
+### set()
+用于将其他类型的数据转换为集合类型。
+lst = [1, 2, 3]
+print(set(lst)) # {1, 2, 3}
+
+### add()
+用于向集合中添加一个元素。
+s = {1, 2, 3}
+s.add(4)
+print(s) # {1, 2, 3, 4}
+
+### remove()
+用于从集合中删除一个元素。
+s = {1, 2, 3}
+s.remove(2)
+print(s) # {1, 3}
+
+
+
+文件操作函数
+
+
+### open()
+用于打开一个文件并返回文件对象。
+f = open('test.txt', 'r')
+
+### close()
+用于关闭一个已打开的文件。
+f.close()
+
+### read()
+用于读取一个文件中的内容。
+f = open('test.txt', 'r')
+print(f.read())
+f.close()
+
+### write()
+用于向一个文件中写入内容。
+f = open('test.txt', 'w')
+f.write('hello world\n')
+f.close()
+
+
+
+其他函数
+
+
+### isinstance()
+用于检查一个对象是否属于指定的类。
+x = 10
+print(isinstance(x, int)) # True
+
+### range()
+用于生成一个指定范围内的整数序列。
+print(list(range(5))) #
+[0, 1, 2, 3, 4]
+
+### zip()
+用于将多个序列中对应的元素打包成一个元组。
+lst1 = [1, 2, 3]
+lst2 = ['a', 'b', 'c']
+print(list(zip(lst1, lst2))) # [(1, 'a'), (2, 'b'), (3, 'c')]
+
+### map()
+用于对一个序列中的每个元素执行指定的函数。
+lst = [1, 2, 3]
+print(list(map(lambda x: x * 2, lst))) # [2, 4, 6]
+
+### filter()
+用于对一个序列中的元素进行筛选。
+lst = [1, 2, 3, 4, 5]
+print(list(filter(lambda x: x % 2 == 0, lst))) # [2, 4]
+
+### reduce()
+用于对一个序列中的元素依次执行指定的函数。
+from functools import reduce
+lst = [1, 2, 3]
+print(reduce(lambda x, y: x * y, lst)) # 6
+
+### round()
+用于对一个数进行四舍五入。
+a = 2.8
+print(round(a)) # 3
+
+### open()
+用于打开一个文件并返回文件对象。
+f = open('test.txt', 'r')
+print(f.read())
+f.close()
+
+```
+[01001-Python](01001-python.md)
diff --git a/Anytype.20240802.082116.32/_0.md b/Anytype.20240802.082116.32/_0.md
new file mode 100644
index 0000000..bac9c71
--- /dev/null
+++ b/Anytype.20240802.082116.32/_0.md
@@ -0,0 +1 @@
+
diff --git a/Anytype.20240802.082116.32/_1.md b/Anytype.20240802.082116.32/_1.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_1g.md b/Anytype.20240802.082116.32/_1g.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1g.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_1j.md b/Anytype.20240802.082116.32/_1j.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1j.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_1l.md b/Anytype.20240802.082116.32/_1l.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1l.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_1p.md b/Anytype.20240802.082116.32/_1p.md
new file mode 100644
index 0000000..bac9c71
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1p.md
@@ -0,0 +1 @@
+
diff --git a/Anytype.20240802.082116.32/_1u.md b/Anytype.20240802.082116.32/_1u.md
new file mode 100644
index 0000000..bac9c71
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1u.md
@@ -0,0 +1 @@
+
diff --git a/Anytype.20240802.082116.32/_1w.md b/Anytype.20240802.082116.32/_1w.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_1w.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_3.md b/Anytype.20240802.082116.32/_3.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_3.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_4.md b/Anytype.20240802.082116.32/_4.md
new file mode 100644
index 0000000..03bd398
--- /dev/null
+++ b/Anytype.20240802.082116.32/_4.md
@@ -0,0 +1,5 @@
+[Revin知识库](revinzhi-shi-ku_k.md)
+[RN\|Col](rn-col.md)
+[Python ](python_x.md)
+[Homepage](homepage.md)
+[Tasks](tasks.md)
diff --git a/Anytype.20240802.082116.32/_5.md b/Anytype.20240802.082116.32/_5.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_5.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_7.md b/Anytype.20240802.082116.32/_7.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_7.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_8.md b/Anytype.20240802.082116.32/_8.md
new file mode 100644
index 0000000..05cc1c4
--- /dev/null
+++ b/Anytype.20240802.082116.32/_8.md
@@ -0,0 +1,3 @@
+#
+[python ](python.md)
+
diff --git a/Anytype.20240802.082116.32/_b.md b/Anytype.20240802.082116.32/_b.md
new file mode 100644
index 0000000..1da1837
--- /dev/null
+++ b/Anytype.20240802.082116.32/_b.md
@@ -0,0 +1,2 @@
+#
+
diff --git a/Anytype.20240802.082116.32/_c.md b/Anytype.20240802.082116.32/_c.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_c.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_d.md b/Anytype.20240802.082116.32/_d.md
new file mode 100644
index 0000000..bac9c71
--- /dev/null
+++ b/Anytype.20240802.082116.32/_d.md
@@ -0,0 +1 @@
+
diff --git a/Anytype.20240802.082116.32/_e.md b/Anytype.20240802.082116.32/_e.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_e.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_g.md b/Anytype.20240802.082116.32/_g.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_g.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_k.md b/Anytype.20240802.082116.32/_k.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_k.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_l.md b/Anytype.20240802.082116.32/_l.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_l.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_n.md b/Anytype.20240802.082116.32/_n.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_n.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_u.md b/Anytype.20240802.082116.32/_u.md
new file mode 100644
index 0000000..2034292
--- /dev/null
+++ b/Anytype.20240802.082116.32/_u.md
@@ -0,0 +1 @@
+#
diff --git a/Anytype.20240802.082116.32/_v.md b/Anytype.20240802.082116.32/_v.md
new file mode 100644
index 0000000..bac9c71
--- /dev/null
+++ b/Anytype.20240802.082116.32/_v.md
@@ -0,0 +1 @@
+
diff --git a/Anytype.20240802.082116.32/added-date.md b/Anytype.20240802.082116.32/added-date.md
new file mode 100644
index 0000000..b978322
--- /dev/null
+++ b/Anytype.20240802.082116.32/added-date.md
@@ -0,0 +1 @@
+# Added date
diff --git a/Anytype.20240802.082116.32/album.md b/Anytype.20240802.082116.32/album.md
new file mode 100644
index 0000000..560a300
--- /dev/null
+++ b/Anytype.20240802.082116.32/album.md
@@ -0,0 +1 @@
+# Album
diff --git a/Anytype.20240802.082116.32/all-objects-rust-ji-python-ji.md b/Anytype.20240802.082116.32/all-objects-rust-ji-python-ji.md
new file mode 100644
index 0000000..fdbec48
--- /dev/null
+++ b/Anytype.20240802.082116.32/all-objects-rust-ji-python-ji.md
@@ -0,0 +1,4 @@
+[All Objects](all-objects.md)
+[Rust 集](rust.md)
+[Python 集](python_x.md)
+
diff --git a/Anytype.20240802.082116.32/all-objects.md b/Anytype.20240802.082116.32/all-objects.md
new file mode 100644
index 0000000..792ffaf
--- /dev/null
+++ b/Anytype.20240802.082116.32/all-objects.md
@@ -0,0 +1 @@
+# All Objects
diff --git a/Anytype.20240802.082116.32/all-objects_t.md b/Anytype.20240802.082116.32/all-objects_t.md
new file mode 100644
index 0000000..269a5fc
--- /dev/null
+++ b/Anytype.20240802.082116.32/all-objects_t.md
@@ -0,0 +1,2 @@
+# All Objects
+All my objects in one place
diff --git a/Anytype.20240802.082116.32/anytype-community.md b/Anytype.20240802.082116.32/anytype-community.md
new file mode 100644
index 0000000..42f7490
--- /dev/null
+++ b/Anytype.20240802.082116.32/anytype-community.md
@@ -0,0 +1,2 @@
+# Anytype Community
+Place to share feedback, write bug reports, and connect with Anytype users from all over the globe!
diff --git a/Anytype.20240802.082116.32/anytype-id.md b/Anytype.20240802.082116.32/anytype-id.md
new file mode 100644
index 0000000..2931956
--- /dev/null
+++ b/Anytype.20240802.082116.32/anytype-id.md
@@ -0,0 +1 @@
+# Anytype ID
diff --git a/Anytype.20240802.082116.32/anytype-identity.md b/Anytype.20240802.082116.32/anytype-identity.md
new file mode 100644
index 0000000..e74b9a7
--- /dev/null
+++ b/Anytype.20240802.082116.32/anytype-identity.md
@@ -0,0 +1 @@
+# Anytype Identity
diff --git a/Anytype.20240802.082116.32/anytype-the-everything-app.md b/Anytype.20240802.082116.32/anytype-the-everything-app.md
new file mode 100644
index 0000000..27daf99
--- /dev/null
+++ b/Anytype.20240802.082116.32/anytype-the-everything-app.md
@@ -0,0 +1,2 @@
+# anytype — the everything app
+for those who celebrate trust & autonomy.
diff --git a/Anytype.20240802.082116.32/archived.md b/Anytype.20240802.082116.32/archived.md
new file mode 100644
index 0000000..f17205f
--- /dev/null
+++ b/Anytype.20240802.082116.32/archived.md
@@ -0,0 +1 @@
+# Archived
diff --git a/Anytype.20240802.082116.32/artist.md b/Anytype.20240802.082116.32/artist.md
new file mode 100644
index 0000000..f48eef3
--- /dev/null
+++ b/Anytype.20240802.082116.32/artist.md
@@ -0,0 +1 @@
+# Artist
diff --git a/Anytype.20240802.082116.32/assignee.md b/Anytype.20240802.082116.32/assignee.md
new file mode 100644
index 0000000..fe15fb6
--- /dev/null
+++ b/Anytype.20240802.082116.32/assignee.md
@@ -0,0 +1 @@
+# Assignee
diff --git a/Anytype.20240802.082116.32/attachments.md b/Anytype.20240802.082116.32/attachments.md
new file mode 100644
index 0000000..72da831
--- /dev/null
+++ b/Anytype.20240802.082116.32/attachments.md
@@ -0,0 +1 @@
+# Attachments
diff --git a/Anytype.20240802.082116.32/audio.md b/Anytype.20240802.082116.32/audio.md
new file mode 100644
index 0000000..3e80c5f
--- /dev/null
+++ b/Anytype.20240802.082116.32/audio.md
@@ -0,0 +1 @@
+# Audio
diff --git a/Anytype.20240802.082116.32/backlinks.md b/Anytype.20240802.082116.32/backlinks.md
new file mode 100644
index 0000000..d208849
--- /dev/null
+++ b/Anytype.20240802.082116.32/backlinks.md
@@ -0,0 +1 @@
+# Backlinks
diff --git a/Anytype.20240802.082116.32/bookmark.md b/Anytype.20240802.082116.32/bookmark.md
new file mode 100644
index 0000000..2eed7c2
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmark.md
@@ -0,0 +1 @@
+# Bookmark
diff --git a/Anytype.20240802.082116.32/bookmark_d.md b/Anytype.20240802.082116.32/bookmark_d.md
new file mode 100644
index 0000000..2eed7c2
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmark_d.md
@@ -0,0 +1 @@
+# Bookmark
diff --git a/Anytype.20240802.082116.32/bookmark_n.md b/Anytype.20240802.082116.32/bookmark_n.md
new file mode 100644
index 0000000..d76343d
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmark_n.md
@@ -0,0 +1 @@
+# Bookmark
diff --git a/Anytype.20240802.082116.32/bookmark_y.md b/Anytype.20240802.082116.32/bookmark_y.md
new file mode 100644
index 0000000..d76343d
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmark_y.md
@@ -0,0 +1 @@
+# Bookmark
diff --git a/Anytype.20240802.082116.32/bookmarks.md b/Anytype.20240802.082116.32/bookmarks.md
new file mode 100644
index 0000000..c35727d
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmarks.md
@@ -0,0 +1,2 @@
+# Bookmarks
+All my Bookmarks
diff --git a/Anytype.20240802.082116.32/bookmarkscbai-ge-shou-cang.md b/Anytype.20240802.082116.32/bookmarkscbai-ge-shou-cang.md
new file mode 100644
index 0000000..4216e3f
--- /dev/null
+++ b/Anytype.20240802.082116.32/bookmarkscbai-ge-shou-cang.md
@@ -0,0 +1,222 @@
+# BookmarkSC百个收藏
+
+# 整理出上百个收藏夹的资源,
+DW python自留地 2023-10-09 07:51 发表于河南
+今天就来更新了,今天的分享和之前的有一点点不一样,主要还是内容变多了,一时半会说不清楚,先上车吧 (建议收藏阅读)↓
+软件神器
+Win软件
+
+
+
+```
+MSDN 下载微软官方系统 https://msdn.itellyou.cn/
+微软官方系统下载https://www.microsoft.com/zhcn/software-download/
+吾爱破解 是一个国内有名的软件破解的技术交流论坛,喜欢软件破解技术的朋友可以在论坛学习交流。还有精品软件区,找各种稀缺资源https://www.52pojie.cn/
+学破解论坛 学破解论坛https://www.xuepojie.com/
+卡饭论坛 卡饭论坛
+https://bbs.kafan.cn/
+423DOWN 优质软件下载https://www.423down.com/
+大眼旭仔 优质软件下载http://www.dayanzai.me/
+果核剥壳 优质软件下载https://www.ghpym.com/
+独木成林 优质软件下载https://www.avdll.com/
+懒得勤快 优质软件下载https://masuit.com/
+联合优网 优质软件下载https://www.unyoo.com/
+码课丁资源下载 软件云盘,里面整理有全面的软件资源,可直接下载优质的Win资源!https://node4.mkdmirror.workers.dev/0:/
+瓜子云盘 软件云盘https://yun.naodai.org/Software
+YAMADIE
+https://yamadie.net/
+Android
+Google Play 代理下1
+https://apkdl.in/
+Google Play 代理下2
+https://www.apkturbo.com/
+酷安网https://www.coolapk.com/
+APP2站 专注精品,崇尚绿色。https://www.z2app.com/
+翻应用 软件挺全的,更新频率也快。https://www.iapps.me/
+小米专题 MI:帮你发现最好的应用https://app.mi.com/subjectList
+自动配置海外合规应用https://www.ourplay.net/
+少数派专题https://sspai.com/topics/
+Mac
+MacWK精品软件 精品Mac应用下载https://macwk.com/
+OurMacs软件搜索 MAC精品应用https://ourmacs.com/
+威锋网 MAC社区https://www.feng.com/forum/
+MAC毒 MAC精品软件下载https://www.macdo.cn/
+脑袋瓜子 很简单的一个软件下载站https://www.naodai.org/
+精品MAC应用分享https://xclient.info/
+iOS
+AppStore 排行榜 各类软件排行https://www.qimai.cn/rank
+少数派捷径库 少数派捷径库https://shortcuts.sspai.com/
+捷径社区 内容挺全https://sharecuts.cn/
+捷径库 体验挺好的一个站点https://jiejingku.net/
+捷径盒 和捷径库很类似https://jiejinghe.com/
+奇迹秀 奇迹秀捷径推荐http://www.qijishow.com/Brand/Brand69/index.html
+影音娱乐
+在线影视
+低端影视 界面很好看,都是免费高清资源https://ddrk.me/
+梅花影视 视频清晰,页面简单https://www.meihys.com/
+片库网 高清影视资源下载https://www.pianku.li/
+YouTube 全球最大的国外视频网站https://www.youtube.com/
+优酷 优酷-这世界很酷https://www.youku.com/
+腾讯视频 腾讯视频 - 中国领先的在线视频媒体平台https://v.qq.com/
+爱奇艺 爱奇艺视频https://www.iqiyi.com/
+哔哩哔哩 bilibili是国内知名的视频弹幕网站https://www.bilibili.com/
+APP影院 优质影视站点https://app.movie/
+真不卡影院https://www.zhenbuka.com/
+菜鸟影院https://www.cncnvip.com/
+阿凡达影视 加载速度好像挺快的https://www.afandas.com/
+奈菲影视 奈菲影视,永久免费的福利超清影视站,没有套路,完全免费,最新电视剧,最新电影。https://www.nfmovies.com/
+1080影视 1080 影视为你提供免费在线观看电影,电视剧,综艺,动漫,全集,抢先观看。https://www.k1080.net/
+简影 简影,专注分享电影、美剧、韩剧、日剧、动漫、纪录片的分享型网站。https://tv.syrme.top/
+影视下载
+电影蜂蜜 电影蜜蜂为您提供高清电影资源,好看的电影推荐。在这里您可以找到世界各国好看的电影,以及各类最新电影资源,电影蜜蜂专注于高清电影下载https://www.idybee.com/
+BD影视分享 BD影视资源分享网站,本站主要提供丰富的影视资源下载,并且可以在线云播预览,上映之后三个月内发布枪版,三个月之后发布蓝光高清下载https://www.bd-film.cc/
+80S电影网 80s电影网提供最新高清 MP4 电影,电视剧,动漫下载。采用迅雷磁力链方式下载,免费手机电影电视剧就上80s电影天堂。https://www.80s.tw/
+BT部落天堂 BT部落天堂是一个注重体验与质量的影视资源下载网站,每天更新 720P、1080P,蓝光高清等电影种子资源。http://www.btbuluo.com/
+比特大熊 最新的720P、1080P高清电影BT种子下载、热门美剧BT种子下载https://www.btdx8.com/
+电影天堂1https://www.dytt8.net/index.htm
+电影搜索
+电影狗搜索 ys资源搜索站点,可检索全网资源并在线观看https://www.dianyinggou.com/
+小蛇搜搜 ys资源搜索站点,支持在线https://www.xiaoshesoso.com/
+茶杯狐 找电影神器,实时更新全网质量最高的影视资源,无论是电影、电视剧还是动漫、综艺都可以在线观看和下载。https://www.cupfox.com/
+疯狂影视搜索 挺好用的,留作备用吧http://ifkdy.com/
+Neets 站长很早之前就有用的一个站点,还是挺优质的,但稀缺资源的话,这里好像会少一点。https://neets.cc/
+在线音乐
+网易云音乐 网易云音乐搜索,最受欢迎音乐社区https://music.163.com/
+QQ音乐 QQ音乐搜索,音乐版权曲库最多最全https://y.qq.com/
+MyFreeMP3 群主很爱的一款音乐聚合神站http://tool.liumingye.cn/music/
+歌曲大全 歌曲大全,同时搜索多个主流音乐网站并提供在线试听http://www.gequdaquan.net/gqss/
+音乐搜索器 多站合一音乐搜索解决方案http://www.guqiankun.com/tools/music/
+猫耳FM 国内第一家弹幕音图站,同时也是中国声优基地https://www.missevan.com/
+音悦Tai 音乐MTV搜索,以高清MV为主的娱乐视频网站https://www.yinyuetai.com/
+PLACEBO 在线听音乐,免费下载高品质歌曲。http://music.jsososo.com/#/
+无损音乐 免费提供无损音乐下载的网站,精心挑选FLAC格式、APE格式、WAV格式优质无损音乐下载及音乐播放器免费下载https://www.ape8.cn/
+电台FM
+喜马拉雅 国内最大音频分享平台,有多档黄金节目https://www.ximalaya.com/
+蜻蜓FM 首款中文播客应用,强调于人人主播这个概念https://www.qingting.fm/
+豆瓣FM 广受好评的老牌音乐电台FMhttps://fm.douban.com/
+TingFM 传统广播音乐电台,也是就收音机,囊括了每个省市几乎都有音乐电台https://tingfm.com/
+在线办公
+在线文档
+石墨文档 文档编辑,很多人用石墨文档的原因是因为谷歌文档无法访问,谷歌文档的最佳替代https://shimo.im/
+腾讯文档 文档编辑,腾讯版谷歌文档https://docs.qq.com/
+语雀 文档编辑,阿里出品https://www.yuque.com/
+金山文档 文档编辑,国内WPS推出的多人实时协作的在线Officehttps://www.kdocs.cn/
+谷歌文档 文档编辑,在线文档编辑中最好用的,没有之一,遗憾的是不能直接访问https://docs.google.com/document/u/0/
+在线笔记
+印象笔记 工作必备效率应用https://www.yinxiang.com/
+OneNote 数字笔记记录应用https://www.microsoft.com/zh-cn/microsoft-365/onenote/digital-note-taking-app?ms.url=onenotecom&rtc=1
+有道云笔记 有道云笔记,挺好用的https://note.youdao.com/
+为知笔记 为知笔记https://www.wiz.cn/zh-cn
+notion 我也还在摸索当中,多平台同步,非常强大的一款笔记应用。https://www.notion.so/
+文档转换
+Office Converter 文档转换,可能是最强大的文档转换器,而且速度也非常快https://cn.office-converter.com/
+Convertio Office Converter一样非常的强大,还有OCR功能https://convertio.co/zh/
+AllTOAll 支持约200多种格式的文件转换,包括:视频、音频、图片、字体等多媒体文件,以及常见的office文件、PDF、电子书等文档。https://www.alltoall.net/
+Markdown编辑器
+mdnice 群主自用md编辑器https://editor.mdnice.com/
+Cmd Markdown md编辑阅读器,作业部落出品https://www.zybuluo.com/
+PDF编辑器
+SmallPDF 功能一应俱全、简单好用的线上 PDF 工具https://smallpdf.com/cn
+ILovePDF 万能PDF编辑工具,还有一个姊妹网站 iLoveIMGhttps://www.ilovepdf.com/zh-cn
+pdf.io 只有繁体中文,没有简体中文https://pdf.io/tw/
+PDF24 Tools PDF编辑,号称瑞士军刀般的PDF编辑网站https://tools.pdf24.org/zh/
+docsmall 国内服务器,有图片压缩、PDF压缩、PDF合并、PDF分割功能https://docsmall.com/
+数据收集
+问卷星 表单工具,非常受欢迎的问卷调查工具,支持多种模版https://www.wjx.cn/
+腾讯问卷 表单工具,腾讯出品,号称2亿多人在用的表单工具https://wj.qq.com/
+金数据 收集管理数据,适合市场营销、教育培训、电商、公司组织使用https://jinshuju.net/
+麦客CRM 表单工具,同时也是强大的客户信息处理和关系管理系统http://www.mikecrm.com/
+PPT
+OfficePLUS 免费,微软Office官方模板网站,提供各类PPT,Word,Excel等模版http://www.officeplus.cn/Template/Home.shtml
+优品PPT 免费,内容质量高,一个有情怀的免费PPT模板下载网站http://www.ypppt.com/
+51PPT 免费,数量较多,专注于各类PPT模版分享http://www.51pptmoban.com/ppt/
+锐普PPT 免费+付费,国内最大的PPT互动交流社区http://www.rapidbbs.cn/
+PPT宝藏 免费+付费,绝大部分是免费的,只有小部分需要付费下载http://www.pptbz.com/
+在线工具
+文件分享
+奶牛快传https://cowtransfer.com/
+蓝奏云 群主常用的一个网盘分享站点,免费且不限速https://www.lanzou.com/
+文叔叔 免费的容量为20G,不算大,体验还行。https://www.wenshushu.cn/
+PASTEBIN 代码分享https://pastebin.com/
+Ubuntu Pastebin 代码分享https://paste.ubuntu.com/
+文本分享https://note.ms/
+七牛云 国内领先的云服务商https://www.qiniu.com/
+工具箱
+一个工具箱http://www.atoolbox.net/
+爱资料在线工具https://www.toolnb.com/
+MikuTools 一个轻量的工具集合https://tools.miku.ac/
+独特工具箱https://www.dute.org/
+孟坤工具箱http://tool.mkblog.cn/
+图片编辑
+iLoveIMG 图片批量编辑https://www.iloveimg.com/zh-cn
+图片转矢量图像https://zh.vectormagic.com/
+实用工具(new)
+在线IP查询http://ip111.cn/
+设计
+设计教程
+优设-UISDC 优秀网页设计联盟https://www.uisdc.com/
+站酷设计 (站酷榜单)(热门收藏)https://www.zcool.com.cn/discover
+致设计 电商设计师交流平台https://www.zhisheji.com/
+素材图标
+Iconfont 阿里妈妈矢量图标https://www.iconfont.cn/
+EASYICON ICON(PNG/ICO/ICNS)图标搜索https://www.easyicon.net/
+Dry Icons 精度很高的图标https://dryicons.com/
+配色
+色彩配置|Adobehttps://color.adobe.com/zh/create/color-wheel/
+中国传统颜色http://zhongguose.com/
+渐变配色https://webgradients.com/
+渐变配色2https://uigradients.com/
+花瓣(设计配色)https://huaban.com/explore/shejipeise/
+高清壁纸
+WallHaven 可以直接下载高清壁纸资源,无需登陆付费!https://wallhaven.cc/
+WallpaperMaiden 有3k+壁纸下载https://www.wallpapermaiden.com/
+Wallroom 支持颜色筛选壁纸,风格多样https://wallroom.io/
+编程开发
+开发学习
+菜鸟编程https://www.runoob.com/
+w3school在线教程https://www.w3school.com.cn/
+成为专业程序员https://github.com/stanzhai/be-a-professional-programmer
+经典编程书籍大全https://github.com/jobbole/awesome-programming-books
+廖雪峰的官方网站https://www.liaoxuefeng.com/
+编程项目
+Chrome插件英雄榜https://www.v2fy.com/p/readme-chromeappheroes/
+GitHub趋势(热门)https://github.com/trending
+Github中文排行榜https://github.com/kon9chunkit/GitHub-Chinese-Top-Charts
+Github星聚弃疗榜(Github星爆沙雕榜)https://github.com/zhaoolee/StarsAndClown
+每日收集喜欢的开源项目https://github.com/guanguans/favorite-link
+必备软件
+windows
+Rufus-轻松制作USB启动盘https://rufus.ie/
+Everythinghttps://www.voidtools.com/zh-cn/
+Snipastehttps://www.snipaste.com/
+QTTabBar| 超好用的资源管理器http://qttabbar.wikidot.com/
+off~~ice四合一精简版 * 四合一精简版集合了A/ccess 、E/xcel、P/PT、W/ord常用四大组件 链接:https://pan.baidu.com/s/1KqUx9Rfe3PT14j8bLLKgxA提取码: h25j
+HEU KMS Activator 全能选手 可激活所有Windows系统及Office,拥有智能激活、KMS激活、数字激活、OEM激活。软件会被误报毒,下载前建议关闭拦截,我用腾讯哈勃分析系统检测过了,没什么问题。https://xzkj.lanzous.com/iq2mCljgcgj密码:gfde
+16款强大的Windows全系统激活工具 由一个吾爱破解论坛的用户整理的激活工具合集,如果前面那款激活工具无法解决你的激活问题,那么这16款绝对能助你激活系统。https://www.52pojie.cn/thread-660948-1-1.html下载地址:https://pan.baidu.com/s/1gf1Xzdp 备份下载地址:https://pan.baidu.com/s/1mhPT5Ra
+360驱动大师 去广告单文件版 装机必备的驱动安装检测工具,一键安装驱动,驱动管理,驱动搜索,硬件信息展示,我重装系统都用它。https://xzkj.lanzous.com/iEYaXljgjsd密码:hbqb
+ZYPlayer(观影) 可看电影、电视剧等,播放源多、开源免费无广告。官网:http://zyplayer.fun/
+电脑端护眼软件 软件支持Mac、Windows、Linux系统,是一款出色的护眼软件。https://justgetflux.com/
+TrafficMonitor 网速悬浮窗 Traffic Monitor是一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。https://github.com/zhongyang219/TrafficMonitor/releases
+万彩办公大师 完全免费,办公必备工具百宝箱,PDF工具/万能格式转换/识别工具/图片处理,多达 60+ 个小工具。http://www.wofficebox.com/
+CleverPDF PDF编辑工具 颜值高,且超好用的一款专业的PDF编辑工具,包含20个免费在线PDF工具,包括PDF转Word、PDF转PPT、PDF加密&解密、添加水印、PDF压缩等众多功能。按链接中的安装步骤操作即可,好用到没边。https://www.52pojie.cn/thread-1067884-1-1.html
+小叶文库下载器 教程:https://mp.weixin.qq.com/s/qVYuPQv8hGtb-kzgKiY8Aw下载:https://xzkj.lanzous.com/iQxBWluru6j
+Bandicam 便捷版 视频录制工具 最好用的视频录制软件,游戏录屏软件,屏幕录制工具,解压就能使用,方便稳定。https://xzkj.lanzous.com/iiutjlvsegf
+ScreenToGif 动图GIF录制制作工具 一款方便小巧的GIF动画录制工具,可用来快速录制屏幕上的指定区域,并将其直接保存为GIF动画文件,非常易用。https://xzkj.lanzous.com/iapDBlvsqne
+GifCam轻量GIF录制工具 文件大小不到1MB,非常轻巧精致的一款动图录制工具。https://gifcam.en.softonic.com/
+XnConvert图片批处理 XnConvert是一个快速,功能强大且免费的跨平台批处理图像转换器,它可以自动编辑大量照片集,您可以轻松地旋转,转换和压缩不同的图像,照片和图片,并可以执行80多种操作(如调整大小),裁切,色彩调整,滤镜...)。支持所有常见的图片和图形格式(JPEG,TIFF,PNG,GIF,WEBP,PSD,JPEG2000,OpenEXR,相机RAW,HEIC,PDF,DNG,CR2)。您可以保存并重复使用预设,以进行另一批图像转换。绿色中文版:https://www.lanzous.com/i6a94uj官网:https://www.xnview.com/en/xnconvert/
+image Tuner图像批处理 Image Tuner是一个直观,有效且轻量级的批量调整大小和转换应用程序。绿色安装包:https://www.lanzous.com/i6a95ej官网:https://image-tuner.en.softonic.com/
+winrar压缩软件https://www.rarlab.com/
+7-Zip压缩 是一款开源的压缩软件,特点是压缩率极高。https://www.7-zip.org/
+小鹤双拼https://www.flypy.com/
+Mac
+Snipastehttps://www.snipaste.com/
+Win/Mac|uTools 效率神器 uTools 是一个极简、插件化、跨平台的现代桌面软件。最大的特点就是拥有强大的插件系统,现在已有 100+ 的插件供你选择,每个插件解决一个具体场景的问题,简洁美观、即用即走。https://u.tools/
+浏览器
+Chrome浏览器 (Win/Mac) Google Chrome浏览器这个我不用多说了吧?目前PC端市场占有率霸主。。https://www.google.cn/chrome/
+火狐浏览器 (Win/Mac)https://www.mozilla.org/
+Edge浏览器 (Win/Mac) 基于Chromium内核开发的新版浏览器,比之前旧版的不知好用多少,可以一试。https://www.microsoft.com/zh-cn/edge
+星愿浏览器(Win/Mac) 一款干净、简洁、高度自定义、支持 Chrome 插件、漫画阅读,且功能丰富的浏览器,适合大多数用户。https://www.twinkstar.com/
+360极速浏览器(Win/Mac)https://browser.360.cn/ee/
+浏览器插件
+Tampermonkey(油猴) 油猴插件(Tampermonkey)是一款免费的浏览器扩展和最为流行的用户脚本管理器 Edge浏览器拓展链接:https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahm
+```
diff --git a/Anytype.20240802.082116.32/budget.md b/Anytype.20240802.082116.32/budget.md
new file mode 100644
index 0000000..0de394c
--- /dev/null
+++ b/Anytype.20240802.082116.32/budget.md
@@ -0,0 +1,2 @@
+# Budget
+
diff --git a/Anytype.20240802.082116.32/bundled-template.md b/Anytype.20240802.082116.32/bundled-template.md
new file mode 100644
index 0000000..5d208d9
--- /dev/null
+++ b/Anytype.20240802.082116.32/bundled-template.md
@@ -0,0 +1 @@
+# Bundled Template
diff --git a/Anytype.20240802.082116.32/camera-aperture.md b/Anytype.20240802.082116.32/camera-aperture.md
new file mode 100644
index 0000000..182b1b7
--- /dev/null
+++ b/Anytype.20240802.082116.32/camera-aperture.md
@@ -0,0 +1 @@
+# Camera aperture
diff --git a/Anytype.20240802.082116.32/camera-exposure.md b/Anytype.20240802.082116.32/camera-exposure.md
new file mode 100644
index 0000000..001c02f
--- /dev/null
+++ b/Anytype.20240802.082116.32/camera-exposure.md
@@ -0,0 +1 @@
+# Camera exposure
diff --git a/Anytype.20240802.082116.32/camera.md b/Anytype.20240802.082116.32/camera.md
new file mode 100644
index 0000000..6d930fa
--- /dev/null
+++ b/Anytype.20240802.082116.32/camera.md
@@ -0,0 +1 @@
+# Camera
diff --git a/Anytype.20240802.082116.32/centoswen-jian-qing-li-ji-xiang-guan.md b/Anytype.20240802.082116.32/centoswen-jian-qing-li-ji-xiang-guan.md
new file mode 100644
index 0000000..12a5b14
--- /dev/null
+++ b/Anytype.20240802.082116.32/centoswen-jian-qing-li-ji-xiang-guan.md
@@ -0,0 +1,114 @@
+# Centos文件清理及相关
+```
+查看现有交换空间:
+bash
+free -h
+在CentOS系统中,清理磁盘空间通常涉及删除不需要的文件和清理缓存。以下是一些基本的命令来帮助释放磁盘空间:
+1.删除临时文件:
+
+
+sudo rm -rf /tmp/*
+
+
+1.清理日志文件:
+
+
+sudo find /var/log -type f -name "*.log" -delete
+
+
+1.清理缓存(例如,yum的缓存):
+
+
+sudo yum clean all
+
+
+1.删除旧的核心文件和日志:
+
+
+sudo package-cleanup --oldkernels --count=1
+
+
+1.检查文件系统并释放空间:
+
+
+sudo fsck -f /dev/sdX
+
+sudo fsck -f /dev/vda1
+(将sdX替换成你的磁盘标识符)
+1.如果上述步骤不足以释放空间,可以考虑找出大文件或目录,并手动删除或移动它们:
+
+
+sudo find / -type f -size +100M -exec ls -lh {} \;
+
+
+确保在执行删除操作前备份重要数据,并谨慎操作,因为误删除文件可能会导致系统或应用程序出现问题。
+
+
+
+
+
+增加交换空间:如果你的物理内存有限,可以考虑增加交换空间。在 Linux 系统中,可以通过以下命令查看和创建 swap 文件:
+
+查看现有交换空间:
+
+bash
+
+free -h
+
+创建一个新的 swap 文件(例如创建一个 2GB 的 swap 文件):
+
+bash
+
+sudo fallocate -l 2G /swapfile
+
+sudo chmod 600 /swapfile
+
+sudo mkswap /swapfile
+
+sudo swapon /swapfile
+
+若要永久启用新的 swap 文件,将其添加到 /etc/fstab 文件中
+
+
+请问怎么添加?具体操作
+
+若要将新创建的 swap 文件永久添加到系统中,请按照以下步骤操作:
+
+ 打开 /etc/fstab 文件进行编辑。这通常需要管理员权限,你可以使用以下命令之一:
+
+ bash
+
+sudo nano /etc/fstab
+
+# 或者使用你喜欢的编辑器,如 vim:
+
+sudo vim /etc/fstab
+
+在 /etc/fstab 文件的末尾添加一行,指定 swap 文件的位置以及相关选项。例如,如果你之前创建了一个名为 /swapfile 的 swap 文件,那么应该添加这样的行:
+
+bash
+
+/swapfile none swap sw 0 0
+
+这里的含义是:
+
+ /swapfile 是你的 swap 文件路径。
+ none 表示没有挂载点,因为 swap 不是一个文件系统,而是一种特殊类型的“设备”。
+ swap 表示此条目是用于 swap 类型的分区或文件。
+ sw 是标志,指定了 swap 设备的标准选项。
+ 0 表示优先级,这里设置为 0,意味着正常默认优先级。
+ 0 表示是否在启动时检查 swap 分区,设为 0 表示不检查。
+
+保存并退出编辑器。在 Nano 中,按 Ctrl+X,然后按 `Y
+
+
+
+
+
+
+
+
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/cid-of-invite-file-for-current-space.md b/Anytype.20240802.082116.32/cid-of-invite-file-for-current-space.md
new file mode 100644
index 0000000..87260ac
--- /dev/null
+++ b/Anytype.20240802.082116.32/cid-of-invite-file-for-current-space.md
@@ -0,0 +1 @@
+# CID of invite file for current space
diff --git a/Anytype.20240802.082116.32/codezhong-duan-fu-xian-gong-ju.md b/Anytype.20240802.082116.32/codezhong-duan-fu-xian-gong-ju.md
new file mode 100644
index 0000000..ce0eef0
--- /dev/null
+++ b/Anytype.20240802.082116.32/codezhong-duan-fu-xian-gong-ju.md
@@ -0,0 +1,148 @@
+# code终端复现工具
+```
+
+
+less 类似cat 功能命令
+启动 zellij
+bash <(curl -L zellij.dev/launch)
+或者
+https://cn.x-cmd.com/
+eval "$(curl https://get.x-cmd.com)"
+
+sudo bash launch-script.sh
+zellij --layout devs_rust.kdl
+ x zellij attach de_rustings
+启动 ranger ranger
+启动helix hx .
+hx --health
+rustup component add rust-analyzer
+rustup update cargo clean
+git clone https://github.com/Axect/Zellaygen
+
+git clone https://github.com/helix-editor/helix
+
+cargo install --locked zellij
+cargo install termusic termusic-server --locked
+
+
+hx .
+zellij --layout rustings.kdl
+ https://zellij.dev/documentation/creating-a-layout.html
+
+bash <(curl -L zellij.dev/launch)
+
+ryan ALL=(ALL) NOPASSWD: /home/ryan/zellaygen/zellij
+
+2022年rust下的tui编程环境体验也可以这么好用了!!!
+终端编辑工具:https://github.com/helix-editor/helix (hx)
+https://docs.helix-editor.com/install.html
+snap install --classic helix
+https://www.bilibili.com/read/cv25583084/
+https://blog.csdn.net/castellan/article/details/134778980
+https://www.163.com/dy/article/HSDF7S5205315NUH.html
+使用指南 https://zhuanlan.zhihu.com/p/607673321?utm_id=0
+ https://www.zhihu.com/question/462847687
+ helix配置参考 https://github.com/ryan6981/my_helix_editor_config
+
+终端复用工具:https://github.com/zellij-org/zellij (zellij)
+https://zellij.dev/
+tar -xvf zellij*.tar.gz
+check for the execution bit:
+chmod +x zellij
+and then execute Zellij:
+./zellij
+
+
+Try Zellij without installing
+bash/zsh:
+bash <(curl -L zellij.dev/launch)
+
+
+zellij的布局配置工具:https://github.com/Axect/Zellaygen
+终端下的git客户端:https://github.com/jesseduffield/lazygit (lazygit)
+终端下的文件管理器:https://github.com/ranger/ranger (ranger)
+终端下的音乐播放器:https://github.com/tramhao/termusic (termusic)
+
+终端下的文件管理器安装:https://blog.csdn.net/crayon0/article/details/127561052
+
+
+
+git clone https://github.com/HeyPuter/puter
+git clone https://github.com/Axect/Zellaygen.git
+
+
+cd puter
+docker compose up
+
+
+
+增加交换空间:如果你的物理内存有限,可以考虑增加交换空间。在 Linux 系统中,可以通过以下命令查看和创建 swap 文件:
+
+查看现有交换空间:
+
+bash
+
+free -h
+
+创建一个新的 swap 文件(例如创建一个 2GB 的 swap 文件):
+
+bash
+
+sudo fallocate -l 2G /swapfile
+
+sudo chmod 600 /swapfile
+
+sudo mkswap /swapfile
+
+sudo swapon /swapfile
+
+若要永久启用新的 swap 文件,将其添加到 /etc/fstab 文件中
+
+
+请问怎么添加?具体操作
+
+若要将新创建的 swap 文件永久添加到系统中,请按照以下步骤操作:
+
+ 打开 /etc/fstab 文件进行编辑。这通常需要管理员权限,你可以使用以下命令之一:
+
+ bash
+
+sudo nano /etc/fstab
+
+# 或者使用你喜欢的编辑器,如 vim:
+
+sudo vim /etc/fstab
+
+在 /etc/fstab 文件的末尾添加一行,指定 swap 文件的位置以及相关选项。例如,如果你之前创建了一个名为 /swapfile 的 swap 文件,那么应该添加这样的行:
+
+bash
+
+/swapfile none swap sw 0 0
+
+这里的含义是:
+
+ /swapfile 是你的 swap 文件路径。
+ none 表示没有挂载点,因为 swap 不是一个文件系统,而是一种特殊类型的“设备”。
+ swap 表示此条目是用于 swap 类型的分区或文件。
+ sw 是标志,指定了 swap 设备的标准选项。
+ 0 表示优先级,这里设置为 0,意味着正常默认优先级。
+ 0 表示是否在启动时检查 swap 分区,设为 0 表示不检查。
+
+保存并退出编辑器。在 Nano 中,按 Ctrl+X,然后按 `Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/collection-ji.md b/Anytype.20240802.082116.32/collection-ji.md
new file mode 100644
index 0000000..97193f1
--- /dev/null
+++ b/Anytype.20240802.082116.32/collection-ji.md
@@ -0,0 +1 @@
+# Collection 集
diff --git a/Anytype.20240802.082116.32/collection-ji_w.md b/Anytype.20240802.082116.32/collection-ji_w.md
new file mode 100644
index 0000000..97193f1
--- /dev/null
+++ b/Anytype.20240802.082116.32/collection-ji_w.md
@@ -0,0 +1 @@
+# Collection 集
diff --git a/Anytype.20240802.082116.32/collection.md b/Anytype.20240802.082116.32/collection.md
new file mode 100644
index 0000000..535a5ad
--- /dev/null
+++ b/Anytype.20240802.082116.32/collection.md
@@ -0,0 +1 @@
+# Collection
diff --git a/Anytype.20240802.082116.32/composer.md b/Anytype.20240802.082116.32/composer.md
new file mode 100644
index 0000000..81f6937
--- /dev/null
+++ b/Anytype.20240802.082116.32/composer.md
@@ -0,0 +1 @@
+# Composer
diff --git a/Anytype.20240802.082116.32/condaxu-ni-huan-jing-da-jian.md b/Anytype.20240802.082116.32/condaxu-ni-huan-jing-da-jian.md
new file mode 100644
index 0000000..71b3fa7
--- /dev/null
+++ b/Anytype.20240802.082116.32/condaxu-ni-huan-jing-da-jian.md
@@ -0,0 +1,34 @@
+# Conda虚拟环境搭建
+https://fac.feffery.tech/
+环境搭建
+在基于dash和fac进行应用开发之前,我们需要先搭建好所需的环境,推荐使用conda作为环境管理工具,这里以Python 3.7版本为例,在终端执行下列命令进行相关环境的创建及激活:
+注:由于国内pypi相关镜像的更新延迟,通过其进行相关库的安装,版本可能滞后于原始pypi中的最新版本
+默认方式
+国内使用镜像
+conda create -n dash-devs python=3.7 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda activate dash-devs
+完成环境的创建及激活后,我们在对应环境中直接通过pip进行相关基础依赖库的安装即可:
+默认方式
+国内使用镜像
+pip install dash feffery-antd-components -U -i https://pypi.tuna.tsinghua.edu.cn/simple
+conda create -n pytest-devs python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda create -n pymain-dev python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda env list
+'''
+conda create -n pycode-dev python=3.9 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda create -n dash-devs python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+#指定默认源 清华源
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
+# 设置搜索时显示通道地址 从channel中安装包时显示channel的url,这样就可以知道包的安装来源
+conda config --set show\_channel\_urls yes
+#或则中科大镜像:
+conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
+conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
+conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
+#显示源:
+conda config --show
+如果有一天,你发现当前的国内源不好用or突然不想用当前的国内源or你出国了,你想还原成之前的官方下载源,怎么办?只需运行下面的代码:
+conda config --remove-key channels
+#我们也可以使用conda config —remove-key channels XXX移除指定的链接
diff --git a/Anytype.20240802.082116.32/cover-image-or-color.md b/Anytype.20240802.082116.32/cover-image-or-color.md
new file mode 100644
index 0000000..9e7ce62
--- /dev/null
+++ b/Anytype.20240802.082116.32/cover-image-or-color.md
@@ -0,0 +1 @@
+# Cover image or color
diff --git a/Anytype.20240802.082116.32/cover-scale.md b/Anytype.20240802.082116.32/cover-scale.md
new file mode 100644
index 0000000..58d977f
--- /dev/null
+++ b/Anytype.20240802.082116.32/cover-scale.md
@@ -0,0 +1 @@
+# Cover scale
diff --git a/Anytype.20240802.082116.32/cover-type.md b/Anytype.20240802.082116.32/cover-type.md
new file mode 100644
index 0000000..19e6f4a
--- /dev/null
+++ b/Anytype.20240802.082116.32/cover-type.md
@@ -0,0 +1 @@
+# Cover type
diff --git a/Anytype.20240802.082116.32/cover-x-offset.md b/Anytype.20240802.082116.32/cover-x-offset.md
new file mode 100644
index 0000000..7c3e746
--- /dev/null
+++ b/Anytype.20240802.082116.32/cover-x-offset.md
@@ -0,0 +1 @@
+# Cover x offset
diff --git a/Anytype.20240802.082116.32/cover-y-offset.md b/Anytype.20240802.082116.32/cover-y-offset.md
new file mode 100644
index 0000000..7e8a241
--- /dev/null
+++ b/Anytype.20240802.082116.32/cover-y-offset.md
@@ -0,0 +1 @@
+# Cover y offset
diff --git a/Anytype.20240802.082116.32/cpl.md b/Anytype.20240802.082116.32/cpl.md
new file mode 100644
index 0000000..608244a
--- /dev/null
+++ b/Anytype.20240802.082116.32/cpl.md
@@ -0,0 +1 @@
+# CPL
diff --git a/Anytype.20240802.082116.32/create-dashboard.md b/Anytype.20240802.082116.32/create-dashboard.md
new file mode 100644
index 0000000..de59593
--- /dev/null
+++ b/Anytype.20240802.082116.32/create-dashboard.md
@@ -0,0 +1,8 @@
+# Create Dashboard
+
+## Details
+ ---
+> Anytype Tip: Fill in the Due Date, Status, and Assignee above and Watch your Graph grow!
+
+
+
diff --git a/Anytype.20240802.082116.32/created-by.md b/Anytype.20240802.082116.32/created-by.md
new file mode 100644
index 0000000..568e231
--- /dev/null
+++ b/Anytype.20240802.082116.32/created-by.md
@@ -0,0 +1 @@
+# Created by
diff --git a/Anytype.20240802.082116.32/creation-date.md b/Anytype.20240802.082116.32/creation-date.md
new file mode 100644
index 0000000..11906e6
--- /dev/null
+++ b/Anytype.20240802.082116.32/creation-date.md
@@ -0,0 +1 @@
+# Creation date
diff --git a/Anytype.20240802.082116.32/dash.md b/Anytype.20240802.082116.32/dash.md
new file mode 100644
index 0000000..866809c
--- /dev/null
+++ b/Anytype.20240802.082116.32/dash.md
@@ -0,0 +1,66 @@
+# Dash
+```
+
+import dash
+from dash import html
+import feffery_antd_components as fac
+from dash.dependencies import Input, Output
+
+# 实例化Dash应用对象
+app = dash.Dash(__name__)
+
+# 添加初始化页面内容
+app.layout = html.Div(
+ [
+ fac.AntdTitle('你好!Dash!',level=3),
+ fac.AntdText('Dash版本%s' % dash.__version__),
+ fac.AntdDivider(),
+ fac.AntdText('fac版本%s' % fac.__version__)
+
+ ]
+)
+
+
+if __name__ == '__main__':
+ app.run(debug=False)
+
+
+
+
+
+
+'''
+
+https://fac.feffery.tech/
+环境搭建
+在基于dash和fac进行应用开发之前,我们需要先搭建好所需的环境,推荐使用conda作为环境管理工具,这里以Python 3.7版本为例,在终端执行下列命令进行相关环境的创建及激活:
+注:由于国内pypi相关镜像的更新延迟,通过其进行相关库的安装,版本可能滞后于原始pypi中的最新版本
+默认方式
+国内使用镜像
+conda create -n dash-devs python=3.7 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda activate dash-devs
+完成环境的创建及激活后,我们在对应环境中直接通过pip进行相关基础依赖库的安装即可:
+默认方式
+国内使用镜像
+pip install dash feffery-antd-components -U -i https://pypi.tuna.tsinghua.edu.cn/simple
+
+conda create -n pytest-devs python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda create -n pymain-dev python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+
+
+conda env list
+
+'''
+conda create -n pytest-dev python=3.9 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+
+
+conda create -n dash-devs python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+
+
+
+```
+```
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/dashboard.md b/Anytype.20240802.082116.32/dashboard.md
new file mode 100644
index 0000000..58f161a
--- /dev/null
+++ b/Anytype.20240802.082116.32/dashboard.md
@@ -0,0 +1 @@
+# Dashboard
diff --git a/Anytype.20240802.082116.32/date.md b/Anytype.20240802.082116.32/date.md
new file mode 100644
index 0000000..0ba512c
--- /dev/null
+++ b/Anytype.20240802.082116.32/date.md
@@ -0,0 +1 @@
+# Date
diff --git a/Anytype.20240802.082116.32/default-template-id.md b/Anytype.20240802.082116.32/default-template-id.md
new file mode 100644
index 0000000..5d8042d
--- /dev/null
+++ b/Anytype.20240802.082116.32/default-template-id.md
@@ -0,0 +1 @@
+# Default Template ID
diff --git a/Anytype.20240802.082116.32/default-value.md b/Anytype.20240802.082116.32/default-value.md
new file mode 100644
index 0000000..031c0da
--- /dev/null
+++ b/Anytype.20240802.082116.32/default-value.md
@@ -0,0 +1 @@
+# Default value
diff --git a/Anytype.20240802.082116.32/delete-pre-installed-objects.md b/Anytype.20240802.082116.32/delete-pre-installed-objects.md
new file mode 100644
index 0000000..3839594
--- /dev/null
+++ b/Anytype.20240802.082116.32/delete-pre-installed-objects.md
@@ -0,0 +1,8 @@
+# Delete Pre-installed objects
+
+## Details
+ ---
+
+Go to [All Objects](all-objects_t.md) and in "Pre-installed" you can delete everything by selecting All.
+
+
diff --git a/Anytype.20240802.082116.32/description.md b/Anytype.20240802.082116.32/description.md
new file mode 100644
index 0000000..4a93e13
--- /dev/null
+++ b/Anytype.20240802.082116.32/description.md
@@ -0,0 +1 @@
+# Description
diff --git a/Anytype.20240802.082116.32/di-san-dai-ce-shi.md b/Anytype.20240802.082116.32/di-san-dai-ce-shi.md
new file mode 100644
index 0000000..317db58
--- /dev/null
+++ b/Anytype.20240802.082116.32/di-san-dai-ce-shi.md
@@ -0,0 +1,15 @@
+# 第三代测试
+
+- [ ] 剃光头刚刚更换
+- [ ] 愿与君
+- [ ] 一体化与他合影
+
+$$
+
+
+
+$$
+
+$$
+
+$$
diff --git a/Anytype.20240802.082116.32/discovery-hidden.md b/Anytype.20240802.082116.32/discovery-hidden.md
new file mode 100644
index 0000000..96e7f2a
--- /dev/null
+++ b/Anytype.20240802.082116.32/discovery-hidden.md
@@ -0,0 +1 @@
+# Discovery hidden
diff --git a/Anytype.20240802.082116.32/dockerji-chu-zhi-shi.md b/Anytype.20240802.082116.32/dockerji-chu-zhi-shi.md
new file mode 100644
index 0000000..6b080a1
--- /dev/null
+++ b/Anytype.20240802.082116.32/dockerji-chu-zhi-shi.md
@@ -0,0 +1,47 @@
+# Docker基础知识
+##Docker镜像制作
+```
+# 使用我的rscodes-ubuntssh:latest作为基础镜像
+FROM c53eff802780
+
+# 设置工作目录
+WORKDIR /home/coder
+
+# 暴露22端口
+EXPOSE 22
+
+# 暴露80端口
+EXPOSE 80
+
+# 暴露8080端口
+EXPOSE 8080
+
+# 设置root密码
+RUN echo 'root:1234' | chpasswd
+
+# 启动SSH服务
+CMD ["/usr/sbin/sshd", "-D"]
+docker run -it -p 2222:22 cc280cd57c39 /bin/bash
+
+```
+##另一种
+```
+# 使用官方 Ubuntu 基础镜像
+FROM ubuntu:latest
+
+# 安装 OpenSSH 服务
+RUN apt-get update && apt-get install -y openssh-server
+
+# 启动 ssh 服务并设置开机自启
+RUN mkdir /var/run/sshd
+RUN echo 'root:yourpassword' | chpasswd
+RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
+CMD ["/usr/sbin/sshd", "-D"]
+
+# 暴露 22 端口
+EXPOSE 22
+
+# 设置工作目录
+WORKDIR /root
+
+```
diff --git a/Anytype.20240802.082116.32/dockerrong-qi-chang-yong-ming-ling.md b/Anytype.20240802.082116.32/dockerrong-qi-chang-yong-ming-ling.md
new file mode 100644
index 0000000..7699344
--- /dev/null
+++ b/Anytype.20240802.082116.32/dockerrong-qi-chang-yong-ming-ling.md
@@ -0,0 +1,250 @@
+# Docker容器常用命令
+```
+#在Docker中,我们可以使用以下命令将容器保存为镜像:
+docker commit registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/
+docker commit [CONTAINER ID] [IMAGE NAME]
+
+#映射端口并起敌不过进去入容器
+docker run -it -p 2222:22 ubuntu /bin/bash
+docker run -it -p 2222:22 cc280cd57c39 /bin/bash
+
+#进入容器
+docker exec -it 0d63e467e034 /bin/bash
+docker exec -it fda199c418cc /bin/bash
+
+
+
+
+
+
+
+#添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)
+sudo groupadd docker
+sudo usermod -aG docker $USER
+
+#重新启动docker
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+
+#启动容器
+docker run -it -p 18080:8080 registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/mypyhon-code-server231107:latest
+
+docker run -d -p 8888:8888 lincaigui/mojo-jupyter:latest
+sudo docker login --username=995559618@qq.com registry.cn-shenzhen.aliyuncs.com
+
+docker run -d -p 8888:8888 registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/ruize1029:latest
+
+登录专网拉docker images
+docker login --username=995559618@qq.com registry-vpc.cn-shenzhen.aliyuncs.com
+docker pull registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/ruize1029:latest
+
+
+```
+docker操作步骤及代码
+步骤1:查看本地已有的镜像
+首先,我们需要查看本地已有的镜像,以确定需要备份的镜像。可以使用以下命令查看本地镜像列表:
+```
+docker images
+
+```
+步骤2:选择需要备份的镜像
+根据步骤1中的镜像列表,选择需要备份的镜像。可以根据镜像的名称和版本号进行选择。
+步骤3:备份镜像
+使用以下命令备份镜像,将镜像保存为tar文件:
+```
+docker save -o <备份文件名>.tar <镜像名称>:<镜像版本>
+
+```
+其中,<备份文件名>为保存备份镜像的文件名,<镜像名称>为需要备份的镜像名称,<镜像版本>为需要备份的镜像版本。
+步骤4:将备份的镜像文件复制到目标机器
+将步骤3中备份的镜像文件复制到目标机器,可以使用scp命令或其他文件传输工具进行复制。
+步骤5:导入镜像到目标机器
+在目标机器上导入备份的镜像,使用以下命令:
+```
+docker load -i <备份文件名>.tar
+
+```
+其中,<备份文件名>为之前备份的镜像文件名。
+步骤6:查看目标机器上的导入镜像
+使用以下命令查看目标机器上已导入的镜像:
+```
+docker images
+
+```
+1. 总结
+通过以上步骤,我们可以实现Docker镜像的备份与导入操作。首先通过docker save命令将需要备份的镜像保存为tar文件,然后将备份文件复制到目标机器,最后在目标机器上使用docker load命令导入镜像。使用docker images命令可以查看本地镜像列表,确认备份和导入的结果。
+希望以上步骤和代码可以帮助到你,快速掌握Docker镜像备份与导入的操作。
+
+https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm\_source=docker&utm\_medium=webreferral&utm\_campaign=dd-smartbutton&utm\_location=module
+快速修改运行中的docker容器端口映射的三种方式
+2023年5月15日 下午8:34 • Docker
+下面我们来详细讲解一下快速修改运行中的docker容器端口映射的三种方式。
+方式一:使用docker命令修改端口映射
+```
+查看运行中的docker容器
+docker ps
+
+使用以下命令修改端口映射,将容器内部的端口 8080 映射到宿主机的端口 8888
+docker container update --publish-add 8888:8080 容器名称或容器ID
+其中 --publish-add 表示新增一个端口映射,8888 是宿主机的端口,8080 是容器内部的端口。
+
+查看端口映射是否已生效
+docker container inspect 容器名称或容器ID
+在返回结果中找到 "Ports" 部分,可以看到端口映射已生效。
+
+```
+示例:修改 nginx 容器内部的端口 80 映射到宿主机的端口 8080
+docker container update --publish-add 8080:80 nginx
+方式二:使用docker-compose修改端口映射
+```
+编辑 docker-compose.yml 文件,修改对应服务的端口映射
+services:
+web:
+ports:
+- "8888:80"
+表示将容器内部的端口 80 映射到宿主机的端口 8888。
+Python技术站热门推荐:
+PDF电子发票识别软件,一键识别电子发票并导入到Excel中!
+10大顶级数据挖掘软件!
+人工智能的十大作用!
+
+在 docker-compose.yml 文件所在的目录中,运行以下命令使修改生效
+docker-compose up --force-recreate --build -d
+其中 --force-recreate 表示强制重新创建容器, --build 表示在创建容器前先构建镜像。
+
+```
+示例:修改 docker-compose.yml 中 web 服务的端口映射,将容器内部的端口 80 映射到宿主机的端口 8888。
+services:
+web:
+ports:
+- "8888:80"
+方式三:使用Portainer可视化控制面板修改端口映射
+1.通过浏览器访问Portainer可视化控制面板,在菜单中打开相应的docker容器详情页。
+2.进入 容器设置 页面,找到 端口映射 选项,点击 添加映射。
+3.将容器内部的端口 8080 映射到宿主机的端口 8888,保存设置。
+4.返回 容器设置 页面,找到 容器重启 选项,点击 重启。
+5.查看修改是否生效,重新进入容器详情页,查看 端口映射 是否正确。
+示例:使用Portainer可视化控制面板将 nginx 容器内部的端口 80 映射到宿主机的端口 8888。
+以上是三种修改运行中的docker容器端口映射的方式,根据实际情况选择适合自己的方式进行修改即可
+
+
+
+
+
+
+
+
+```
+
+ 指定目录中没有找到composer.json配置文件!
+
+
+
+
+
+
+
+添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)
+sudo groupadd docker
+sudo usermod -aG docker $USER
+
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+
+
+docker load -i rspycoder-server.tar
+
+docker run -d --name coder-server -p 18080:8080 registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/rspycoder-server:latest
+
+registry.cn-shenzhen.aliyuncs.com/ruizekj/rspycoder-server:latest
+
+
+
+docker image save -o rspycoder-server.tar registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/rspycoder-server:latest
+
+
+
+sudo docker run -d --name coder-server -p 18080:8088 registry.cn-shenzhen.aliyuncs.com/ruizekj/rspycoder-server:latest
+
+docker load -i rspycoder-server.tar
+
+
+
+docker login --username=995559618@qq.com registry.cn-shenzhen.aliyuncs.com
+docker login --username=995559618@qq.com registry.cn-shenzhen.aliyuncs.com
+
+
+docker login --username=995559618@qq.com registry-vpc.cn-shenzhen.aliyuncs.com
+
+docker pull registry.cn-shenzhen.aliyuncs.com/ruizekj/rspycoder-server:latest
+
+
+
+irm https://massgrave.dev/get | iex
+
+
+
+
+
+
+cat /etc/ssh/ssh_host_rsa_key
+cat /etc/ssh/ssh_host_ecdsa_key
+
+在Docker中,我们可以使用以下命令将容器保存为镜像:
+
+docker commit [CONTAINER ID] [IMAGE NAME]
+
+
+添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)
+sudo groupadd docker
+sudo usermod -aG docker $USER
+
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+
+docker run -it -p 18080:8080 registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/mypyhon-code-server231107:latest
+
+docker run -d -p 8888:8888 lincaigui/mojo-jupyter:latest
+sudo docker login --username=995559618@qq.com registry.cn-shenzhen.aliyuncs.com
+
+docker run -d -p 8888:8888 registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/ruize1029:latest
+
+登录专网拉docker images
+docker login --username=995559618@qq.com registry-vpc.cn-shenzhen.aliyuncs.com
+docker pull registry-vpc.cn-shenzhen.aliyuncs.com/ruizekj/ruize1029:latest
+
+
+
+docker操作步骤及代码
+步骤1:查看本地已有的镜像
+首先,我们需要查看本地已有的镜像,以确定需要备份的镜像。可以使用以下命令查看本地镜像列表:
+docker images
+步骤2:选择需要备份的镜像
+根据步骤1中的镜像列表,选择需要备份的镜像。可以根据镜像的名称和版本号进行选择。
+步骤3:备份镜像
+使用以下命令备份镜像,将镜像保存为tar文件:
+
+docker save -o <备份文件名>.tar <镜像名称>:<镜像版本>
+
+其中,<备份文件名>为保存备份镜像的文件名,<镜像名称>为需要备份的镜像名称,<镜像版本>为需要备份的镜像版本。
+步骤4:将备份的镜像文件复制到目标机器
+将步骤3中备份的镜像文件复制到目标机器,可以使用scp命令或其他文件传输工具进行复制。
+步骤5:导入镜像到目标机器
+
+在目标机器上导入备份的镜像,使用以下命令:
+
+docker load -i <备份文件名>.tar
+
+其中,<备份文件名>为之前备份的镜像文件名。
+步骤6:查看目标机器上的导入镜像
+
+使用以下命令查看目标机器上已导入的镜像:
+docker images
+
+4. 总结
+通过以上步骤,我们可以实现Docker镜像的备份与导入操作。首先通过docker save命令将需要备份的镜像保存为tar文件,然后将备份文件复制到目标机器,最后在目标机器上使用docker load命令导入镜像。使用docker images命令可以查看本地镜像列表,确认备份和导入的结果。
+希望以上步骤和代码可以帮助到你,快速掌握Docker镜像备份与导入的操作。
+
+
+https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=module
+```
diff --git a/Anytype.20240802.082116.32/done.md b/Anytype.20240802.082116.32/done.md
new file mode 100644
index 0000000..5593fa9
--- /dev/null
+++ b/Anytype.20240802.082116.32/done.md
@@ -0,0 +1 @@
+# Done
diff --git a/Anytype.20240802.082116.32/done_u.md b/Anytype.20240802.082116.32/done_u.md
new file mode 100644
index 0000000..5593fa9
--- /dev/null
+++ b/Anytype.20240802.082116.32/done_u.md
@@ -0,0 +1 @@
+# Done
diff --git a/Anytype.20240802.082116.32/due-date.md b/Anytype.20240802.082116.32/due-date.md
new file mode 100644
index 0000000..c63af6b
--- /dev/null
+++ b/Anytype.20240802.082116.32/due-date.md
@@ -0,0 +1 @@
+# Due date
diff --git a/Anytype.20240802.082116.32/emoji.md b/Anytype.20240802.082116.32/emoji.md
new file mode 100644
index 0000000..a9b7524
--- /dev/null
+++ b/Anytype.20240802.082116.32/emoji.md
@@ -0,0 +1 @@
+# Emoji
diff --git a/Anytype.20240802.082116.32/encoded-encryption-key-of-invite-file-for-curr.md b/Anytype.20240802.082116.32/encoded-encryption-key-of-invite-file-for-curr.md
new file mode 100644
index 0000000..f68ba76
--- /dev/null
+++ b/Anytype.20240802.082116.32/encoded-encryption-key-of-invite-file-for-curr.md
@@ -0,0 +1 @@
+# Encoded encryption key of invite file for current space
diff --git a/Anytype.20240802.082116.32/favorited.md b/Anytype.20240802.082116.32/favorited.md
new file mode 100644
index 0000000..53802f1
--- /dev/null
+++ b/Anytype.20240802.082116.32/favorited.md
@@ -0,0 +1 @@
+# Favorited
diff --git a/Anytype.20240802.082116.32/featured-relations.md b/Anytype.20240802.082116.32/featured-relations.md
new file mode 100644
index 0000000..c265983
--- /dev/null
+++ b/Anytype.20240802.082116.32/featured-relations.md
@@ -0,0 +1 @@
+# Featured Relations
diff --git a/Anytype.20240802.082116.32/file-backup-status.md b/Anytype.20240802.082116.32/file-backup-status.md
new file mode 100644
index 0000000..a8e78e6
--- /dev/null
+++ b/Anytype.20240802.082116.32/file-backup-status.md
@@ -0,0 +1 @@
+# File backup status
diff --git a/Anytype.20240802.082116.32/file-extension.md b/Anytype.20240802.082116.32/file-extension.md
new file mode 100644
index 0000000..0e45aac
--- /dev/null
+++ b/Anytype.20240802.082116.32/file-extension.md
@@ -0,0 +1 @@
+# File extension
diff --git a/Anytype.20240802.082116.32/file-indexing-status.md b/Anytype.20240802.082116.32/file-indexing-status.md
new file mode 100644
index 0000000..c07c6b1
--- /dev/null
+++ b/Anytype.20240802.082116.32/file-indexing-status.md
@@ -0,0 +1 @@
+# File indexing status
diff --git a/Anytype.20240802.082116.32/file-sync-status.md b/Anytype.20240802.082116.32/file-sync-status.md
new file mode 100644
index 0000000..2368316
--- /dev/null
+++ b/Anytype.20240802.082116.32/file-sync-status.md
@@ -0,0 +1 @@
+# File sync status
diff --git a/Anytype.20240802.082116.32/file.md b/Anytype.20240802.082116.32/file.md
new file mode 100644
index 0000000..d5fc9af
--- /dev/null
+++ b/Anytype.20240802.082116.32/file.md
@@ -0,0 +1 @@
+# File
diff --git a/Anytype.20240802.082116.32/files/02fd03cb6ebe3909fb385366eb90d80ce063e6ba3a130- b/Anytype.20240802.082116.32/files/02fd03cb6ebe3909fb385366eb90d80ce063e6ba3a130-
new file mode 100644
index 0000000..30a0b30
Binary files /dev/null and b/Anytype.20240802.082116.32/files/02fd03cb6ebe3909fb385366eb90d80ce063e6ba3a130- differ
diff --git a/Anytype.20240802.082116.32/files/3863cfc0c447038e53d2eb819db04b50f623ea83_2_32x.ico b/Anytype.20240802.082116.32/files/3863cfc0c447038e53d2eb819db04b50f623ea83_2_32x.ico
new file mode 100644
index 0000000..25b5b7b
Binary files /dev/null and b/Anytype.20240802.082116.32/files/3863cfc0c447038e53d2eb819db04b50f623ea83_2_32x.ico differ
diff --git a/Anytype.20240802.082116.32/files/49f26a405defb02936a0fc62e5a256bc604dcd2a39593- b/Anytype.20240802.082116.32/files/49f26a405defb02936a0fc62e5a256bc604dcd2a39593-
new file mode 100644
index 0000000..08d68db
Binary files /dev/null and b/Anytype.20240802.082116.32/files/49f26a405defb02936a0fc62e5a256bc604dcd2a39593- differ
diff --git a/Anytype.20240802.082116.32/files/5cb3e631ea0801439655caf8d0f32c323791ee51350e7- b/Anytype.20240802.082116.32/files/5cb3e631ea0801439655caf8d0f32c323791ee51350e7-
new file mode 100644
index 0000000..e7aaba0
Binary files /dev/null and b/Anytype.20240802.082116.32/files/5cb3e631ea0801439655caf8d0f32c323791ee51350e7- differ
diff --git a/Anytype.20240802.082116.32/files/7d88ac44cff4206de33bce30f3348990e222451c3ca20- b/Anytype.20240802.082116.32/files/7d88ac44cff4206de33bce30f3348990e222451c3ca20-
new file mode 100644
index 0000000..2f79f39
Binary files /dev/null and b/Anytype.20240802.082116.32/files/7d88ac44cff4206de33bce30f3348990e222451c3ca20- differ
diff --git a/Anytype.20240802.082116.32/files/anytype-the-everything-app b/Anytype.20240802.082116.32/files/anytype-the-everything-app
new file mode 100644
index 0000000..12a050f
Binary files /dev/null and b/Anytype.20240802.082116.32/files/anytype-the-everything-app differ
diff --git a/Anytype.20240802.082116.32/files/anytype.png b/Anytype.20240802.082116.32/files/anytype.png
new file mode 100644
index 0000000..27deb25
Binary files /dev/null and b/Anytype.20240802.082116.32/files/anytype.png differ
diff --git a/Anytype.20240802.082116.32/files/anytype_downloaded_file_197024740 b/Anytype.20240802.082116.32/files/anytype_downloaded_file_197024740
new file mode 100644
index 0000000..8d6343d
Binary files /dev/null and b/Anytype.20240802.082116.32/files/anytype_downloaded_file_197024740 differ
diff --git a/Anytype.20240802.082116.32/files/anytype_downloaded_file_3193308844 b/Anytype.20240802.082116.32/files/anytype_downloaded_file_3193308844
new file mode 100644
index 0000000..bf1081a
--- /dev/null
+++ b/Anytype.20240802.082116.32/files/anytype_downloaded_file_3193308844
@@ -0,0 +1,3 @@
+
diff --git a/Anytype.20240802.082116.32/files/anytype_downloaded_file_3771933140 b/Anytype.20240802.082116.32/files/anytype_downloaded_file_3771933140
new file mode 100644
index 0000000..e06e782
Binary files /dev/null and b/Anytype.20240802.082116.32/files/anytype_downloaded_file_3771933140 differ
diff --git a/Anytype.20240802.082116.32/files/b0a9ab962da541350aea1da80e7aca4c71fea8f5.jpeg b/Anytype.20240802.082116.32/files/b0a9ab962da541350aea1da80e7aca4c71fea8f5.jpeg
new file mode 100644
index 0000000..2ca002c
Binary files /dev/null and b/Anytype.20240802.082116.32/files/b0a9ab962da541350aea1da80e7aca4c71fea8f5.jpeg differ
diff --git a/Anytype.20240802.082116.32/files/b46c8406b00b824c47100acd3f8cdfc7610fbef024c1f- b/Anytype.20240802.082116.32/files/b46c8406b00b824c47100acd3f8cdfc7610fbef024c1f-
new file mode 100644
index 0000000..911ec8d
Binary files /dev/null and b/Anytype.20240802.082116.32/files/b46c8406b00b824c47100acd3f8cdfc7610fbef024c1f- differ
diff --git a/Anytype.20240802.082116.32/files/c72d99d2730c142e10c4f3669133c02724f48f533ebf5- b/Anytype.20240802.082116.32/files/c72d99d2730c142e10c4f3669133c02724f48f533ebf5-
new file mode 100644
index 0000000..b7abaed
Binary files /dev/null and b/Anytype.20240802.082116.32/files/c72d99d2730c142e10c4f3669133c02724f48f533ebf5- differ
diff --git a/Anytype.20240802.082116.32/files/d4c125890cd0d34032f91fd43f5ecedfee190c753508b- b/Anytype.20240802.082116.32/files/d4c125890cd0d34032f91fd43f5ecedfee190c753508b-
new file mode 100644
index 0000000..9baa56b
Binary files /dev/null and b/Anytype.20240802.082116.32/files/d4c125890cd0d34032f91fd43f5ecedfee190c753508b- differ
diff --git a/Anytype.20240802.082116.32/files/d95547d5812fcf8f26e53fa0f672a518b50dfb883e6b1- b/Anytype.20240802.082116.32/files/d95547d5812fcf8f26e53fa0f672a518b50dfb883e6b1-
new file mode 100644
index 0000000..72c0a45
Binary files /dev/null and b/Anytype.20240802.082116.32/files/d95547d5812fcf8f26e53fa0f672a518b50dfb883e6b1- differ
diff --git a/Anytype.20240802.082116.32/files/e12d2f1541c3ee702d42b8ea5c323634f740a4de324a2- b/Anytype.20240802.082116.32/files/e12d2f1541c3ee702d42b8ea5c323634f740a4de324a2-
new file mode 100644
index 0000000..d6ce6b9
Binary files /dev/null and b/Anytype.20240802.082116.32/files/e12d2f1541c3ee702d42b8ea5c323634f740a4de324a2- differ
diff --git a/Anytype.20240802.082116.32/files/qr-code-app-store.png b/Anytype.20240802.082116.32/files/qr-code-app-store.png
new file mode 100644
index 0000000..6d29d34
Binary files /dev/null and b/Anytype.20240802.082116.32/files/qr-code-app-store.png differ
diff --git a/Anytype.20240802.082116.32/files/qr-code-google-play.png b/Anytype.20240802.082116.32/files/qr-code-google-play.png
new file mode 100644
index 0000000..7a5c462
Binary files /dev/null and b/Anytype.20240802.082116.32/files/qr-code-google-play.png differ
diff --git a/Anytype.20240802.082116.32/files/screenshot-2021-11-05-at-11-56-21.png b/Anytype.20240802.082116.32/files/screenshot-2021-11-05-at-11-56-21.png
new file mode 100644
index 0000000..88576b4
Binary files /dev/null and b/Anytype.20240802.082116.32/files/screenshot-2021-11-05-at-11-56-21.png differ
diff --git a/Anytype.20240802.082116.32/files/screenshot-2022-05-06-at-10-07-54.png b/Anytype.20240802.082116.32/files/screenshot-2022-05-06-at-10-07-54.png
new file mode 100644
index 0000000..8a496d7
Binary files /dev/null and b/Anytype.20240802.082116.32/files/screenshot-2022-05-06-at-10-07-54.png differ
diff --git a/Anytype.20240802.082116.32/focal-ratio.md b/Anytype.20240802.082116.32/focal-ratio.md
new file mode 100644
index 0000000..fa40acf
--- /dev/null
+++ b/Anytype.20240802.082116.32/focal-ratio.md
@@ -0,0 +1 @@
+# Focal ratio
diff --git a/Anytype.20240802.082116.32/format.md b/Anytype.20240802.082116.32/format.md
new file mode 100644
index 0000000..66faf00
--- /dev/null
+++ b/Anytype.20240802.082116.32/format.md
@@ -0,0 +1 @@
+# Format
diff --git a/Anytype.20240802.082116.32/genre.md b/Anytype.20240802.082116.32/genre.md
new file mode 100644
index 0000000..c7cc1be
--- /dev/null
+++ b/Anytype.20240802.082116.32/genre.md
@@ -0,0 +1 @@
+# Genre
diff --git a/Anytype.20240802.082116.32/gitea.md b/Anytype.20240802.082116.32/gitea.md
new file mode 100644
index 0000000..1136e67
--- /dev/null
+++ b/Anytype.20240802.082116.32/gitea.md
@@ -0,0 +1,80 @@
+# Gitea
+#Gitea常用命令
+SSH:
+git@47.107.80.236:revin/mk-wiki.git
+HTTP:
+http://47.107.80.236:3000/revin/mk-wiki.git
+
+
+一、git remote add origin的基础
+使用“git remote add origin”指令,可以轻松地将本地项目连接到远程Git仓库
+二、git remote add origin的用法
+“git remote add origin”指令可以使用以下语法:
+```
+git remote add origin <远程Git仓库地址>
+
+
+```
+其中,<远程Git仓库地址>是你的远程Git仓库的网址。
+对于如何获取远程Git仓库地址,我们举例说明:
+比如,你的远程Git仓库地址为:
+[https://github.com/your/your.git](https://github.com/your/your.git)
+那么你在本地使用“git remote add origin”指令的语法就应该是:
+```
+git remote add origin https://github.com/your/your.git
+
+
+```
+执行这条指令之后,你的本地项目就与远程Git仓库建立了连接,你就可以开始对你的代码进行版本追踪和协作开发了。
+三、git remote add origin的一些常用操作
+1. 更改默认的远程仓库
+
+在项目中可能存在多个远程仓库,如果你想更改默认仓库,可以使用如下指令:
+```
+git remote set-url origin <新的远程Git仓库地址>
+
+
+```
+1. 查看当前的远程仓库
+
+如果你想查看当前项目的远程仓库,可以使用如下指令:
+git remote -v
+1. 删除远程仓库
+
+如果你需要删除已经添加的远程仓库,可以使用如下指令:
+```
+git remote rm origin
+
+
+```
+————————————————
+git clone 复制的连接
+③下拉仓库
+git clone 复制的连接
+④将mkdocs生成的项目my-project移到仓库文件夹内
+⑤上传
+git add .
+http://47.107.80.236:3000/revin/mk-wiki/src/branch/main/docs/blog/Tools/Git/Gitml.md#%E5%8A%A0%E5%85%A5%E5%88%B0%E6%9A%82%E5%AD%98%E5%8C%BA
+加入到暂存区
+git commit -m up
+http://47.107.80.236:3000/revin/mk-wiki/src/branch/main/docs/blog/Tools/Git/Gitml.md#%E6%8F%90%E4%BA%A4%E5%88%B0%E7%89%88%E6%9C%AC%E5%BA%93
+提交到版本库
+git push
+http://47.107.80.236:3000/revin/mk-wiki/src/branch/main/docs/blog/Tools/Git/Gitml.md#%E4%B8%8A%E4%BC%A0
+上传
+
+
+
+
+从命令行创建一个新的仓库
+touch README.md
+git init
+git checkout -b main
+git add README.md
+git commit -m "first commit"
+git remote add origin http://47.107.80.236:3000/revin/mk-wiki.git
+git push -u origin main
+
+从命令行推送已经创建的仓库
+git remote add origin http://47.107.80.236:3000/revin/mk-wiki.git
+git push -u origin main
diff --git a/Anytype.20240802.082116.32/github-anyproto-any-sync-an-open-source-protoc.md b/Anytype.20240802.082116.32/github-anyproto-any-sync-an-open-source-protoc.md
new file mode 100644
index 0000000..64a585e
--- /dev/null
+++ b/Anytype.20240802.082116.32/github-anyproto-any-sync-an-open-source-protoc.md
@@ -0,0 +1,2 @@
+# GitHub - anyproto/any-sync: An open-source protocol designed to create high-performance, local-first, peer-to-peer, end-to-end encrypted applications that facilitate seamless collaboration among multiple users and devices
+An open-source protocol designed to create high-performance, local-first, peer-to-peer, end-to-end encrypted applications that facilitate seamless collaboration among multiple users and devices - a...
diff --git a/Anytype.20240802.082116.32/global-name.md b/Anytype.20240802.082116.32/global-name.md
new file mode 100644
index 0000000..6075bb9
--- /dev/null
+++ b/Anytype.20240802.082116.32/global-name.md
@@ -0,0 +1 @@
+# Global name
diff --git a/Anytype.20240802.082116.32/guo-wai-ci-zhuan-pin-pai-wang-zhi.md b/Anytype.20240802.082116.32/guo-wai-ci-zhuan-pin-pai-wang-zhi.md
new file mode 100644
index 0000000..5efd7e7
--- /dev/null
+++ b/Anytype.20240802.082116.32/guo-wai-ci-zhuan-pin-pai-wang-zhi.md
@@ -0,0 +1,7 @@
+# 国外瓷砖品牌网址
+
+[https://www.desvresariana.com/en/](https://www.desvresariana.com/en/)
+[https://www.abkstone.com/en/range](https://www.abkstone.com/en/range)
+[https://www.flavikerpisa.it/en/collection/Nordik-Stone](https://www.flavikerpisa.it/en/collection/Nordik-Stone)
+[https://www.abk.it/en/collection/Sensi](https://www.abk.it/en/collection/Sensi)
+
diff --git a/Anytype.20240802.082116.32/height.md b/Anytype.20240802.082116.32/height.md
new file mode 100644
index 0000000..d980aaf
--- /dev/null
+++ b/Anytype.20240802.082116.32/height.md
@@ -0,0 +1 @@
+# Height
diff --git a/Anytype.20240802.082116.32/helixbian-ji-qi-pei-zhi.md b/Anytype.20240802.082116.32/helixbian-ji-qi-pei-zhi.md
new file mode 100644
index 0000000..ac072bc
--- /dev/null
+++ b/Anytype.20240802.082116.32/helixbian-ji-qi-pei-zhi.md
@@ -0,0 +1,208 @@
+# Helix编辑器配置
+给Helix编辑器配置Rust、Python的LSP服务,实现代码提示补全、格式化、高亮等功能
+
+
+```
+ https://www.bilibili.com/read/cv25583084/
+ 我看了Helix官方文档后不知道怎么才能安装指定语言的LSP服务器,我只会拉取所有语言LSP服务器的到本地,然后配置/激活指定语言的LSP服务器。
+ 我的操作系统是Fedora Spins KDE。
+ 主要参考:
+ 语言 / LSP 配置 - Helix Book 中文翻译:https://zjp-cn.github.io/helix-book/languages.html
+
+
+ How to install the default language servers:https://github.com/helix-editor/helix/wiki/How-to-install-the-default-language-servers#rust
+
+
+ 添加语言服务 - Helix Book 中文翻译:https://zjp-cn.github.io/helix-book/guides/adding_languages.html
+
+
+1. “体检”
+
+
+ Helix自带rust-analyzer,无需手动安装。
+
+
+hx --health rust # lldb-vscode可以不被安装。最初我只想配置Rust的LSP。
+
+
+会得到如下输出:
+
+
+Configured language server: rust-analyzer
+Binary for language server: /home/caicai/.cargo/bin/rust-analyzer
+Configured debug adapter: lldb-vscode
+Binary for debug adapter: /usr/bin/lldb-vscode
+Highlight queries: ✓
+Textobject queries: ✓
+Indent queries: ✓
+
+
+然后先执行以下命令:
+
+
+rustup component add rust-analyzer
+
+
+得到如下输出:
+
+
+info: downloading component 'rust-analyzer'
+info: installing component 'rust-analyzer'
+
+
+补充一下,lldb-vscode不是必需的:
+
+
+lldb-vscode --help
+
+
+lldb-vscode安装成功会有如下输出
+
+
+OVERVIEW: LLDB VSCode
+
+
+USAGE: lldb-vscode options
+
+
+OPTIONS:
+……
+
+
+2. 编写languages.toml配置文件
+
+
+ How to install the default language servers · helix-editor/helix Wiki
+
+
+编写languages.toml,保存在~/.config/helix/路径下。参考官网的配置就好,内容如下:
+
+
+[[language]]
+name = "rust"
+auto-format = false
+
+
+# If this doesn't work, you might be on a older release version which handles this differently.
+# Try using [language.config.check] instead of [language-server.rust-analyzer.config.check]
+[language-server.rust-analyzer.config.check]
+command = "clippy"
+
+
+# [[grammar]]
+# name = "rust"
+# source = { git = "https://github.com/tree-sitter/tree-sitter-rust", rev = "????" }
+
+
+# 下这是复制粘贴来的。
+[[language]]
+name = "python"
+scope = "source.python"
+injection-regex = "python"
+file-types = ["py","pyi","py3","pyw","ptl",".pythonstartup",".pythonrc","SConstruct"]
+shebangs = ["python"]
+roots = ["setup.py", "setup.cfg", "pyproject.toml"]
+comment-token = "#"
+language-server = { command = "pyright-langserver", args = ["--stdio"] }
+indent = { tab-width = 4, unit = " " }
+# will get "Async jobs timed out" errors if this empty config is not added
+config = {}
+
+
+# [language-server.pyright-langserver.config.check]
+# command = "clippy"
+
+
+在配置文件中“[[grammar]]”底下有指定要安装某个语言的LSP服务器,但是我不理解其中一些配置参数。这个配置文件的内容我是仿照[Wiki]https://github.com/helix-editor/helix/wiki/How-to-install-the-default-language-servers)和[官方教程](https://zjp-cn.github.io/helix-book/languages.html)复制粘贴的。
+3. 拉取与构建
+3.1 hx --grammar fetch
+
+
+这一步骤会拉取所有语言的LSP服务到本地,保存的路径为~/.config/helix/runtime/grammars/。
+
+
+hx --grammar fetch # 拉取没有进度条,看起来像卡住了但其实并没有卡住。耗时几分钟。
+
+
+输出如下:
+
+
+8886ebf54fca2ed448a6
+Failure 1/24: protobuf Git command failed.
+Stdout:
+……
+Error: 24 grammars failed to fetch
+
+
+如果没能全部拉取成功需要反复执行直到全部成功。
+
+
+hx --grammar fetch # 继续执行
+
+
+又成功拉取了24个。
+
+
+Fetching 148 grammars
+124 up to date git grammars
+
+
+
+
+3.3 查看安装结果
+
+
+ls ~/.config/helix/runtime/grammars/
+
+
+我一共拉取了148个语言的LSP,总大小1GB多。
+
+
+
+
+
+
+其他语言需要自行配置
+只要Rust都绿了就好
+4. 安装pyright麻烦一点
+
+
+我没有先前没有安装npm,但Fedora操作系统,可以识别未安装的软件,我按照提示输入y、y安装即可。
+
+
+sudo npm install --location=global pyright
+
+
+再次体检:
+
+
+hx --health python # 但是换成了python
+
+
+输出如下就基本能用了。
+
+
+Configured language server: pyright-langserver
+Binary for language server: /usr/local/bin/pyright-langserver
+Configured debug adapter: None
+Highlight queries: ✓
+Textobject queries: ✓
+Indent queries: ✓
+
+
+“debug adapter”没安装,因为我不会。
+现在Rust、Python都绿了,安装成功
+5. 使用效果展示
+
+
+打开Rust、Python程序看看,语法高亮、提示补全都有,但代码格式化不是所有语言都可以。
+Rust的语法高亮、提示补全
+Python的语法高亮、提示补全
+Rust可以代码格式化,但是Python不可以。
+
+
+ 作者:我在五环外种地 https://www.bilibili.com/read/cv25583084/ 出处:bilibili
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/hidden.md b/Anytype.20240802.082116.32/hidden.md
new file mode 100644
index 0000000..49764bf
--- /dev/null
+++ b/Anytype.20240802.082116.32/hidden.md
@@ -0,0 +1 @@
+# Hidden
diff --git a/Anytype.20240802.082116.32/homepage.md b/Anytype.20240802.082116.32/homepage.md
new file mode 100644
index 0000000..fb50ad3
--- /dev/null
+++ b/Anytype.20240802.082116.32/homepage.md
@@ -0,0 +1,12 @@
+# Homepage
+This is an example of a dashboard
+"*The future is already here – it's just not evenly distributed*." — William Gibson
+## One category
+ ---
+[Idea 1](idea-1.md)
+[Idea 2](idea-2.md)
+## Another category
+ ---
+[Idea 3](idea-3.md)
+[Idea 4](idea-4.md)
+
diff --git a/Anytype.20240802.082116.32/human.md b/Anytype.20240802.082116.32/human.md
new file mode 100644
index 0000000..51bf509
--- /dev/null
+++ b/Anytype.20240802.082116.32/human.md
@@ -0,0 +1 @@
+# Human
diff --git a/Anytype.20240802.082116.32/icon-option.md b/Anytype.20240802.082116.32/icon-option.md
new file mode 100644
index 0000000..8b1b40b
--- /dev/null
+++ b/Anytype.20240802.082116.32/icon-option.md
@@ -0,0 +1 @@
+# Icon option
diff --git a/Anytype.20240802.082116.32/idea-1.md b/Anytype.20240802.082116.32/idea-1.md
new file mode 100644
index 0000000..d4c7f4c
--- /dev/null
+++ b/Anytype.20240802.082116.32/idea-1.md
@@ -0,0 +1,8 @@
+# Idea 1
+1. **Every page can be created with blocks:** different types of text, pictures, links, mentions and other objects.
+
+2.** You can create collums.** Move the block where you want to create a column.
+
+Add a new block — `use /`
+ Mention other objects like [Idea 2](idea-2.md) — `use @`
+
diff --git a/Anytype.20240802.082116.32/idea-2.md b/Anytype.20240802.082116.32/idea-2.md
new file mode 100644
index 0000000..3c94938
--- /dev/null
+++ b/Anytype.20240802.082116.32/idea-2.md
@@ -0,0 +1,18 @@
+# Idea 2
+## Types
+Objects can be off different types - so pages are different from tasks.
+
+You can think of them as powerful tags that allow you to choose different templates for them and create live filters in sets when you need to create a filter for "all tasks" like here [Tasks](tasks.md)
+
+You can reference tasks, pages and other objects by `add link` in `/ menu`:
+[Create Dashboard](create-dashboard.md)
+[Install Mobile App](install-mobile-app.md)
+[Delete Pre-installed objects](delete-pre-installed-objects.md)
+
+
+
+
+
+
+
+
diff --git a/Anytype.20240802.082116.32/idea-3.md b/Anytype.20240802.082116.32/idea-3.md
new file mode 100644
index 0000000..07ffa63
--- /dev/null
+++ b/Anytype.20240802.082116.32/idea-3.md
@@ -0,0 +1,4 @@
+# Idea 3
+Here is an example of a piece of writing
+[The Internet as our Nervous System: from Cloud to Local-first](the-internet-as-our-nervous-system-from-cloud-.md)
+
diff --git a/Anytype.20240802.082116.32/idea-4.md b/Anytype.20240802.082116.32/idea-4.md
new file mode 100644
index 0000000..dcb3ffe
--- /dev/null
+++ b/Anytype.20240802.082116.32/idea-4.md
@@ -0,0 +1,3 @@
+# Idea 4
+You can insert images and links. For example here is a link to where our inspirations come from.
+[](https://anytype.io/who/inspiration)
diff --git a/Anytype.20240802.082116.32/identity.md b/Anytype.20240802.082116.32/identity.md
new file mode 100644
index 0000000..e773c0d
--- /dev/null
+++ b/Anytype.20240802.082116.32/identity.md
@@ -0,0 +1 @@
+# Identity
diff --git a/Anytype.20240802.082116.32/image-kind.md b/Anytype.20240802.082116.32/image-kind.md
new file mode 100644
index 0000000..52c30f7
--- /dev/null
+++ b/Anytype.20240802.082116.32/image-kind.md
@@ -0,0 +1 @@
+# Image kind
diff --git a/Anytype.20240802.082116.32/image.md b/Anytype.20240802.082116.32/image.md
new file mode 100644
index 0000000..d9a6248
--- /dev/null
+++ b/Anytype.20240802.082116.32/image.md
@@ -0,0 +1 @@
+# Image
diff --git a/Anytype.20240802.082116.32/image_t.md b/Anytype.20240802.082116.32/image_t.md
new file mode 100644
index 0000000..d9a6248
--- /dev/null
+++ b/Anytype.20240802.082116.32/image_t.md
@@ -0,0 +1 @@
+# Image
diff --git a/Anytype.20240802.082116.32/import-type.md b/Anytype.20240802.082116.32/import-type.md
new file mode 100644
index 0000000..c04eee2
--- /dev/null
+++ b/Anytype.20240802.082116.32/import-type.md
@@ -0,0 +1 @@
+# Import Type
diff --git a/Anytype.20240802.082116.32/in-progress.md b/Anytype.20240802.082116.32/in-progress.md
new file mode 100644
index 0000000..6814cc2
--- /dev/null
+++ b/Anytype.20240802.082116.32/in-progress.md
@@ -0,0 +1 @@
+# In Progress
diff --git a/Anytype.20240802.082116.32/install-mobile-app.md b/Anytype.20240802.082116.32/install-mobile-app.md
new file mode 100644
index 0000000..80526ca
--- /dev/null
+++ b/Anytype.20240802.082116.32/install-mobile-app.md
@@ -0,0 +1,16 @@
+# Install Mobile App
+
+## Details
+ ---
+1. Visit [https://download.anytype.io](https://download.anytype.io) or scan the QR code below using your mobile device to install the app.
+
+
+### iOS
+![qr-code-app-store.png](files/qr-code-app-store.png)
+### Android
+![qr-code-google-play.png](files/qr-code-google-play.png)
+1. Launch the app and tap "I have a Key".
+2. Use your Key to sign in.
+
+To find your Key, go to Anytype → Settings → Vault and open the Key section.
+
diff --git a/Anytype.20240802.082116.32/internal-flags.md b/Anytype.20240802.082116.32/internal-flags.md
new file mode 100644
index 0000000..22fb96e
--- /dev/null
+++ b/Anytype.20240802.082116.32/internal-flags.md
@@ -0,0 +1 @@
+# Internal flags
diff --git a/Anytype.20240802.082116.32/is-acl-shared.md b/Anytype.20240802.082116.32/is-acl-shared.md
new file mode 100644
index 0000000..54bb5e5
--- /dev/null
+++ b/Anytype.20240802.082116.32/is-acl-shared.md
@@ -0,0 +1 @@
+# Is Acl Shared
diff --git a/Anytype.20240802.082116.32/is-deleted.md b/Anytype.20240802.082116.32/is-deleted.md
new file mode 100644
index 0000000..bdd869b
--- /dev/null
+++ b/Anytype.20240802.082116.32/is-deleted.md
@@ -0,0 +1 @@
+# Is deleted
diff --git a/Anytype.20240802.082116.32/iso.md b/Anytype.20240802.082116.32/iso.md
new file mode 100644
index 0000000..76600cd
--- /dev/null
+++ b/Anytype.20240802.082116.32/iso.md
@@ -0,0 +1 @@
+# ISO
diff --git a/Anytype.20240802.082116.32/itab.md b/Anytype.20240802.082116.32/itab.md
new file mode 100644
index 0000000..b7e4693
--- /dev/null
+++ b/Anytype.20240802.082116.32/itab.md
@@ -0,0 +1,90 @@
+# iTab
+
+- [Flowus](https://flowus.cn/)
+- [Hipc123](https://www.hipc123.com/)
+- [Kod文件](http://47.107.80.236:8680/)
+- [中科大配置软件源 >](https://mirrors.ustc.edu.cn/help/)
+- [ 清华大学开源软件镜像站>](https://mirrors4.tuna.tsinghua.edu.cn/)
+ ---
+
+# 常用工具
+- [无影云电脑](https://wuying.aliyun.com/appList)
+- [My GITEE](https://gitee.com/ryan6981/)
+- [My Gitee](https://github.com/ryan6981)
+- [Flowus](https://flowus.cn/)
+- [My Craft](https://www.craft.do/)
+- [My Notion](https://www.notion.so/product/ai)
+ ---
+- [TL-SSH/Web版](https://www.terminal.icu/a/home/)
+- [Lightly/Web版](https://lightly.teamcode.com)
+- [阿里Devstudio](https://ide.aliyun.com/)
+- [阿里无影5125830490](https://wuying.aliyun.com/polymerization)
+ ---
+- [Rust-ExpIDE](https://www.rustexplorer.com/b)
+- [KOTLIN代码在线](https://play.kotlinlang.org)
+- [DartPAD代码在线](https://www.69py.xyz/dart-test.html)
+- [在线python运行](https://tool.lu/coderunner/)
+- [程序员盒子](https://www.coderutil.com/)
+ ---
+
+# 常用WEB页
+- [iTab](https://go.itab.link/)
+- [Hipc123](https://www.hipc123.com/)
+- [Yandex](https://yandex.com/)
+- [Bing](https://www.bing.com/)
+ ---
+- [多搜搜](http://duososo.com/)
+- [热盘搜](http://www.repanso.com/)
+- [小白盘](https://www.xiaobaipan.com)
+- [设计导航](http://hao.shejidaren.com/)
+- [搜图导航](https://www.91sotu.com/)
+- [在线PS](https://www.uupoop.com)
+- [设计师导航](https://hao.uisdc.com/)
+ ---
+- [风变编程](https://www.pypypy.cn)
+- [脚本之家](https://www.jb51.net/)
+- [编程导航](https://www.code-nav.cn)
+- [国内主要镜像](http://www.69py.xyz/?p=378)
+- [Tool在线工具箱](https://tooltt.com/)
+ ---
+- [DartPAD](https://dartpad.cn/)
+- [Kotlinlang](https://play.kotlinlang.org)
+- [Python Tip](http://www.pythontip.com/coding/run)
+- [Coderunner](https://tool.lu/coderunner/)
+- [Macflow](https://macflow.net/)
+- [LemonQQ](https://lemon.qq.com/lab/)
+ ---
+- [Nextcloud](http://wp.69py.xyz)
+- [Aliyun-Wuying](https://wuying.aliyun.com/polymerization)
+- [Ryan-Gitee](https://gitee.com/ryan6981)
+- [Aliyundrive](https://www.aliyundrive.com/)
+- [Win11 blueedge ](https://win11.blueedge.me/)
+- [微信网页传文件](https://filehelper.weixin.qq.com/?utm_source=appinn.com)
+ ---
+
+## 国内常用镜像地址
+### - 1. 华为云镜像源 https://mirrors.huaweicloud.com/home
+### - 2. 清华源 https://mirrors.tuna.tsinghua.edu.cn/
+### - 3. 阿里云镜像源 https://developer.aliyun.com/mirror/
+### - 4. 中科大镜像源 https://mirrors.ustc.edu.cn/
+### - 5. 网易开源镜像站 https://mirrors.163.com/
+### - 6. 腾讯云镜像 https://mirrors.cloud.tencent.com/
+ ---
+### - 3.1 清华镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
+### - 3.2 中科大镜像 https://pypi.mirrors.ustc.edu.cn/simple
+### - 3.3 豆瓣镜像 pip install -i http://pypi.douban.com/simple/
+### - 3.3 阿里镜像 pip install -i https://mirrors.aliyun.com/pypi/simple/
+### - 3.4 华中科大镜像 pip install -i http://pypi.hustunique.com/
+### - 3.5 山东理工大学镜像 pip install -i http://pypi.hustunique.com/
+### - 3.6 搜狐镜像 pip install -i http://mirrors.sohu.com/Python/
+### - 3.7 百度镜像 pip install -i https://mirror.baidu.com/pypi/simple
+ ---
+## 大模型
+### HF-Mirror https://hf-mirror.com/
+### Modelscope https://modelscope.cn/models
+```
+### Ollama https://ollama.com/download
+ https://github.com/ollama/ollama
+ https://github.com/open-webui/open-webui
+
+```
diff --git a/Anytype.20240802.082116.32/last-change-id-of-the-object.md b/Anytype.20240802.082116.32/last-change-id-of-the-object.md
new file mode 100644
index 0000000..a248843
--- /dev/null
+++ b/Anytype.20240802.082116.32/last-change-id-of-the-object.md
@@ -0,0 +1 @@
+# Last change ID of the object
diff --git a/Anytype.20240802.082116.32/last-modified-by.md b/Anytype.20240802.082116.32/last-modified-by.md
new file mode 100644
index 0000000..4bd8d03
--- /dev/null
+++ b/Anytype.20240802.082116.32/last-modified-by.md
@@ -0,0 +1 @@
+# Last modified by
diff --git a/Anytype.20240802.082116.32/last-modified-date.md b/Anytype.20240802.082116.32/last-modified-date.md
new file mode 100644
index 0000000..f5e3663
--- /dev/null
+++ b/Anytype.20240802.082116.32/last-modified-date.md
@@ -0,0 +1 @@
+# Last modified date
diff --git a/Anytype.20240802.082116.32/last-opened-date.md b/Anytype.20240802.082116.32/last-opened-date.md
new file mode 100644
index 0000000..273f193
--- /dev/null
+++ b/Anytype.20240802.082116.32/last-opened-date.md
@@ -0,0 +1 @@
+# Last opened date
diff --git a/Anytype.20240802.082116.32/last-used-date.md b/Anytype.20240802.082116.32/last-used-date.md
new file mode 100644
index 0000000..554931d
--- /dev/null
+++ b/Anytype.20240802.082116.32/last-used-date.md
@@ -0,0 +1 @@
+# Last Used date
diff --git a/Anytype.20240802.082116.32/latest-acl-head-id.md b/Anytype.20240802.082116.32/latest-acl-head-id.md
new file mode 100644
index 0000000..827a5f2
--- /dev/null
+++ b/Anytype.20240802.082116.32/latest-acl-head-id.md
@@ -0,0 +1 @@
+# Latest acl head id
diff --git a/Anytype.20240802.082116.32/layout-align.md b/Anytype.20240802.082116.32/layout-align.md
new file mode 100644
index 0000000..c97773f
--- /dev/null
+++ b/Anytype.20240802.082116.32/layout-align.md
@@ -0,0 +1 @@
+# Layout align
diff --git a/Anytype.20240802.082116.32/layout.md b/Anytype.20240802.082116.32/layout.md
new file mode 100644
index 0000000..353dc41
--- /dev/null
+++ b/Anytype.20240802.082116.32/layout.md
@@ -0,0 +1 @@
+# Layout
diff --git a/Anytype.20240802.082116.32/len.md b/Anytype.20240802.082116.32/len.md
new file mode 100644
index 0000000..800dd8a
--- /dev/null
+++ b/Anytype.20240802.082116.32/len.md
@@ -0,0 +1 @@
+# Len
diff --git a/Anytype.20240802.082116.32/life.md b/Anytype.20240802.082116.32/life.md
new file mode 100644
index 0000000..6c76691
--- /dev/null
+++ b/Anytype.20240802.082116.32/life.md
@@ -0,0 +1 @@
+# Life
diff --git a/Anytype.20240802.082116.32/linked-projects.md b/Anytype.20240802.082116.32/linked-projects.md
new file mode 100644
index 0000000..d6b5913
--- /dev/null
+++ b/Anytype.20240802.082116.32/linked-projects.md
@@ -0,0 +1 @@
+# Linked Projects
diff --git a/Anytype.20240802.082116.32/links.md b/Anytype.20240802.082116.32/links.md
new file mode 100644
index 0000000..a8fbd62
--- /dev/null
+++ b/Anytype.20240802.082116.32/links.md
@@ -0,0 +1 @@
+# Links
diff --git a/Anytype.20240802.082116.32/linuxchang-yong.md b/Anytype.20240802.082116.32/linuxchang-yong.md
new file mode 100644
index 0000000..09e8dc3
--- /dev/null
+++ b/Anytype.20240802.082116.32/linuxchang-yong.md
@@ -0,0 +1,135 @@
+# Linux常用
+
+
+
+
+
+```
+# 1. **ls 常用的参数**
+
+(1) ls -a 显示指定目录下所有文件,包括隐藏文件
+
+(2) ls -lh 显示文件的详细信息包括文件大小
+
+(3) ls -lt 按修改时间排序
+
+## 2. **file查看文件类型**
+
+(1) file 文件完整路径:file /abc/a 查看abc目录下的a 文件的类型
+
+## 3. **mkdir -m 创建目录时设置文件的权限**
+
+## 4. **mkdir -p 在上级目录没有创建的情况下创建多个目录**
+
+## 5. **通配符**
+
+#文件查找
+
+如查找示例
+$find . -type f -size +2000M
+find / -type f -size +2048M -exec du -h {} +
+s -lh $(find / -type f -size +2040M)
+
+(1) *任意字符
+
+(2) ?单个任意字符
+
+(3) []单个字符集合,如:[a-z]匹配a~z之间的字符
+
+(4) 反斜杠,取消通配符
+
+(5) [!]非
+
+(6) [^]与
+
+## 6. **chmod 修改已有权限**
+
+(1) chmod ugo+r file1.txt
+
+(2) chmod a+r file1.txt
+
+(3) chmod ug+w o-w file1.txt file2.txt
+
+(4) chmod u+x ex1.py
+
+(5) chmod 777 file
+
+## 7、**ST系统测试、IT集成测试、UT单元测试**
+
+## 8、**mkdir -m创建指定权限的目录**
+
+## 9、**php的运行环境 xampp**
+
+## 10、**tail 命令可用于查看文件的****尾部****内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。****如:tail -f 文件名,查看文件更新日志**
+
+## **11、linux常用命令cp**
+
+(1) cp -r /data/ ./ 复制data目录到当前目录
+
+(2) cp -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
+
+(3) cp -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
+
+## 12、ln 和 ln -s 硬链接和软连接,硬链接类似于Windows中的多个克隆文件,软连接类似于快捷方式
+
+## 13、cat 从头开始显示文件内容,tail从尾部开始显示内容 , more 分页显示
+
+## 14、对已有文件写入内容 cat > +文件名,或者用vi,vim
+
+## 15、Less 按行显示,head 10显示前10行, tail -10 显示最后10行
+
+## 16、> 输出重定向且覆盖,>>尾随输出重定向不覆盖
+
+## 类cat的命令
+
+1. `tac`:该命令是`cat`的反转版本,它会逐行反转文件中的内容并打印出来。
+2. `more`:该命令用于一页一页地显示文件内容。在显示一屏后,更多内容将被暂停,并等待用户按键后继续显示。
+3. `less`:该命令与`more`类似,但它提供更多的功能。`less`允许用户向前或向后浏览文件内容,并且还支持搜索和其他操作。
+4. `head`:该命令用于显示文件的前几行,默认情况下,会显示文件的前10行。可以使用`-n`选项来指定显示的行数。
+5. `tail`:该命令用于显示文件的最后几行,默认情况下,会显示文件的最后10行。可以使用`-n`选项来指定显示的行数。
+6. `nl`:该命令会为文件的每一行添加行号,并打印出来。可以使用`-b`选项来指定添加行号的方式。
+7. `grep`:该命令用于在一个或多个文件中搜索指定的模式。它会查找匹配模式的行,并打印出来。
+8. `awk`:该命令是一个强大的文本处理工具,在处理大量文本数据时非常有用。它可以按照指定的字段分隔符对文件进行处理,并执行各种操作。
+9. `sed`:该命令用于对文本进行替换、删除、插入等操作。它提供了一种方法来编辑文件内容。
+以上是一些常见的类似于`cat`的命令,每个命令都有其特定的用途和功能。根据需要选择合适的命令可以更好地查看和处理文件内容。
+15个必备的Linux命令行工具,你掌握了几个?
+芳斜爱学习2023-05-12 11:09北京
+
+
+Linux 是一种基于 Unix 操作系统的开源操作系统,它提供了许多强大的工具和命令行程序,使得 Linux 成为程序员和系统管理员的首选操作系统。在 Linux 中,有许多常用的命令行程序可以帮助你完成日常工作中的许多任务。在本文中,我们将介绍一些常见的 Linux 命令行程序,以及它们的用途。
+
+1.ls
+ls 命令用于列出当前目录中的文件和文件夹。使用ls 命令时,你可以指定选项来控制输出的格式。例如,使用ls -l 命令可以显示每个文件详细信息,包括文件权限、所有者、文件大小和最后修改时间。
+2.cd
+cd 命令用于更改当前目录。使用 cd 命令时,你可以指定目录的名称来进入该目录。例如,输入cd /usr/bin 可以进入 /usr/bin 目录。
+3.pwd
+pwd 命令用于显示当前目录的路径。当你使用 cd 命令更改目录时,你可以使用 pwd 命令来确定你正在哪个目录中。
+4.mkdir
+mkdir 命令用于创建一个新目录。使用 mkdir 命令时,你可以指定目录的名称和路径。例如,输入 mkdir /tmp/test 可以在 /tmp 目录下创建一个名为 test 的目录。
+5.rm
+rm 命令用于删除文件或目录。使用 rm 命令时,你可以指定选项来控制删除的方式。例如,输入 rm -r /tmp/test 可以删除 /tmp/test 目录以及其下所有文件和子目录。
+6.cp
+cp 命令用于复制文件或目录。使用 cp 命令时,你可以指定源文件或目录的路径及目标路径。例如,输入cp /tmp/file.txt /home/user/ 可以将 /tmp 目录下的 file.txt 文件复制到 /home/user 目录下。
+7.mv
+mv 命令用于移动文件或目录,也可以用于重命名文件或目录。使用 mv 命令时,你可以指定源文件或目录的路径以及目标路径。例如,输入 mv /tmp/file.txt /home/user/ 可以将 /tmp 目录下的 file.txt 文件移动到 /home/user 目录下。
+8.cat
+cat 命令用于显示文件的内容。使用 cat 命令时,你可以指定文件的路径。例如,输入 cat /tmp/file.txt 可以显示 /tmp 目录下的 file.txt 文件的内容。
+9.grep
+grep 命令用于在文件中查找指定的字符串。使用 grep 命令时,你可以指定要查找的字符串和文件的路径。例如,输入 grep "example" /tmp/file.txt 可以在 /tmp 目录下的 file.txt 文件中查找包含 "example" 字符串的行。
+10.chmod
+chmod 命令用于更改文件或目录的权限。使用 chmod 命令时,你可以指定文件或目录的权限以及所有者和组。例如,输入chmod 755 /tmp/file.txt可以将 /tmp 目录下的 file.txt 文件的权限设置为 755。
+11.chown
+chown 命令用于更改文件或目录的所有者和组。使用 chown 命令时,你可以指定文件或目录的所有者和组。例如,输入 chown user:group /tmp/file.txt 可以将 /tmp 目录下的 file.txt 文件的所有者设置为 user,组设置为 group。
+12.tar
+tar 命令用于打包和压缩文件或目录。使用 tar 命令时,你可以指定要打包的文件或目录以及输出的文件名。例如,输入 tar -czvf archive.tar.gz /tmp 可以将 /tmp 目录打包成一个名为 archive.tar.gz 的压缩文件。
+13.scp
+scp 命令用于在本地主机和远程主机之间复制文件。使用 scp 命令时,你可以指定源文件的路径以及目标主机和目标路径。例如,输入 scp /tmp/file.txt user@remote:/home/user/ 可以将 /tmp 目录下的 file.txt 文件复制到远程主机的 /home/user 目录下。
+14.ssh
+ssh 命令用于远程登录到另一个主机。使用 ssh 命令时,你需要指定目标主机的 IP 地址或域名,以及用户名和密码。例如,输入 ssh user@remote 可以使用用户名 user 和密码远程登录到名为 remote 的主机。
+15.top
+top 命令用于显示正在运行的进程和系统资源的使用情况。使用 top 命令时,你可以看到进程的 CPU 使用率、内存使用率和系统负载等信息。
+以上是一些常见的 Linux 命令行程序。当然,还有很多其他有用的命令和选项可以帮助你更好地管理和使用 Linux 系统。在实际工作中,掌握这些命令并且熟练运用它们,可以大大提高你的工作效率和操作系统的使用体验。
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/linuxruan-jian-an-zhuang.md b/Anytype.20240802.082116.32/linuxruan-jian-an-zhuang.md
new file mode 100644
index 0000000..2ce689b
--- /dev/null
+++ b/Anytype.20240802.082116.32/linuxruan-jian-an-zhuang.md
@@ -0,0 +1,70 @@
+# LINUX软件安装
+
+
+
+vscode-server 一键安装
+```
+### vscode-server 一键安装
+
+安装vscode-server sudo apt install curl curl -fsSL https://code-server.dev/install.sh | sh -s -- --prefix=/opt/software/vscode-server
+
+或者
+
+curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run
+
+
+
+#### Rust一键安装
+
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+
+
+### X-cmd 一键安装
+
+eval "$(curl https://get.x-cmd.com)" 或 eval "$(wget -O- https://get.x-cmd.com)"
+
+```
+
+
+
+```
+### Miniforge下载地址
+
+https://mirrors4.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/Release%2024.3.0-0/
+
+
+
+### vscode下载地址
+
+https://code.visualstudio.com/Download
+
+
+
+### Installing Helix
+
+https://docs.helix-editor.com/install.html
+
+### Anytype知识管理工具
+
+https://download.anytype.io/
+
+### 终端工具下载
+
+https://lightly.teamcode.com/ ## 写代码
+
+https://www.terminal.icu/
+
+https://mobaxterm.mobatek.net/download-home-edition.html
+
+```
+
+
+
+
+
+#
+
+
+
+
diff --git a/Anytype.20240802.082116.32/linuxxia-chao-qing-liang-ji-rustkai-fa-huan-ji.md b/Anytype.20240802.082116.32/linuxxia-chao-qing-liang-ji-rustkai-fa-huan-ji.md
new file mode 100644
index 0000000..c96f3ce
--- /dev/null
+++ b/Anytype.20240802.082116.32/linuxxia-chao-qing-liang-ji-rustkai-fa-huan-ji.md
@@ -0,0 +1,64 @@
+# Linux下超轻量级Rust开发环境搭建
+## 一、安装Rust
+Rust语言在国内逐步开始流行,但开发环境的不成熟依然困扰不少小伙伴。
+结合我个人的使用体验,推荐一种超轻量级的开发环境:Rust + Helix Editor。运行环境需求很低,可以直接在Linux终端里进行代码开发。对于工程不是太过庞大的Rust项目,是一种不错的选择。
+Linux环境下,先从Rust安装开始,流水帐。
+我们选择从中国科学技术大学的镜像网站下载环境:
+```
+$> export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static $> export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+
+```
+创建上面两个环境变量,让rustup的安装脚本从镜像站点下载开发环境:
+```
+$> curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+```
+如果需要代理才能访问互联网,可以这样:
+```
+$> curl --proxy "socks5://ip:port" --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+按提示,运行一下:source "$HOME/.cargo/env"。
+
+使用rustup命令再安装两个组件:
+
+ $> rustup component add rust-src
+ $> rustup component add rust-analyze
+
+```
+## 官网推荐安装
+使用 Rustup(推荐)
+您似乎正在运行 Windows。要使用 Rust,请下载安装器,然后运行该程序并遵循屏幕上的指示。当看到相应提示时,您可能需要安装[ Microsoft C++ 生成工具](https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/)。如果您不在 Windows 上,参看 “[其他安装方式](https://forge.rust-lang.org/infra/other-installation-methods.html)”。
+[下载 rustup-init.exe(32位)](https://static.rust-lang.org/rustup/dist/i686-pc-windows-msvc/rustup-init.exe)
+[下载 rustup-init.exe(64位)](https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe)
+Windows 的 Linux 子系统(WSL)
+如果您是 Windows 的 Linux 子系统(WSL)用户,要安装 Rust,请在终端中运行以下命令,然后遵循屏幕上的指示。
+```
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+```
+### Rust 安装须知
+### 入门
+如果您希望通过一份详细的步骤指南来开始学习 Rust ,请阅读马上开始页面。
+### 用 rustup 管理工具链
+```
+ Rust 由工具 rustup 安装和管理。Rust 有着以 6 星期为周期的 快速版本迭代机制,支持 大量平台,因而不同时期存在大量不同的 Rust 构建版本。 rustup 用于管理不同平台下的 Rust 构建版本并使其互相兼容, 支持安装由 Beta 和 Nightly 频道发布的版本,并支持其他用于交叉编译的编译版本。
+
+如果您曾经安装过 rustup,可以执行 rustup update 来升级 Rust。
+
+更多信息请查阅 rustup 文档。
+
+```
+### 配置 PATH 环境变量
+```
+ 在 Rust 开发环境中,所有工具都安装在 ~/.cargo/bin 目录中,您可以在这里找到包括 rustc、cargo 和 rustup 在内的 Rust 工具链。
+
+Rust 开发者通常会将该目录加入 PATH环境变量中。在安装过程中,rustup 会尝试配置 PATH。 由于不同平台、命令行 Shell 之间存在差异,rustup 中也可能存在 Bug,因此在终端重启或用户重新登录之前,rustup 对 PATH 的修改可能不会生效,甚至完全无效。
+
+如果安装后在终端尝试执行 rustc --version 失败,那么,以上内容就是最可能的原因。
+
+```
+### 卸载 Rust
+```
+在任何时候如果您想卸载 Rust,您可以运行 rustup self uninstall。但我们会想念您的!
+
+```
diff --git a/Anytype.20240802.082116.32/lyrics.md b/Anytype.20240802.082116.32/lyrics.md
new file mode 100644
index 0000000..bcc2222
--- /dev/null
+++ b/Anytype.20240802.082116.32/lyrics.md
@@ -0,0 +1 @@
+# Lyrics
diff --git a/Anytype.20240802.082116.32/max-values.md b/Anytype.20240802.082116.32/max-values.md
new file mode 100644
index 0000000..05bab4b
--- /dev/null
+++ b/Anytype.20240802.082116.32/max-values.md
@@ -0,0 +1 @@
+# Max values
diff --git a/Anytype.20240802.082116.32/mime-type.md b/Anytype.20240802.082116.32/mime-type.md
new file mode 100644
index 0000000..d6204be
--- /dev/null
+++ b/Anytype.20240802.082116.32/mime-type.md
@@ -0,0 +1 @@
+# Mime type
diff --git a/Anytype.20240802.082116.32/name.md b/Anytype.20240802.082116.32/name.md
new file mode 100644
index 0000000..f9af284
--- /dev/null
+++ b/Anytype.20240802.082116.32/name.md
@@ -0,0 +1 @@
+# Name
diff --git a/Anytype.20240802.082116.32/note.md b/Anytype.20240802.082116.32/note.md
new file mode 100644
index 0000000..c88e0b5
--- /dev/null
+++ b/Anytype.20240802.082116.32/note.md
@@ -0,0 +1 @@
+# Note
diff --git a/Anytype.20240802.082116.32/note_r.md b/Anytype.20240802.082116.32/note_r.md
new file mode 100644
index 0000000..945059d
--- /dev/null
+++ b/Anytype.20240802.082116.32/note_r.md
@@ -0,0 +1 @@
+# Note
diff --git a/Anytype.20240802.082116.32/notes.md b/Anytype.20240802.082116.32/notes.md
new file mode 100644
index 0000000..0d0830b
--- /dev/null
+++ b/Anytype.20240802.082116.32/notes.md
@@ -0,0 +1,2 @@
+# Notes
+Quick notes for everyday use
diff --git a/Anytype.20240802.082116.32/object-restrictions.md b/Anytype.20240802.082116.32/object-restrictions.md
new file mode 100644
index 0000000..2fb638a
--- /dev/null
+++ b/Anytype.20240802.082116.32/object-restrictions.md
@@ -0,0 +1 @@
+# Object restrictions
diff --git a/Anytype.20240802.082116.32/object-type.md b/Anytype.20240802.082116.32/object-type.md
new file mode 100644
index 0000000..d012870
--- /dev/null
+++ b/Anytype.20240802.082116.32/object-type.md
@@ -0,0 +1 @@
+# Object type
diff --git a/Anytype.20240802.082116.32/objectives.md b/Anytype.20240802.082116.32/objectives.md
new file mode 100644
index 0000000..ba76b1b
--- /dev/null
+++ b/Anytype.20240802.082116.32/objectives.md
@@ -0,0 +1 @@
+# Objectives
diff --git a/Anytype.20240802.082116.32/old-anytype-id.md b/Anytype.20240802.082116.32/old-anytype-id.md
new file mode 100644
index 0000000..4aebcda
--- /dev/null
+++ b/Anytype.20240802.082116.32/old-anytype-id.md
@@ -0,0 +1 @@
+# Old Anytype ID
diff --git a/Anytype.20240802.082116.32/origin.md b/Anytype.20240802.082116.32/origin.md
new file mode 100644
index 0000000..5e0f5b9
--- /dev/null
+++ b/Anytype.20240802.082116.32/origin.md
@@ -0,0 +1 @@
+# Origin
diff --git a/Anytype.20240802.082116.32/original-creation-date.md b/Anytype.20240802.082116.32/original-creation-date.md
new file mode 100644
index 0000000..ebfd769
--- /dev/null
+++ b/Anytype.20240802.082116.32/original-creation-date.md
@@ -0,0 +1,2 @@
+# Original creation date
+Original date of imported object from some source
diff --git a/Anytype.20240802.082116.32/page.md b/Anytype.20240802.082116.32/page.md
new file mode 100644
index 0000000..121a430
--- /dev/null
+++ b/Anytype.20240802.082116.32/page.md
@@ -0,0 +1 @@
+# Page
diff --git a/Anytype.20240802.082116.32/participant-permissions.md b/Anytype.20240802.082116.32/participant-permissions.md
new file mode 100644
index 0000000..8762506
--- /dev/null
+++ b/Anytype.20240802.082116.32/participant-permissions.md
@@ -0,0 +1 @@
+# Participant permissions
diff --git a/Anytype.20240802.082116.32/participant-status.md b/Anytype.20240802.082116.32/participant-status.md
new file mode 100644
index 0000000..b88ca6c
--- /dev/null
+++ b/Anytype.20240802.082116.32/participant-status.md
@@ -0,0 +1 @@
+# Participant status
diff --git a/Anytype.20240802.082116.32/picture.md b/Anytype.20240802.082116.32/picture.md
new file mode 100644
index 0000000..379ddb9
--- /dev/null
+++ b/Anytype.20240802.082116.32/picture.md
@@ -0,0 +1 @@
+# Picture
diff --git a/Anytype.20240802.082116.32/pre-installed.md b/Anytype.20240802.082116.32/pre-installed.md
new file mode 100644
index 0000000..169e223
--- /dev/null
+++ b/Anytype.20240802.082116.32/pre-installed.md
@@ -0,0 +1,2 @@
+# pre-installed
+
diff --git a/Anytype.20240802.082116.32/priority.md b/Anytype.20240802.082116.32/priority.md
new file mode 100644
index 0000000..5be1230
--- /dev/null
+++ b/Anytype.20240802.082116.32/priority.md
@@ -0,0 +1 @@
+# Priority
diff --git a/Anytype.20240802.082116.32/project.md b/Anytype.20240802.082116.32/project.md
new file mode 100644
index 0000000..a26f60c
--- /dev/null
+++ b/Anytype.20240802.082116.32/project.md
@@ -0,0 +1,8 @@
+# Project
+## Describe your project…
+ ---
+What is it for…
+Goals…
+Measure of success…
+
+
diff --git a/Anytype.20240802.082116.32/project_e.md b/Anytype.20240802.082116.32/project_e.md
new file mode 100644
index 0000000..a26f60c
--- /dev/null
+++ b/Anytype.20240802.082116.32/project_e.md
@@ -0,0 +1,8 @@
+# Project
+## Describe your project…
+ ---
+What is it for…
+Goals…
+Measure of success…
+
+
diff --git a/Anytype.20240802.082116.32/project_j.md b/Anytype.20240802.082116.32/project_j.md
new file mode 100644
index 0000000..fd0bb55
--- /dev/null
+++ b/Anytype.20240802.082116.32/project_j.md
@@ -0,0 +1 @@
+# Project
diff --git a/Anytype.20240802.082116.32/project_v.md b/Anytype.20240802.082116.32/project_v.md
new file mode 100644
index 0000000..a26f60c
--- /dev/null
+++ b/Anytype.20240802.082116.32/project_v.md
@@ -0,0 +1,8 @@
+# Project
+## Describe your project…
+ ---
+What is it for…
+Goals…
+Measure of success…
+
+
diff --git a/Anytype.20240802.082116.32/psji-qiao-8ge-bi-xue-xiao-zhi-shi.md b/Anytype.20240802.082116.32/psji-qiao-8ge-bi-xue-xiao-zhi-shi.md
new file mode 100644
index 0000000..ad0d28a
--- /dev/null
+++ b/Anytype.20240802.082116.32/psji-qiao-8ge-bi-xue-xiao-zhi-shi.md
@@ -0,0 +1,43 @@
+# PS技巧8个必学小知识
+
+
+![b46c8406b00b824c47100acd3f8cdfc7610fbef024c1f-jqnohs\_fw658webp](files/b46c8406b00b824c47100acd3f8cdfc7610fbef024c1f-)
+```
+###标尺校正
+```
+![e12d2f1541c3ee702d42b8ea5c323634f740a4de324a2-KpT2Yi\_fw658webp](files/e12d2f1541c3ee702d42b8ea5c323634f740a4de324a2-)
+
+
+```
+###透视裁剪工具
+```
+![49f26a405defb02936a0fc62e5a256bc604dcd2a39593-AiuBU8\_fw658webp](files/49f26a405defb02936a0fc62e5a256bc604dcd2a39593-)
+
+
+
+![02fd03cb6ebe3909fb385366eb90d80ce063e6ba3a130-iGJWsf\_fw658webp](files/02fd03cb6ebe3909fb385366eb90d80ce063e6ba3a130-)
+
+
+
+![7d88ac44cff4206de33bce30f3348990e222451c3ca20-suqkJU\_fw658webp](files/7d88ac44cff4206de33bce30f3348990e222451c3ca20-)
+
+
+
+```
+### 消失的点
+
+
+
+```
+![c72d99d2730c142e10c4f3669133c02724f48f533ebf5-oj90JA\_fw658webp](files/c72d99d2730c142e10c4f3669133c02724f48f533ebf5-)
+
+
+
+
+![d4c125890cd0d34032f91fd43f5ecedfee190c753508b-oedD68\_fw658webp](files/d4c125890cd0d34032f91fd43f5ecedfee190c753508b-)
+
+
+![5cb3e631ea0801439655caf8d0f32c323791ee51350e7-ofKPqM\_fw658webp](files/5cb3e631ea0801439655caf8d0f32c323791ee51350e7-)
+
+
+![d95547d5812fcf8f26e53fa0f672a518b50dfb883e6b1-a0umwu\_fw658webp](files/d95547d5812fcf8f26e53fa0f672a518b50dfb883e6b1-)
diff --git a/Anytype.20240802.082116.32/py_qnotes.md b/Anytype.20240802.082116.32/py_qnotes.md
new file mode 100644
index 0000000..8c506e4
--- /dev/null
+++ b/Anytype.20240802.082116.32/py_qnotes.md
@@ -0,0 +1,3047 @@
+# py\_qnotes
+# 用法查询笔记
+# Python基础知识
+```
+
+
+## 用法查询笔记: Python基础知识
+
+## 如何解题:
+
+**1.分析问题,明确结果**
+
+**2.思考需要的知识,或搜索新知识**
+
+**3.思考切入点**
+
+**4.尝试解决问题的一部分**
+
+**5.重复1-4步**
+
+完成一个项目的流程
+
+1.明确项目目标
+
+2.分析过程,拆解项目
+
+3.逐步执行,代码实现
+
+
+```
+## 1.1、理解:print()函数
+```
+### **1、理解:print()函数**
+
+\`\`\`python
+#功能:打印
+#print()函数:
+print('') #单引号和双引号:直接输出
+print(''' ''') #三引号:可以进行格式换行
+print() #让计算机读懂括号里的内容,打印最终的结果
+#变量命名要规范:
+ 1.只能是一个词;
+ 2.只能包含字母、数字和下划线;
+ 3.不能以数字开头;
+ 4.尽量描述包含的数据内容;
+ 5.不要使用Python函数名或关键字。
+#变量与赋值
+ 赋值用[=] 表示
+ 变量的最终值等于最后赋值的值
+#转义字符: \+需 要转义的功能的英文缩写字母
+
+#补充小知识:
+end='' #可以打印出不换行
+print('') #双引号内为空,用它来换行
+
+```
+## 1.2、知识: print()函数
+```
+print(520)
+#》》520
+print(1+1)
+#》》2
+print('千寻')
+#》》千寻
+print("一起玩吧") # 单引号和双引号输出结果一样
+#》》一起玩吧
+print('''我愿意留在汤婆婆的澡堂里工作两年,
+第一年在锅炉房和锅炉爷爷一起烧锅炉水,
+将在这个世界变成一头猪。
+''')
+#》》我愿意留在汤婆婆的澡堂里工作两年,
+#》》第一年在锅炉房和锅炉爷爷一起烧锅炉水,
+#》》将在这个世界变成一头猪。
+print('''
+=============================
+ 干物妹!うまるちゃんの年齢
+=============================
+''') #
+#》》=============================
+#》》 干物妹!うまるちゃんの年齢
+#》》=============================
+
+print('我愿意留在汤婆婆的澡堂里工作两年,\n如果我违背工作内容的话,\n将在这个世界变成一头猪。')
+ #\n之外,转义字符还有很多,它们的特征就是:反斜杠+想要实现的转义功能首字母。
+#》》我愿意留在汤婆婆的澡堂里工作两年,
+#》》如果我违背工作内容的话,
+#》》将在这个世界变成一头猪。
+name='小千'
+print(name)
+#》》小千
+name='魔法少女千酱'
+name='夏目千千'
+name='千寻'
+print(name) #虽然name被赋值了两次,但最后一次赋值的值是【千寻】,因此能打印出【千寻】
+#》》小千
+
+who = '我的'
+action = '是'
+destination = '镜像世界'
+number = '153'
+code = '通行密码'
+print(who+destination+code+action+number) #字符串拼接:用字符串拼接符号【+】,将需要拼接的变量连在一起.
+#》》我的镜像世界通行密码是153
+
+hero = '我'
+organization = '风变编程'
+identity = '学员'
+action = '是'
+ID = '007'
+print(hero+action+organization+identity+ID) #字符串拼接能让我们的数据整合更为灵活,组合出任意我们想要的内容
+print(organization+identity+ID+action+hero)
+#》》我是风变编程学员007
+#》》风变编程学员007是我
+
+who = '我的'
+action = '是'
+destination = '镜像世界'
+number = 153
+code = '通行密码'
+print(type(who)) #type()函是帮助我们查询不确定数据的类型
+print(type(action))
+print(type(destination))
+print(type(number))
+print(type(code))
+#》》
+#》》
+#》》
+#》》
+#》》
+
+```
+## 2、理解: 数据转换
+```
+#基本类型
+字符串-str #字符串英文string,简写str。只要是被【单/双/三引号】这层皮括起来的内容,不论那个内容是中文、英文、数字甚至火星文。只要是被括起来的,就表示是字符串类型。
+整数-int #整数英文为integer,简写做int。和我们数学课本中定义的一样:是正整数、负整数和零的统称,是没有小数点的数字。
+浮点数-float #浮点数的英文名是float,与整数(int)和字符串(str)不同,浮点数没有简写。带小数点的数字.
+#数据拼接
+使用符号 '+' #利用数据拼接符号【+】,将需要拼接的变量连在一起就行了。目的:数据整合
+#相关函数
+str() #作用:将其他类型转成字符串
+int() #作用:将其他类型转成整数
+float() #作用:将其他类型转成浮点数
+#例如:
+1、字符串(str): 用引号括起来的文本
+ 案例: '千寻'、'2'’、 'love'
+2、整数(int):普通的整数数字
+ 案例: 2、40、-11
+3、浮点数(float): 带小数点的数
+ 案例: 12.0、 5.5、-0.13
+
+```
+### 2.1知识: 数据转换
+```
+magic = '水仙花数'
+action = '是'
+unit = '个'
+expression = '=1x1x1+5x5x5+3x3x3'
+number = 153
+print(str(number)+expression+action+unit+magic) #str()函数把数字转换成字符串
+#》》153=1x1x1+5x5x5+3x3x3是个水仙花数
+
+number1 = '6'
+number2 = '1'
+print(int(number1)+int(number2)) #int()函数把字符串转换成整数
+#》》7
+print(int(3.8)) #int()函数的本质是将数据转换为整数。int()函数会做取整处理
+#》》 3
+
+height = 188.0
+weight = 180.0
+age = 89
+print(height)
+print(weight)
+print(float(age)) #float()函数也可以将整数和字符串转换为浮点类型
+#》》188.0
+#》》180.0
+#》》89.0
+
+```
+## 3、知识: 转义字符
+```
+#转义字符是一种特殊的字符常量,在编程语言中,我们用转义字符表示不能直接显示的字符,比如换行键、后退键,回车键等。
+#比如在单引号输出时,我们不能直接使用格式换行,那么就可以使用转义字符 \n 进行换行
+转义字符 意义
+\a 响铃(BEL)
+\b 退格(BS),将当前位置移到前一列
+\f 换页(FF),将当前位置移到下页开头
+\n 换行(L .F),将当前位置移到下一行开头
+\r 回车(CR),将当前位置移到本行开头
+\t 水平制表(HT) (跳到下一个TAB位置)
+\v 垂直制表(VT)
+\\ 代表一个反斜线字符
+\' 代表一个单引号(撇号)字符
+\'' 代表一个双引号字符
+\0 空字符(NUL)
+\ddd 1到3位八进制所代表的任意字符
+\xhh 1到2位十六进制所代表的任意字符
+注意:区分,斜杠"/"与反斜杠"\",此处不可互换
+
+Python转义字符
+在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:
+转义宇符 描 述
+\(在行尾时) 续行符
+\\ 反斜杠符号
+\' 单引号
+\'' 双引号
+\a 响铃
+\b 5 退格(Backspace),将当前位置移到前一列
+\e 转义
+\000 空
+\n 换行
+\V 纵向制表符
+\t 横向制表符
+\r 回车
+\f 换页
+\oyy 八进制数,yy代表的字符,例如: \012代表换行
+\xyy 十六进制数,yy代表的字符,例如: \x0a代表换行
+\other 其它的字符以普通格式输出
+
+```
+## 4、知识: 算数运算符
+```
+print( 2+1) #加法
+#》》3
+print( 1-2) #減法
+#》》-1
+print(1*2) #乘法
+#》》2
+print( 1/ 2) #除法
+#》》0.5
+print( 2**3) #冪(呟里是2的3次方)
+#》》8
+print ( 10%3) #取模(做除法返回余数)
+#》》1
+print(10/ /3) #取整除(做除法返回商的整数部分)
+#》》3
+
+```
+## 5、知识: 格式化字符串
+```
+知识:格式化字符串
+a=10
+b=3. 1415926
+c='哈哈'
+print( '我今年%d岁了' %a) # %d代表填充整数到指定位置
+#》》我今年10岁了
+print( '我知道圆周率是%f' %b) # %f代表填充浮点数到指定位置
+#》》我知道圆周率是3.141593
+print( '我%s大笑' %c) # %s代表填充字符串到指定位置
+#》》我哈哈大笑
+print( '我今年%d岁了,我知道圆周率是%f,%s!' %(a,b,c)) #同时填充多个占位
+#》》我今年10岁了,我知道圆周率是3.141593,哈哈!
+
+#format用法
+ 相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’
+#使用方法由两种:b.format(a)和format(a,b)。
+#1、基本用法
+ (1)不带编号,即“{}”
+ (2)带数字编号,可调换顺序,即“{1}”、“{2}”
+ (3)带关键字,即“{a}”、“{tom}”
+ >>> print('{} {}'.format('千锋','教育')) # 不带字段
+ #》》千锋 教育
+ >>> print('{0} {1}'.format('千锋','教育')) # 带数字编号
+ #》》千锋 教育
+ >>> print('{0} {1} {0}'.format('千锋','教育')) # 打乱顺序
+ #》》 千锋 教育 千锋
+ >>> print('{1} {1} {0}'.format('千锋','教育'))
+ #》》教育 教育 千锋
+ >>> print('{a} {b} {a}'.format(a='千锋',b='教育')) # 带关键字
+ #》》千锋 教育 千锋
+#2、进阶用法
+(1)< (默认)左对齐、> 右对齐、^ 中间对齐、= (只用于数字)在小数点后进行补齐
+(2)取位数“{:4s}”、"{:.2f}"等.
+
+```
+## 格式化字符串格式化字符串的进阶用法
+```
+
+
+方法 [str.format()](https://docs.python.org/3/library/stdtypes.html#str.format) 的基本用法如下:
+
+> > print('We are the {} who say "{}!"'.format('knights', 'Ni'))
+We are the knights who say "Ni!"
+大括号和其中的字符会被替换成传入 [str.format()](https://docs.python.org/3/library/stdtypes.html#str.format) 的参数。大括号中的数值指明使用传入 [str.format()](https://docs.python.org/3/library/stdtypes.html#str.format) 方法的对象中的哪一个:
+
+> > print('{0} and {1}'.format('spam', 'eggs'))
+spam and eggs
+
+> > print('{1} and {0}'.format('spam', 'eggs'))
+eggs and spam
+如果在 [str.format()](https://docs.python.org/3/library/stdtypes.html#str.format) 调用时使用关键字参数,可以通过参数名来引用值:
+
+> > print('This {food} is {adjective}.'.format(
+... food='spam', adjective='absolutely horrible'))
+This spam is absolutely horrible.
+位置参数和关键字参数可以随意组合:
+
+> > print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
+other='Georg'))
+The story of Bill, Manfred, and Georg. `'!a'` (应用 [ascii()](https://docs.python.org/3/library/functions.html#ascii)),`'!s'` (应用 [str()](https://docs.python.org/3/library/stdtypes.html#str) )和 `'!r'` (应用 [repr()](https://docs.python.org/3/library/functions.html#repr) )可以在格式化之前转换值:
+
+> > import math
+
+> > print('The value of PI is approximately {}.'.format(math.pi))
+The value of PI is approximately 3.14159265359.
+
+> > print('The value of PI is approximately {!r}.'.format(math.pi))
+The value of PI is approximately 3.141592653589793.
+字段名后允许可选的 `':'` 和格式指令。这允许对值的格式化加以更深入的控制。下例将 Pi 转为三位精度。
+
+> > import math
+
+> > print('The value of PI is approximately {0:.3f}.'.format(math.pi))
+The value of PI is approximately 3.142.
+在字段后的 `':'` 后面加一个整数会限定该字段的最小宽度,这在美化表格时很有用:
+
+> > table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
+
+> > for name, phone in table.items():
+... print('{0:10} ==> {1:10d}'.format(name, phone))
+...
+Jack ==> 4098
+Dcab ==> 7678
+Sjoerd ==> 4127
+如果你有个实在是很长的格式化字符串,不想分割它。如果你可以用命名来引用被格式化的变量而不是位置就好了。有个简单的方法,可以传入一个字典,用中括号( `'[]'` )访问它的键:
+
+> > table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
+
+> > print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
+'Dcab: {0[Dcab]:d}'.format(table))
+Jack: 4098; Sjoerd: 4127; Dcab: 8637678
+也可以用 ‘**’ 标志将这个字典以关键字参数的方式传入:
+
+> > table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
+
+> > print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
+Jack: 4098; Sjoerd: 4127; Dcab: 8637678
+这种方式与新的内置函数 [vars()](https://docs.python.org/3/library/functions.html#vars) 组合使用非常有效。该函数返回包含所有局部变量的字典。
+要进一步了解字符串格式化方法 [str.format()](https://docs.python.org/3/library/stdtypes.html#str.format),参见 [格式字符串语法](https://docs.python.org/3/library/string.html#formatstrings)。
+
+
+
+
+
+### **6、理解: input()函数**
+
+\`\`\`python
+input()函数的数据类型 #函数返回类型,必为str 不管你在终端输入的是整数还是字符串, 输入值必为字符串。
+ 有问有答,有来有往 #终端区输入
+ 函数好用,赋值第一 #必须赋值
+ 返回类型,必为str #输入值类型为字符串
+ 输入值需要整数时 #想要整数,源头转换,input()函数的结果需强制转换
+
+```
+## 6.2、知识: input()函数
+```
+name = input('请输入你的名字:')
+print(name)
+
+name=input('请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字: ') #用input()收集信息
+print(name)
+ #》》请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字: 拉文克劳
+ #》》拉文克劳
+
+choice = int(input('请输入您的选择:'))
+if choice==1:
+ print('霍格沃茨欢迎您的到来')
+else:
+ print('您可是被梅林选中的孩子,我们不接受这个选项.')
+ #》》请输入您的选择:1
+ #》》霍格沃茨欢迎您的到来
+
+money = int(input('你一个月工资多少钱?'))
+#将输入的工资数(字符串),强制转换为整数
+if money >= 10000:
+#当工资数(整数)大于等于10000(整数)时
+ print('土豪我们做朋友吧!')
+#打印if条件下的结果
+else:
+#当工资数(整数)小于10000(整数)时
+ print('我负责赚钱养家,你负责貌美如花~')
+#打印else条件下
+ #》》你一个月工资多少钱?12000
+ #》》土豪我们做朋友吧?
+
+import time
+print('亲爱的同学:')
+time.sleep(1)
+print('我们愉快地通知您,您已获准在霍格沃茨魔法学校就读。')
+time.sleep(2)
+ #》》亲爱的同学:
+ #》》我们愉快地通知您,您已获准在霍格沃茨魔法学校就读。
+
+import time #python time 时间模块
+import random #random模块
+time.sleep(1.5)
+print(' \n——————现在是第一局——————' )
+player_life = random.randint(100,150) ##用于生成一个100到150的整数
+player_attack = random.randint(30,50) ##用于生成一个130到50的整数
+enemy_life = random.randint(100,150)
+enemy_attack = random.randint(30,50)
+print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))
+print('------------------------')
+time.sleep(1) # time时间模块,等待时间为1秒
+print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))
+print('-----------------------')
+time.sleep(1)
+ #》》——————现在是第一局——————
+ #》》【玩家】
+ #》》血量:147
+ #》》攻击:48
+ #》》------------------------
+ #》》【敌人】
+ #》》血量:101
+ #》》攻击:34
+ #》》-----------------------
+
+```
+## 7、理解: if...elif...else
+```
+#if..else...知识点:
+1、单向判断:if #含义:如果.....就....
+2、双向判断:if ... else ... # 含义:如果...就...否则... 双向判断语句是:如果不满足if的条件,就执行else下的命令。
+2. 多向判断:if…elif…else… #含义:如果...如果...否则... 三者所代表的条件是互斥的。
+#if..elif..else...知识点
+1. [if..elf..else..]多向判断语句是:如果不满足if的条件,就判断是否满足elif下的命令,满足执行,不满足执行else下的命令。
+2. if、elif和else三者所代表的条件是互斥的。
+3. elif后可不接else。
+#if条件判断
+ #一、条件判断
+ 1、#单向判断: if #》》逻辑:如果..... 就.....注意:冒号下缩进
+ 2、#双向判断: if..else... #》》逻辑:如果.不满足..就.注意: else需要-个平级的前提条件,条件可以是if也可以是其他
+ 3、#多向判断: if..elif..else.. #》》逻辑:如果..不满足.就下一个....再下一个..注意: elif需要if, 但可不需要else
+#二、if嵌套 #》》 条件套条件 额外条件要在基础条件下缩进
+#三、嵌套写法 #》》 扒洋葱式写法 #》》 1.写基础条件代码 2.写基础条件1的额外条件 3.写基础条件2的额外条件
+
+```
+## 7.2、知识: if...elif...else
+```
+#例一:
+stonenumber=3 # 赋值语句:为宝石数量赋值
+# 条件:如果你拥有的宝石数量大于等于6个
+if stonenumber>=6:
+ # 结果:显示‘你拥有了毁灭宇宙的力量’的结果
+ print('你拥有了毁灭宇宙的力量')
+# 条件:当赋值不满足if条件时,执行else下的命令
+else:
+ # 结果:显示‘去找灵魂宝石’的结果
+ print('带着卡魔拉去沃弥尔星寻找灵魂宝石')
+#》》带着卡魔拉去沃弥尔星寻找灵魂宝石
+
+#例二:
+weight=101 #要先为酱酱的体重赋值,酱酱的体重是101斤
+# 如果体重超过100斤的条件下,就……(条件后需加冒号)
+if weight>100:
+ # 就打印结果:不吃了!(注意检查是否自动缩进)
+ print('不吃了')
+# 如果体重没有超过100斤的条件,就……(else条件前无缩进,条件后需加冒号)
+else:
+ # 就打印:放心吃吧(注意检查是否自动缩进)
+ print('放心吃吧')
+#》》不吃了
+
+#例三:
+stonenumber=5 # 为宝石数量赋值
+# 条件:如果你拥有的宝石数量大于等于6个
+if stonenumber>=6:
+ # 结果:显示‘就拥有了毁灭宇宙的力量’的结果
+ print('你拥有了毁灭宇宙的力量')
+# 条件:如果想让宝石数量停留在5个以下,至少一个
+elif 0
+print(s[3] ) #打印列表s里面的第3个元素
+#》》卧龙寺
+print(s[-2] ) #打印列表s里面的倒数第二个元素
+#》》青龙寺
+print(s[0:4]) #打印列表s中0、1、2、3的元素
+#》》['弘福寺','大兴善寺','青龙寺','卧龙寺']
+pr int(s[1:3] ) #打印列表s中1、2的元素
+#》》['大兴善寺','青龙寺']
+print(s[1: ]) #打印列表s中第 1个和此之后的所有元素
+#》》['大兴善寺','青龙寺','卧龙寺']
+print(s[ :2] ) #打印列表s中第2个元素 之前的所有元素
+#》》['弘福寺','大兴善寺']
+S. append( '观音禅寺' ) #把数据'观音禅寺'放进列表s的尾部
+print(s[4] ) #打印列表s里面的第4个元素(.上一步新增的)
+#》》观音禅寺
+
+```
+## 9、知识:字典
+```
+d ={'QQ':['甲' ,'乙','丙'] ,123:[ 'A','B' ,'C'],家' : 10000} #定义字典和列表的嵌套
+a = d['QQ' ] #取出字典d中的'QQ ' 键的值,并把这个值赋值给变量a, a被赋值为列表['甲','乙','丙']
+b = a[0] #取出列表a中的第0个索引,也就是'甲',并把这个值赋值给变量b
+print(b) #打印变量b
+#》》甲
+print(d[ 123] [1]) #从嵌套中提取元素,d[123]提取出['A','B' ,'C'],d[123] [1]提取出'B'
+#》》B
+d['家'] = 900 #改变字典中的值
+print(d['家'])
+#》》900
+d[3.1415926] = '圆周率 ' #给 字典新增键和值
+print(d)
+#》》{3. 1415926: '圆周率','QQ':[ '甲','乙','丙'] ,123: [ 'A,'B','C'],'家' :900}
+
+A={ '绿色' :1, '红色' :2, '黄色' :3}
+print(key)
+#》》 绿色,红色,黄色
+print(value)
+#》》1,2,3
+
+#字典使用keys (方法) :字典提取键
+A={'绿色' :1, '红色' :2, '黄色':3}
+for key in A.keys():
+print (key)
+#》》 绿色,红色,黄色
+
+#字典使用values方法:字典提取值
+A={'绿色' :1, '红色' :2, '黄色' :3}
+for value in A. values() :
+print(value)
+#》》1,2,3
+
+#如字典使用values提取值
+i='100010'
+d11={'乾为天(乾卦)自强不息':'111111','坤为地(坤卦)厚德载物':'000000','水雷屯(屯卦)起始维艰':'010001','山水蒙(蒙卦)启蒙奋发':'100010','水天需(需卦)守正待机':'010111'}
+for k,v in d11.items():
+ if v ==i:
+ print(k)
+#》》山水蒙(蒙卦)启蒙奋发
+
+#合并列表-
+例如:
+list1 = [91, 95, 97, 99]
+list2 = [92, 93, 96, 98]
+# 把 A 组成绩赋值给一个新列表,用来存合并的成绩——这个细节要注意!
+list1.extend(list2)
+print(list1)
+#》》[91, 95, 97, 99, 92, 93, 96, 98]
+
+#列表排序
+主动搜索,掌握新知
+老师鼓励你自己去探寻解决问题的方法,上网搜索一下列表的排序方法吧,是不是发现了一个以字母s开头的方法?
+
+例如:
+list3= [91, 95, 97, 99, 92, 93, 96, 98]
+list3.sort()
+print(list3)
+#》》[91, 92, 93, 95, 96, 97, 98, 99]
+
+#Python 求平均值
+
+import random, numpy , math
+punches = [3,45,56]
+punches1 = [5,6,89]
+print(punches.index(56)) # 列表的取下标
+punches3 =punches.copy() #列表的复制
+punches3.extend(punches1) #列表的合并
+print(punches3)
+punches3.sort() #列表的排列升序
+print(punches3)
+print(random.choice(punches3)) #随机挑选
+print(random.randint(0,10)) #区间内随机生成
+punches4-punches3.pop(0) # 列表内的元素删除,可以存入变量
+print(punches4)
+punches3.append(punches4) # 列表的添加,注意只能添加一个
+print(punches3)
+print(numpy.mean(punches3)) # 求平均值
+print(numpy.array(punches3)) # 列表的数组显示
+number = math.ceil(size*80 / time)
+
+```
+### 理解:append函数和pop()函数
+```
+# append()
+1、描述:列表append()方法用于将传入的对象附加(添加)到现有列表中。
+2、语法:list.append(obj)
+3、参数:这是要添加到列表中的内容
+4、运行后的结果返回: 已更新到原列表,不会产生结果。
+ # pop()
+1、描述:pop() 函数用于移除列表中的一个元素(默认最后一个元素),并返回该元素的值。
+2、参数:obj – 可选参数,要移除列表元素的对象。
+3、返回值:该方法返回从列表中移除的元素对象。
+ #小拓展:
+append函数:append() 方法用于在列表末尾添加新的对象,需要注意的是每次只能添加一个元素,且该方法无返回值,但是会修改原来的列表。 #使用格式为:列表.append(内容)
+pop函数:用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 #使用格式为:变量=列表.pop()
+
+```
+## 知识:append函数和pop()函数
+```
+#方法一:使用for循环和pop函数
+students = ['小明',' 小红','小刚' ]
+for. i : in range(3):
+student1”=”students. pop(0)
+# 运用pop( )函数,将偏移量为0的元素赋值给变量student1, 也就是,把第一个座位的同学提取出来。同时更新了列表
+students . append(student1)”。
+# append函数,将元素添加到列表尾,将移除的student1安排到最后一个 座位。
+print( students)
+#打印列表
+#方法二:使用while循环和pop函数
+students = ['小明','小红','小刚' ]
+i=0
+while i<3:
+ i=i+1
+ student1 = students .pop(0) #运用pop()函数,同时完成提取和删除。
+ students.append(student1) # 将移除的student1安排到最后一个座位。
+ print( students )
+#》》['小红', '小刚', '小明']
+#》》['小刚', '小明', '小红']
+#》》['小明', '小红', '小刚']
+
+#方法三: for循环和切片
+students =['小明','小红','小刚']
+for i in range(3):
+ student1= students[0]
+ students=students[1:]
+ students.append( student1)
+ print(students)
+#》》['小红', '小刚', '小明']
+#》》['小刚', '小明', '小红']
+#》》['小明', '小红', '小刚']
+
+#方法四: while循环和切片
+students = ['小明','小红' ,'小刚']
+i=0
+while i<3:
+ i=i+1
+ student1 = students[0]
+ students =students[1:]
+ students.append( student1)
+ print( students)
+#》》['小红', '小刚', '小明']
+#》》['小刚', '小明', '小红']
+#》》['小明', '小红', '小刚']
+
+```
+## items()函数语法:
+```
+
+
+```
+```
+
+
+::dict.items()::
+
+实例:
+
+\`\`\`other
+dict = {'老大':'15岁',
+ '老二':'14岁',
+ '老三':'2岁',
+ '老四':'在墙上'
+ }
+print(dict.items())
+for key,values in dict.items():
+ print(key + '已经' + values + '了')
+
+
+以上实例输出结果为:
+
+other
+dict_items([('老大', '15岁'), ('老二', '14岁'), ('老三', '2岁'), ('老四', '在墙上')])
+老大已经15岁了
+老二已经14岁了
+老三已经2岁了
+老四已经在墙上了了
+
+
+版权声明:本文为CSDN博主「逸少凌仙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
+
+原文链接:[https://blog.csdn.net/u012424313/article/details/86499194](https://blog.csdn.net/u012424313/article/details/86499194)
+
+
+
+**::切片::**
+
+若要在循环内部修改正在遍历的序列(例如复制某些元素),建议您首先制作副本。在序列上循环不会隐式地创建副本。切片表示法使这尤其方便:
+
+> > words = ['cat', 'window', 'defenestrate']
+
+> > for w in words[:]: # Loop over a slice copy of the entire list.
+... if len(w) > 6:
+... words.insert(0, w)
+print(words)
+
+> > \#》》['defenestrate', 'cat', 'window', 'defenestrate']
+
+
+
+```
+```
+
+
+```
+## 10、知识: while循环
+```
+
+
+
+
+### 理解: 循环
+
+\`\`\`python
+for循环和while循环最大的区别在于【循环的工作量是否确定】,
+for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。
+while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡
+
+#什么时候需要用到循环?
+ ●当发现存在“重复性或规律性”任务的时候,可以用循环来“解决重复劳动”
+#什么时候用for循环,什么时候用while循环?
+ ●知道循环次数的时候优先用for循环,不知道循环次数的时候用while然后设置“哨兵”
+#分析循环:初始化条件? 控制循环的条件? 反复做的事?怎样进入下一个循环?
+#for循环的常见用法?
+ ●遍历range()函数,如“for i in range(10)”
+ ●遍历列表,如“for i in[1,2,3]”
+ ●遍历字典(键),如“for i in {1:1,2:2,3:3}"
+
+#range()函数用法:
+如: range(a,b,c)
+a:计数从a开始。不填时,默认从0开始
+#例如,range(1,5), 表示从1开始生成
+b:计数到b结束,但不包括b
+#例如,range(11) ,表示从0开始到11结束,不包括11
+c:计数的间隔,不填时默认为1
+#例如,range(0, 30, 5),表示计数的间隔5
+
+#如何跳出while True死循环:
+鼠标点一下终端区, 键盘按ctrl+c, 无反应则多按几次。
+刷新网页,然后修改代码,将while True改成while False. 或故意写错代码,点击跳过
+
+#例一:
+a=0
+while a<5: #只要a<5这个条件成立,就不停地办事(把a+1的结果打印出来),直到条件不成立,办事流程就停止.
+ a=a+1
+ print(a)
+#》》1,2,3,4,5
+
+#例二:
+a=0
+while a<5:
+ print(a)
+ a=a+1
+#》》0,1,2,3,4
+
+#例三:
+a=0
+while a<5:
+ a=a+1
+print(a)
+#》》5
+
+#例四:
+man = '' # 注:这个''代表空字符串
+while man != '有':
+ man = input('有没有愿意为小龙女死的男人?没有的话就不能出古墓。')
+print('小龙女可以出古墓门下山啦~')
+#》》有没有愿意为小龙女死的男人?没有的话就不能出古墓。没有
+#》》有没有愿意为小龙女死的男人?没有的话就不能出古墓。没有
+#》》有没有愿意为小龙女死的男人?没有的话就不能出古墓。有
+#》》小龙女可以出古墓门下山啦~
+
+#例五:
+password = '' # 变量password用来保存输入的密码
+while password != '816':
+ password = input('请尝试输入密码:')
+print('欢迎回家!')
+#》》请尝试输入密码:6456
+#》》请尝试输入密码:816
+#》》欢迎回家!
+
+```
+## 11、知识: for循环
+```
+#例一:
+for i in [1,2,3,4,5]:
+ printi(i*5) #遍历列表乘以数字5
+#》》5,10,15,20,25
+
+#例二:
+for i in range(5): #遍历5次:0,1,2,3,4
+ print('明日复明日') #循环打印5次 明日复明日
+#》》明日复明日,明日复明日,明日复明日,明日复明日,明日复明日
+
+#例三:
+for i in range(1,4) :
+ print('明日复明日,明日何其多。') #用for循环把诗句打印3遍
+#》》明日复明日,明日何其多。
+#》》明日复明日,明日何其多。
+#》》明日复明日,明日何其多。
+
+#例四:
+j = 1
+while j<4 :
+ print ('明日何其多,明日何其多。') #用while循环把诗句打印3遍
+ j =j+1
+#》》明日复明日,明日何其多。
+#》》明日复明日,明日何其多。
+#》》明日复明日,明日何其多。
+
+#例五:
+for i in range(1,10):
+ print(i*5) #用for循环“1到10分别乘以5”的
+#》》 5,10,15,20,25,30,35,40,45
+
+#例六:
+d = {'小明':'醋','小红':'油','小白':'盐','小张':'米'}
+for i in d:
+ print(d[i])
+#》》醋,油,盐,米
+
+# 循环之break、continue、exit用法:
+1、程序遇到 continue,跳过循环后面,进行下一次循环
+2、程序遇到 break,结束循环,之后循环外部的代码
+3、程序遇到 exit(),结束程序,不管后面的代码在循环里还是循环外都不执行
+#continue 一个是结束本次循环执行下一次
+#break 一个是结束循环,执行循环外的内容
+ 假如一整个循环本来需要循环5次,而实际上可能只需要循环2次就能够得到我们想要的结果,那么后面3次循环就不需要执行,这个时候就可以直接break,后面的3次循环就不执行了。
+ 如果一次循环本来需要执行5行代码,而实际上可能执行前2行代码就能够得到我们想要的结果了,那后面的3行代码就不需要执行,这个时候就可以直接continue,跳过后面2行代码,进入下一次循环。
+那还有就是exit()函数。exit()和break的区别是什么呢?
+#break()是结束循环,执行循环外的内容
+#exit()是结束程序,这个程序里面不管循环外还是循环内都不执行了。
+
+例如一:
+resumes = ['小李','小王','小张','老李','老王','老张']
+num = 0 #num表示录取的人数
+for i in resumes:
+# 如果录取人数大于3人,就停止招聘。
+ if num >=3:
+ break
+# 如果用人部门满意就直接录取,录取人数+1,不确定的话就移交用人部门。
+ department_admissin = input('department,你是否非常想要 '+i+':')
+ if department_admissin =='yes':
+ num = num+1
+ print('恭喜'+i+'应聘成功')
+ continue
+ # 如果hr满意就直接录取,录取人数+1,不确定的话就移交用人部门。
+ hr_admissin = input('hr,你是否非常想要t '+i+':')
+ if hr_admissin =='yes':
+ num = num+1
+ print('恭喜'+i+'应聘成功')
+ continue
+# 如果老板满意就直接录取,录取人数+1,不确定的话就进入待定。
+ boss_admissin = input('boss,你是否非常想要 '+i+':')
+ if boss_admissin =='yes':
+ num = num+1
+ print('恭喜'+i+'应聘成功')
+ continue
+
+
+例如二:
+from sys import exit
+resumes = ['小李','小王','小张','老李','老王','老张']
+num = 0 #num表示录取的人数
+for i in resumes:
+ department_admissin = input('department,你是否非常想要 ' + i + ':')
+ if department_admissin == 'yes':
+ num = num + 1
+ if num == 3:
+ print('enough~')
+ exit()
+ print('恭喜' + i + '应聘成功')
+ continue
+ else:
+ print(i, '此人不在候选名单')
+
+代码拆解方法:
+#总体思路:
+#1.1展示随机属性&随机生命值和攻击值
+#1.2展示PK过程
+#1.3展示每一局的PK结果,并设置三局两胜,就是在每一局外面设置for i in range(1,4)的循环
+#1.4展示三局两胜的最后PK结果,借助第三方变量,类似篮球积分
+#1.5设置三局两胜在输入某个键时,是否继续循环,也就是while True部分
+
+import time
+import random
+while True:
+ player_victory = 0
+ enemy_victory = 0
+ for i in range(1,4):
+ time.sleep(1.5)
+ print(' \n——————现在是第 %s 局——————' % i)
+ player_life = random.randint(100,150)
+ player_attack = random.randint(30,50)
+ enemy_life = random.randint(100,150)
+ enemy_attack = random.randint(30,50)
+
+ print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))
+ print('------------------------')
+ time.sleep(1)
+ print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))
+ print('-----------------------')
+ time.sleep(1)
+
+ while player_life > 0 and enemy_life > 0:
+ player_life = player_life - enemy_attack
+ enemy_life = enemy_life - player_attack
+ print('你发起了攻击,【敌人】剩余血量%s' % enemy_life)
+ print('敌人向你发起了攻击,【玩家】的血量剩余%s' % player_life)
+ print('-----------------------')
+ time.sleep(1.2)
+
+ if player_life > 0 and enemy_life <= 0:
+ player_victory += 1
+ print('敌人死翘翘了,你赢了!')
+ elif player_life <= 0 and enemy_life > 0:
+ enemy_victory += 1
+ print('悲催,敌人把你干掉了!')
+ else:
+ print('哎呀,你和敌人同归于尽了!')
+
+ if player_victory > enemy_victory :
+ time.sleep(1)
+ print('\n【最终结果:你赢了!】')
+ elif enemy_victory > player_victory:
+ print('\n【最终结果:你输了!】')
+ else:
+ print('\n【最终结果:平局!】')
+
+ a1 = input('要继续游戏吗,请输入n退出,输入其他继续:') # 在 while True 循环中设置跳出条件。
+ if a1 == 'n':
+ break
+
+import random
+import time
+# 将抽奖程序封装成函数
+def choujiang(q,w,e): # 定义一个抽奖函数,带有3个参数,也就是3位候选人
+ luckylist = [q,w,e] # 定义一个中奖名单的列表
+ a = random.choice(luckylist) # 在中奖名单里面随机选择
+ print('开奖倒计时',3)
+ time.sleep(1)
+ print('开奖倒计时',2)
+ time.sleep(1)
+ print('开奖倒计时',1)
+ time.sleep(1)
+ image = '''
+ /\_)o<
+ | \\
+ | O . O|
+ \_____/
+ '''
+ print(image)
+ print('恭喜'+a+'中奖!')
+choujiang('虚竹','萧峰','段誉') # 调用函数
+
+#》》奖倒计时 3
+#》》开奖倒计时 2
+#》》开奖倒计时 1
+#》》 /\_)o<
+#》》 | \
+#》 | O . O|
+#》》 \_____/
+#》》恭喜段誉中奖!
+
+```
+## 12理解:自定义函数
+```
+#函数
+#定义函数的语法
+1.def 函数名 (参数) :
+2.函数体
+3.return语句
+
+#函数是组织好的、可以重复使用的、用来实现单-功能的代码。
+定义函数的语法:1、def函数名(参数) ;2、函数体3、return语句
+例如:
+# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
+# 2. 不可与内置函数重名(内置函数不需要定义即可直接使用)
+def math(x):
+# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
+# 规范:括号是英文括号,后面的冒号不能丢
+ y = 3*x + 5
+# 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
+ return y
+# return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
+
+#如果要优化上面代码的结构,我们可以创建一个主函数,用来调用几个子函数的方法
+#如下所示,我们可以把每个独立的功能封装到每个单独的函数中,然后用一个主函数打包这些单独的函数,最后再调用主函数.
+def 函数a():#某个功能独立的函数a
+def 函数b() :#某个功能独立的函数b
+def 函数c():#某个功能独立的函数c
+ .....
+ .....
+def 主函数() :#将各个功能打包到一起的函数,形成“程序入口”
+函数 a() #调用a函数
+函数 b() #调用b函数
+函数 c() #调用c函数
+ .....
+主函数 () # 运行主函数,就能让全部代码执行起来
+
+```
+## 12.1知识:自定义函数
+```
+例一:
+def math(x): #定义函数
+ y = x ** 2 + x #函数主体
+ return y
+a=math(20) #函数赋值
+b=math(30) #函数赋值
+print(a,b) #调用并打印函数
+#》》420 930
+
+例二:
+#直接运行代码即可
+def opening(): #定义函数
+ print('总有一种味道能温暖你~')
+ print('深夜食堂正式开业啦!')
+ print('欢迎来自五湖四海的你前来品尝!')
+opening() #直接运行函数
+#》》总有一种味道能温暖你~
+#》》深夜食堂正式开业啦!
+#》》欢迎来自五湖四海的你前来品尝!
+
+例三:
+def menu(appetizer, course): #定义函数
+ print('一份开胃菜:' + appetizer)
+ print('一份主食:' + course)
+menu('话梅花生','牛肉拉面')
+#》》一份开胃菜:话梅花生
+#》》一份主食:牛肉拉面
+
+例四:
+def menu(appetizer, course, dessert = '绿豆沙'):
+ print('一份开胃菜:' + appetizer)
+ print('一份主食:' + course)
+ print('一份甜品:' + dessert)
+menu('话梅花生','牛肉拉面')
+#因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。
+#》》一份开胃菜:话梅花生
+#》》一份主食:牛肉拉面
+#》》一份甜品:绿豆沙
+
+例五:
+import random
+appetizer = ['话梅花生','拍黄瓜','凉拌三丝']
+def coupon(money):
+ if money < 5:
+ a = random.choice(appetizer) #随机选择 appetizer列表内容
+ return a #返回到赋值a
+ elif 5 <= money < 10:
+ b = random.choice (appetizer)
+ return b, '溏心蛋'
+result = coupon(6) # result是一个元组
+print(result[0])
+print(result[1])
+#》》凉拌三丝
+#》》溏心蛋
+例六:
+#另外一种方式:我们也可以同时定义多个变量,来接收元组中的多个元素(看最后四行代码,直接运行即可):
+import random
+appetizer = ['话梅花生', '拍黄瓜', '凉拌三丝']
+def coupon(money):
+ if money < 5:
+ a = random.choice(appetizer)
+ return a, ''
+ elif 5 <= money < 10:
+ b = random.choice(appetizer)
+ return b, '溏心蛋'
+
+dish, egg = coupon(7) # 元组的两个元素分别赋值给变量dish和egg
+print(dish)
+print(egg)
+#》》拍黄瓜
+#》》溏心蛋
+
+
+例七:
+rent = 3000
+def cost():
+ global variable_cost #定义variable_cost 为全局变量
+ utilities = int(input('请输入本月的水电费用'))
+ food_cost = int(input('请输入本月的食材费用'))
+ variable_cost = utilities + food_cost
+ print('本月的变动成本是' + str(variable_cost))
+
+def sum_cost():
+ sum = rent + variable_cost
+ print('本月的总成本是' + str(sum))
+cost()
+sum_cost()
+#》》请输入本月的水电费用87
+#》》请输入本月的食材费用890
+#》》本月的变动成本是977
+#》》本月的总成本是3977
+
+例八:
+#函数嵌套
+def div(num1, num2):
+ growth = (num1 - num2) / num2
+ percent = str(growth * 100) + '%'
+ return percent
+
+def warning():
+ print('Error: 你确定上个月一毛钱都不赚不亏吗?')
+
+def main():
+ while True:
+ num1 = float(input('请输入本月所获利润'))
+ num2 = float(input('请输入上月所获利润'))
+ if num2 == 0:
+ warning()
+ else:
+ print('本月的利润增长率:' + div(num1,num2))
+ break
+
+main()
+#》》请输入本月所获利润35000
+#》》请输入上月所获利润33000
+#》》本月的利润增长率:6.0606060606060606%
+
+
+#简单自定义函数嵌套:思考函数如何有效嵌套?
+def yang():
+ age=int(input('请输入您的年龄?:'))
+ if age>=18:
+ print("可以进网吧嗨皮……")
+ else:
+ print("你还没长大,应该回家写作业!")
+
+def warning():
+ print('Error: 你确定您输入的密码正确吗?')
+
+def main():
+ for i in range(3):
+ tssw=input('请输入登陆密码?')
+ if tssw=='861':
+ yang()
+ else:
+ warning()
+
+main()
+
+#》》请输入登陆密码?861
+#》》请输入您的年龄?:18
+#》》可以进网吧嗨皮……
+
+#解决输入不是整数报错的问题
+#代码要点有两个:(1)因为不知道用户什么时候才会输入正确,所以设置while循环来接受输入,只要用户输入不是数字就会一直循环,输入了数字就break跳出循环。(2)使用try……except……语句,当用户输错的时候会给予提示。
+while True:
+ try:
+ age = int(input('你今年几岁了?'))
+ break
+ except ValueError:
+ print('你输入的不是数字!')
+if age < 18:
+ print('不可以喝酒噢')
+#》》请输入一个整数:为
+#》》要输入整数噢
+
+```
+## 编程bug处理:
+```
+#自检清单
+1.漏了末尾的冒号,如if语句、循环语句、定义函数
+2.缩进错误,该缩进的时候没缩进,不该缩进的时候缩进了
+3.把英文符号写成中文符号,如:‘’ () : ,
+4.字符串拼接的时候,把字符串和数字拼在一起
+5.没有定义变量
+6. '=='和'=’混用
+#解决思路不清bug的三步法 #用来解决思路不清的两个工具:注释和print()函数
+1.用“#”把感觉会出问题的代码段注释掉
+2.利用print()语句,展示关键步骤的操作结果
+3.根据print出来的东西,-步步寻找和解决问题
+遇到关键步骤时print出来,看是否达到我们所期望的结果,以此来揪出错误的那一步。
+用#号暂时注释部分代码,计算机是不会执行代码中的#号和其之后的内容的。
+
+是try…except…语句,具体用法如下:
+try:
+ ......
+ ......
+#尝试执行下列代码
+#代码,要缩进
+except ***:
+ ....
+ ....
+#除非发生报错,***是报错类型。一旦报错就执行下列代码:
+#报错后执行的代码,要缩进
+
+```
+## 类的练习
+```
+类的创建和调用
+类的创建: class 语句
+类的属性创建:赋值语句
+实例方法的创建: def method1 (self):
+类的实例化:实例名=类名()
+调用类的属性:实例名.属性
+调用类的方法:实例名.方法()
+
+
+class Computer: #类的创建: class+类名+冒号,后面语句要缩进
+ screen = True #类的属性创建:通过赋值语句(即定义“是怎样的”)
+ def start(self): #实例方 法的创建: def +方法名(self): 参数self的特殊之处:在定义时不能丢,在调用时要忽略。
+ print('电脑正在开机....') #方法具体的执行过程,即定义“能做什么”
+注:
+1.在类中赋值的变量叫作属性,类中定义的函数叫作方法(以此和普通函数区分)
+2.实例方法是指类中参数带self的函数,是类方法的一种形式,也是最常用的用法。
+3.课堂中所讲“类的方法”,均指实例方法,想了解其他方法,可自行查询相关文档。
+注:实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数self。
+
+
+ 类的实例化
+语法:实例名=类名()
+例子: my_ computer = Computer()
+意义:我们有了一个实例,一个“可调用所属类的所有属性和方法”的实例。调用的语法是实例名.属性和实例名.方法
+
+ # 特殊方法:初始化方法(也叫构造函数)
+定义初始化方法的格式是def __init__(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)
+初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
+# 阅读代码后直接运行
+class Chinese:
+
+ def __init__(self):
+ print('很高兴遇见你,我是初始化方法')
+person = Chinese()
+#》》很高兴遇见你,我是初始化方法
+
+
+#类的继承和定制
+广东人属于中国人(继承 了中国人的属性和方法)
+A类属于B类(继承了B类的属性和方法)
+继承的基础语法
+#继承的语法
+C lass A (B) : #注:小括号和冒号都是英文格式
+ ▼ ▼
+ 子类名 ▼
+ 父类名
+#各级实例和各级类间的关系
+1.子类创建的实例,同时属于父类;
+2.父类创建的实例,不属于子类;
+3.所有实例,都属于根类object。
+
+#多层继承:
+class B(A) :
+class C(B) :
+作用:类在纵向上的深度拓展
+例子:中国人继承自地球人,广东人又继承自中国人。
+特点:子类创建的实例,可调用所有层级的父类的属性和方法。
+#多重继承:
+class A(B,C,D) :
+作用:类在横向上的宽度拓展
+例子:在广东定居的江苏人,同时继承了广东人和江苏人的一些特征。
+特点:就近原则:在子类调用属性和方法时,优先考虑靠近子类(即靠左)的父类。
+
+例一;
+# 类名首字母大写
+class Chinese:
+ # 用赋值语句,创建类的属性
+ eye = 'black'
+
+ # 创建实例方法时,不要漏了 self
+ def eat(self):
+ print('吃饭,选择用筷子。')
+
+例二:
+class Chinese: # 创建一个类
+ eye = 'black' # 用赋值语句,创建类的属性
+
+ def eat(self): # 创建实例方法时,不要漏了 self
+ print('吃饭,选择用筷子。')
+
+wufeng = Chinese() # 类的实例化
+print(wufeng.eye) # 实例调用类属性
+wufeng.eat() # 调用类中的方法(传参不用管self)
+#》》black
+#》》吃饭,选择用筷子。
+
+例题三:
+class Chinese:
+
+ name = '吴枫' # 类属性name
+
+ def say(self):
+ print(self.name + '是中国人')
+
+person = Chinese() # 创建Chinese的实例person
+person.say() # 调用实例方法
+
+例题三:
+class Chinese:
+ def __init__ (self):
+ self.mouth = 1 # self.不能丢
+ self.eye = 2
+
+ def body(self):
+ print('我有%s张嘴巴' % self.mouth)
+ print('我有%s只眼睛' % self.eye)
+
+person = Chinese()
+person.body()
+#》》我有1张嘴巴
+#》》我有2只眼睛
+
+例题三:
+class Chinese:
+
+ def __init__(self, name, birth, region):
+ self.name = name # self.name = '吴枫'
+ self.birth = birth # self.birth = '广东'
+ self.region = region # self.region = '深圳'
+
+ def born(self):
+ print(self.name + '出生在' + self.birth)
+
+ def live(self):
+ print(self.name + '居住在' + self.region)
+
+person = Chinese('吴枫','广东','深圳') # 传入初始化方法的参数
+person.born()
+person.live()
+
+例题三:
+class Chinese: # 类的创建
+ eye = 'black' # 类属性的创建
+
+ def __init__(self,hometown): # 类的初始化方法
+ self.hometown = hometown # 实例属性的创建
+ print('程序持续更新中……') # 初始化中的语句
+
+ def born(self): # 实例方法的创建
+ print('我生在%s。'%(self.hometown)) # 方法的具体语句
+
+wufeng = Chinese('广东') # 类的实例化
+print(wufeng.eye) # 打印实例的属性(从类传递的)
+wufeng.born() # 实例方法的调用
+
+#类的书籍借阅系统例题:
+class Book:
+
+ def __init__(self, name, author, comment, state = 0):
+ self.name = name
+ self.author = author
+ self.comment = comment
+ self.state = state
+
+ def __str__(self):
+ status = '未借出'
+ if self.state == 1:
+ status = '已借出'
+ return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
+
+class BookManager:
+
+ books = [] #存储书籍的列表,每一个元素都是Book的实例对象
+ def __init__(self):
+ book1 = Book('惶然录','费尔南多·佩索阿','一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。')
+ book2 = Book('以箭为翅','简媜','调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。')
+ book3 = Book('心是孤独的猎手','卡森·麦卡勒斯','我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。',1) # 创建三个实例对象
+ self.books.append(book1) # 往列表依次添加元素,注意调用类属性books时,self不能丢
+ self.books.append(book2) # self.books = [book1, book2, book3]
+ self.books.append(book3) # 上面三行代码,可简化为一行,即直接创建列表。这种情况下,可不用在前面创建空列表。
+
+ def menu(self):
+ print('欢迎使用流浪图书管理系统,每本沉默的好书都是一座流浪的岛屿,希望你有缘发现并着陆,为精神家园找到一片栖息地。\n')
+ while True:
+ print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
+ choice = int(input('请输入数字选择对应的功能:'))
+ if choice == 1:
+ self.show_all_book() # 调用方法show_all_book()
+ elif choice == 2:
+ self.add_book() # 调用方法add_book()
+ elif choice == 3:
+ self.lend_book() # 调用方法lend_book()
+ elif choice == 4:
+ self.return_book() # 调用方法return_book()
+ else:
+ print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')
+ break
+
+ def show_all_book(self):
+ print('书籍信息如下:')
+ for book in self.books:
+ print(book)
+ print('')
+
+ def add_book(self):
+ new_name = input('请输入书籍名称:')
+ new_author = input('请输入作者名称:')
+ new_comment = input('请输入书籍推荐语:') # 获取书籍相应信息,赋值给属性
+ new_book = Book(new_name, new_author, new_comment) # 传入参数,创建Book类实例new_book
+ self.books.append(new_book) # 将new_book添加到列表books里
+ print('书籍录入成功!\n')
+
+ def check_book(self,name):
+ for book in self.books: # 遍历列表的每个元素,即每个Book实例
+ if book.name == name: # 如果存在有实例名称与输入书籍名称是一样的
+ return book # 返回该实例对象,遇到return语句方法停止执行
+ else:
+ return None
+
+ def lend_book(self):
+ name = input('请输入书籍的名称:')
+ res = self.check_book(name)
+
+ if res != None:
+ if res.state == 1:
+ print('你来晚了一步,这本书已经被借走了噢')
+ else:
+ print('借阅成功,借了不看会变胖噢~')
+ res.state = 1
+ else:
+ print('这本书暂时没有收录在系统里呢')
+
+ def return_book(self):
+ name = input('请输入归还书籍的名称:')
+ res = self.check_book(name) # 调用check_book方法,将返回值赋值给变量res
+ if res == None: # 如果返回的是空值,即这本书的书名不在系统里
+ print('没有这本书噢,你恐怕输错了书名~')
+ else: # 如果返回的是实例对象
+ if res.state == 0: # 如果实例属性state等于0,即这本书的借阅状态为'未借出'
+ print('这本书没有被借走,在等待有缘人的垂青呢!')
+ else: # 如果实例属性state等于1,即状态为'已借出'
+ print('归还成功!')
+ res.state = 0 # 归还后书籍借阅状态为0,重置为'未借出'
+
+manager = BookManager()
+manager.menu()
+
+```
+## open()函数
+```
+
+
+
+open('/Users/Ted/Desktop/test/abc.txt') #绝对路径 #Mac里路径写法
+open('abc.txt') #相对路径
+#相对路径也可以写成open('./abc.txt')
+#Windows的绝对路径通常要稍作处理,写成以下两种格式
+open('C:\\Users\\Ted\\Desktop\\test\\abc.txt')
+#将'\'替换成'\\'
+open(r'C:\Users\Ted\Desktop\test\abc.txt')
+#在路径前加上字母r
+file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
+#这里是字符串 'r',表示 read,表示我们以读的模式打开了这个文件。
+#【第1步-开】使用open()函数打开文件
+file1 = open('/Users/Ted/Desktop/test/abc.txt', 'r',encoding='utf-8')
+filecontent = file1.read()
+#【第2步-读】以用read()函数进行读取的操作
+file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
+filecontent = file1.read()
+print(filecontent)
+#【第3步-关】关闭文件,使用的是close()函数。
+file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
+filecontent = file1.read()
+print(filecontent)
+file1.close()
+
+
+
+```
+## 使用write()函数
+```
+
+
+
+file1 = open('/Users/Ted/Desktop/test/abc.txt', 'w',encoding='utf-8')
+file1.write('张无忌\n') #\n表示另起一行。
+file1.write('宋青书\n')
+'w'写入模式会给你暴力清空掉文件,然后再给你写入。如果你只想增加东西,而不想完全覆盖掉原文件的话,就要使用'a'模式,表示append,你学过,它是追加的意思。
+file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8')
+#以追加的方式打开文件abc.txt
+file1.write('张无忌\n')
+#把字符串'张无忌'写入文件file1
+file1.write('宋青书\n')
+#把字符串'宋青书'写入文件file1
+使用close()函数
+file1 = open('/Users/Ted/Desktop/test/abc.txt','a',encoding='utf-8')
+file1.write('张无忌\n')
+file1.write('宋青书\n')
+file1.close()
+这里再顺便补充一个用法,为了避免打开文件后忘记关闭,占用资源或当不能确定关闭文件的恰当时机的时候,我们可以用到关键字with,之前的例子可以写成这样:
+#写文件的三步法:开一写一关
+file1 = open(' /Users/Ted/Desktop/test/abc. txt','a' ,encoding='utf-8')#以追加的方式打开文件"abc. txt"
+file1.write( '张无忌\n') #再把字符串“张无忌’写入文件file1
+file1. close() #关闭文件
+
+# 普通写法
+file1 = open('abc.txt','a')
+file1.write('张无忌')
+file1.close()
+
+
+
+```
+## 使用with关键字的写法
+```
+
+
+with open('abc.txt','a') as file1:
+#with open('文件地址','读写模式') as 变量名:
+ #格式:冒号不能丢
+ file1.write('张无忌')
+ #格式:对文件的操作要缩进
+ #格式:无需用close()关闭
+
+
+#以下是新建名称为scores.txt的文件内容:
+罗恩 23 35 44
+哈利 60 77 68 88 90
+赫敏 97 99 89 91 95 99
+马尔福 100 85 90
+#函数 readlines(),也就是“按行读取”
+file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8')
+file_lines = file1.readlines()
+file1.close()
+print(file_lines)
+#》》['罗恩23 35 44\n','哈利60 77 68 88 90\n', '赫敏97 99 89 91 95 99\n', '马尔福100 85 90']
+
+file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8')
+file_lines = file1.readlines()
+file1.close()
+for i in file_lines: #用for...in...把每一行的数据遍历
+ print(i) #打印变量i
+#》》罗恩 23 35 44
+#》》哈利 60 77 68 88 90
+#》》赫敏 97 99 89 91 95 99
+#》》马尔福 100 85 90
+
+#split()函数把字符串分开
+file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8')
+file_lines = file1.readlines()
+file1.close()
+for i in file_lines: #用for...in...把每一行的数据遍历
+ data =i.split() #把字符串切分成更细的一个个的字符串
+ print(data) #打印出来看看
+#》》['罗恩','23','35','44']
+#》》['哈利','60' ,'77','68','88' ,'90']
+#》》['赫敏','97', '99' ,'89','91','95','99']
+#》》['马尔福','100','85','90']
+
+#join()函数,是把字符串合并的。
+a=['c','a','t']
+b=''
+print(b.join(a))
+c='-'
+print(c.join(a))
+#》》cat
+#》》c-a-t
+
+#计算他们总成绩的例题:
+file1 = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8')
+file_lines = file1.readlines()
+file1.close()
+for i in file_lines:
+ data =i.split()
+ sum = 0 #先把总成绩设为0
+ for score in data[1:]: #遍历列表中第1个数据和之后的数据
+ sum = sum + int(score) #然后依次加起来,但分数是字符串,所以要转换
+ result = data[0]+str(sum) #结果就是学生姓名和总分
+ print(result)
+#》》罗恩102
+#》》哈利383
+#》》赫敏570
+#》》马尔福275
+
+file = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8')
+file_lines = file.readlines()
+file.close()
+final_scores = [ ] #新建一个空列表
+for i in file_lines:
+ data =i.split()
+ sum = 0
+ for score in data[1:]:
+ sum = sum + int(score)
+ result = data[0]+str(sum)+'\n' #后面加上换行符,写入的时候更清晰。
+ final_scores.append(result) #每统计一个学生的总分,就把姓名和总分写入空列表
+winner = open('/Users/Ted/Desktop/winner.txt','w',encoding='utf-8')
+#打开一个叫winner.txt的文件。(如果电脑中不存在winner.txt的话,这行代码会帮你自动新建一个空白的winner.txt)
+winner.writelines(final_scores)
+#final_scores是一个列表,而write()的参数必须是一个字符串,而writelines()可以是序列,所以我们使用writelines()。
+winner.close() #关闭文件。你记得不要把括号丢掉。
+
+```
+## py模块
+```
+# 模块是最高级别的程序组织单元:模块》》变量》》函数 类 》》 变量 》》 函数
+ 模块
+ ▼
+ 变量》》函数 #模块:“.py”后缀的文 件即模块
+ ▼
+ 类 》》变量 》》函数 #类:使用class语句封装一个类; 函数:使用def语句封装一个函数; 变量:使用赋值语句赋值一个变量
+ ▼
+其他可执行语句
+封装函数需要用def语句,封装类需要用class语句,但封装模块不需要任何语句,之所以不用任何语句,是因为每一份单独的Python代码文件(后缀名是.py的文件)就是一个单独的模块。
+
+ #模块相关语句
+import语句 :
+1.使用“import(模块名)”导入模块
+2.可以使用“import(模块名)as(别名)”为模块名取别名
+3.导入模块后,在调用模块中的变量/函数/类的时候,要加上“模块名.”格式
+from .. import ... 语句:
+1.from(模块名)impor t(指定的内容)
+2.导入模块,并且可以直接使用指定的内容(可以是变量、函数、类)
+if _name_ == '_ main_'
+1.通常在主模块中使用,表示这是“程序的入口”
+2.当该模块作为被导入的模块时,if _name_ == '_ main_'后面的代码不会被运行。
+
+ #模块三问
+1.这模块有哪些函数可用?(可以通过dir()函数查询)
+2.有哪些属性或方法可用?(去网上看文档或找教程)
+3.使用格式是什么?(从文档或教程中搜集案例)
+比较小的模块(比如random模块)可以通过这样的方式自学,大型模块的学习就比较困难(除非你有充足的专业背景知识)。
+例如数据分析需要用到pandas和NumPy模块,网页开发要用到Django模块等等,这些大型模块最好还是在课程上系统学习,避免散乱的学习形不成知识体系。
+
+
+# 这是主程序main.py
+# 请阅读代码注释
+import test # 导入test模块
+print(test.a) # 使用“模块.变量”调用模块中的变量
+test.hi() # 使用“模块.函数()”调用模块中的函数
+A = test.Go2() # 使用“变量 = 模块.类()”实例化模块中的类
+print(A.a) # 实例化后,不再需要“模块.”
+A.do2() # 实例化后,不再需要“模块.”
+
+例如:
+# 【文件:story.py】
+sentence = '从前有座山,'
+def mountain():
+ print('山里有座庙,')
+class Temple:
+ sentence = '庙里有个老和尚,'
+ def reading(self):
+ print('在讲一个长长的故事。')
+
+# 【文件:main.py】
+import story
+for i in range(10):
+ print(story.sentence)
+ story.mountain()
+ A = story.Temple()
+ print(A.sentence)
+ A.reading()
+ print()
+#》》庙里有个老和尚,
+#》》在讲一个长长的故事。
+
+#》》从前有座山,
+#》》山里有座庙,
+#》》庙里有个老和尚,
+#》》在讲一个长长的故事。
+import语句还有一种用法是import…as…。比如我们觉得import story太长,就可以用import story as s语句,意思是为“story”取个别名为“s”。
+上面的案例中,main.py文件可以写成这样:
+# 文件:main.py
+import story as s
+for i in range(10):
+ print(s.sentence)
+ s.mountain()
+ A = s.Temple()
+ print(A.sentence)
+ A.reading()
+ print()
+#我们需要同时导入多个模块时,可以用逗号隔开。比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。
+
+
+from … import … 语句:
+格式如下:
+from (模块名) import (指定模块中的变量名/函数名/类名)
+效果:
+1.导入模块中的指定部分(变量名/函数名/类名)
+2,导入后的指定的部分可以直接使用,无需加上“模块。”前缀
+如:
+# 【文件:test.py】
+def hi():
+ print('函数“hi”已经运行!')
+# 【文件:main.py】
+from test import hi # 从模块test中导入函数“hi”
+hi() # 使用函数“hi”时无需加上“模块.”前缀
+#》》函数“hi”已经运行!
+
+if __name__ == '__main__'语句:
+【指明】某个py文件是程序的运行入口,我们可以在该py文件中写出这样的代码:
+# 【文件:xx.py】
+代码块 ①……
+if __name__ == '__main__':
+ 代码块 ②……
+ #1.当xx.py文件被直接运行时,代码块②将被运行。2.当xx.py文件作为模块是被其他程序导入时,代码块②不被运行。
+
+使用他人的模块:
+import time和import random其实就是在导入time和random模块。
+如:
+import time
+print('第一句话,过两秒出现第二句。')
+time.sleep(2)
+print('第二句话。')
+#》》第一句话,过两秒出现第二句。
+#》》第二句话。
+import random
+a = random.randint(0,100) # 随机从0-100(包括0和100)之间抽取一个数字
+print(a)
+#》》17
+#这两个例子中的第一句代码import time和import random其实就是在导入time和random模块。
+
+Python作为一门胶水语言,一个强大的优势就是它拥有许多第三方的模块可以直接拿来使用。
+如果是第三方编写的模块,我们需要先从Python的资源管理库下载安装相关的模块文件。
+下载安装的方式是打开终端,Windows用户输入pip install + 模块名;苹果电脑输入:pip3 install + 模块名,点击enter即可。(需要预装python解释器和pip)比如说,爬虫时我们会需要用到requests这个库(库是具有相关功能模块的集合),就需要在终端输入pip3 install requests(Mac用户)的指令。
+如果内置模块是用Python语言编写的话,就能找到py文件:我们用命令random.__file__找出了random模块的文件路径,就可以去打开查看它的代码:
+如何自学模块:学习模块的核心是搞清楚模块的功能,也就是模块中的函数和类方法有什么作用,以及具体使用案例长什么样。
+用自学“random”模块为例,如果英文好的同学,可以直接阅读官方文档:https://docs.python.org/3.6/library/random.html
+或者也可以直接百度搜索:搜到教程后,我们重点关注的是模块中的函数和类方法有什么作用,然后把使用案例做成笔记.
+例如random模块的关键知识(也就是比较有用的函数和类方法),可以做成这样的笔记:
+import random # 调用random模块
+a = random.random() # 随机从0-1之间(包括0不包括1)抽取一个小数
+print(a)
+#》》0.7262662200235862
+a = random.randint(0,100) # 随机从0-100(包括0和100)之间抽取一个数字
+print(a)
+#》》82
+a = random.choice('abcdefg') # 随机从字符串,列表等对象中抽取一个元素(可能会重复)
+print(a)
+#》》b
+a = random.sample('abcdefg', 3) # 随机从字符串,列表等对象中抽取多个不重复的元素
+print(a)
+#》》['f', 'c', 'a']
+items = [1, 2, 3, 4, 5, 6] # “随机洗牌”,比如打乱列表
+random.shuffle(items)
+print(items)
+#》》[1, 3, 6, 4, 5, 2]
+
+使用dir()函数查看一个模块,看看它里面有什么变量、函数、类、类方法。
+# 请直接运行并体验代码
+import random # 调用random模块
+print(dir(random))
+#这就像是查户口一样,可以把模块中的函数(函数和类方法)一览无余地暴露出来。对于查到的结果"__xx__"结构的(如__doc__),它们是系统相关的函数,我们不用理会,直接看全英文的函数名即可。
+
+import csv
+with open('test.csv', newline = '', encoding = 'utf-8') as f:
+ reader=csv.reader(f)
+ for row in reader:
+ print(row)
+ print("读取完毕!")
+['\ufeff商品编号', '商品名称', '单价', '库存', '销量']
+['1', '猫零食', '12', '3133', '5164']
+['2', '普通猫粮', '33', '5055', '2231']
+['3', '猫粮四合一', '187', '212', '334']
+读取完毕!
+用writerow()方法为它追加写入两行列表
+mport csv
+with open('test.csv','a', newline='',encoding='utf-8') as f:
+ writer = csv.writer(f)
+ writer.writerow(['4', '猫砂', '25', '1022', '886'])
+ writer.writerow(['5', '猫罐头', '18', '2234', '3121'])
+
+```
+## ::异常处理::
+```
+
+
+通过编程处理选择的异常是可行的。看一下下面的例子:它会一直要求用户输入,直到输入一个合法的整数为止,但允许用户中断这个程序(使用 `Control-C` 或系统支持的任何方法)。注意:用户产生的中断会引发一个 [KeyboardInterrupt](https://docs.python.org/3/library/exceptions.html#KeyboardInterrupt) 异常。
+
+> > while True:
+... try:
+... x = int(input("Please enter a number: "))
+... break
+... except ValueError:
+... print("Oops! That was no valid number. Try again...")
+... [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句按如下方式工作。
+
+- 首先,执行 *try* 子句 (在 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 和 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 关键字之间的部分)。
+- 如果没有异常发生, *except* 子句 在 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句执行完毕后就被忽略了。
+- 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。
+
+ 如果异常匹配于 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 关键字后面指定的异常类型,就执行对应的except子句。然后继续执行 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句之后的代码。
+
+- 如果发生了一个异常,在 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 子句中没有与之匹配的分支,它就会传递到上一级 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句中。
+
+ 如果最终仍找不到对应的处理语句,它就成为一个 *未处理异常*,终止程序运行,显示提示信息。
+
+一个 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句可能包含多个 except 子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的 try 子句中发生的异常,在同一个 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句中,其他子句中发生的异常则不作处理。一个 except 子句可以在括号中列出多个异常的名字,例如:
+
+... except (RuntimeError, TypeError, NameError):
+
+... pass
+
+最后一个 except 子句可以省略异常名称,以作为通配符使用。你需要慎用此法,因为它会轻易隐藏一个实际的程序错误!可以使用这种方法打印一条错误信息,然后重新抛出异常(允许调用者处理这个异常):
+
+import sys
+
+try:
+f = open('myfile.txt')
+s = f.readline()
+i = int(s.strip())
+
+except OSError as err:
+print("OS error: {0}".format(err))
+
+except ValueError:
+print("Could not convert data to an integer.")
+
+except:
+print("Unexpected error:", sys.exc_info()[0])
+raise
+
+[try](https://docs.python.org/3/reference/compound_stmts.html#try) … [except](https://docs.python.org/3/reference/compound_stmts.html#except) 语句可以带有一个 *else子句*,该子句只能出现在所有 except 子句之后。当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句。例如:
+
+for arg in sys.argv[1:]:
+try:
+f = open(arg, 'r')
+except IOError:
+print('cannot open', arg)
+else:
+print(arg, 'has', len(f.readlines()), 'lines')
+f.close()
+
+使用 [else](https://docs.python.org/3/reference/compound_stmts.html#else) 子句比在 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 子句中附加代码要好,因为这样可以避免 [try](https://docs.python.org/3/reference/compound_stmts.html#try) … [except](https://docs.python.org/3/reference/compound_stmts.html#except) 意外的截获本来不属于它们保护的那些代码抛出的异常。
+
+发生异常时,可能会有一个附属值,作为异常的 *参数* 存在。这个参数是否存在、是什么类型,依赖于异常的类型。
+
+在异常名(列表)之后,也可以为 except 子句指定一个变量。这个变量绑定于一个异常实例,它存储在 `instance.args` 的参数中。为了方便起见,异常实例定义了 [**str**()](https://docs.python.org/3/reference/datamodel.html#object.__str__) ,这样就可以直接访问过打印参数而不必引用 `.args`。这种做法不受鼓励。相反,更好的做法是给异常传递一个参数(如果要传递多个参数,可以传递一个元组),把它绑定到 message 属性。一旦异常发生,它会在抛出前绑定所有指定的属性。
+
+> > try:
+... raise Exception('spam', 'eggs')
+... except Exception as inst:
+... print(type(inst)) # the exception instance
+... print(inst.args) # arguments stored in .args
+... print(inst) # **str** allows args to be printed directly,
+... # but may be overridden in exception subclasses
+... x, y = inst.args # unpack args
+... print('x =', x)
+... print('y =', y)
+...
+
+('spam', 'eggs')
+('spam', 'eggs')
+x = spam
+y = eggs
+对于那些未处理的异常,如果一个它们带有参数,那么就会被作为异常信息的最后部分(“详情”)打印出来。
+异常处理器不仅仅处理那些在 try 子句中立刻发生的异常,也会处理那些 try 子句中调用的函数内部发生的异常。例如:
+
+> > def this_fails():
+... x = 1/0
+...
+
+> > try:
+... this_fails()
+... except ZeroDivisionError as err:
+... print('Handling run-time error:', err)
+...
+Handling run-time error: int division or modulo by zero
+
+## 13.1 抛出异常
+
+[raise](https://docs.python.org/3/reference/simple_stmts.html#raise) 语句允许程序员强制抛出一个指定的异常。例如:
+
+raise NameError('HiThere') Traceback (most recent call last): File "", line 1, in ? NameError: HiThere 要抛出的异常由 [raise](https://docs.python.org/3/reference/simple_stmts.html#raise) 的唯一参数标识。它必需是一个异常实例或异常类(继承自 [Exception](https://docs.python.org/3/library/exceptions.html#Exception) 的类)。 如果你需要明确一个异常是否抛出,但不想处理它,[raise](https://docs.python.org/3/reference/simple_stmts.html#raise) 语句可以让你很简单的重新抛出该异常:
+
+try: ... raise NameError('HiThere') ... except NameError: ... print('An exception flew by!') ... raise ... An exception flew by! Traceback (most recent call last): File "", line 2, in ? NameError: HiThere
+
+## 13.2用户自定义异常
+
+在程序中可以通过创建新的异常类型来命名自己的异常(Python 类的内容请参见 [类](http://www.pythondoc.com/pythontutorial3/classes.html#tut-classes) )。异常类通常应该直接或间接的从 [Exception](https://docs.python.org/3/library/exceptions.html#Exception) 类派生,例如:
+
+> > class MyError(Exception):
+... def **init**(self, value):
+... self.value = value
+... def **str**(self):
+... return repr(self.value)
+...
+
+> > try:
+... raise MyError(2*2)
+... except MyError as e:
+... print('My exception occurred, value:', e.value)
+...
+My exception occurred, value: 4
+
+raise MyError('oops!') Traceback (most recent call last): File "", line 1, in ? **main**.MyError: 'oops!' 在这个例子中,[Exception](https://docs.python.org/3/library/exceptions.html#Exception) 默认的 [**init**()](https://docs.python.org/3/reference/datamodel.html#object.__init__) 被覆盖。新的方式简单的创建 *value* 属性。这就替换了原来创建 *args* 属性的方式。 异常类中可以定义任何其它类中可以定义的东西,但是通常为了保持简单,只在其中加入几个属性信息,以供异常处理句柄提取。如果一个新创建的模块中需要抛出几种不同的错误时,一个通常的作法是为该模块定义一个异常基类,然后针对不同的错误类型派生出对应的异常子类: class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression–input expression in which the error occurred message -- explanation of the error """ def **init**(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous–state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def **init**(self, previous, next, message): self.previous = previous self.next = next self.message = message 与标准异常相似,大多数异常的命名都以 “Error” 结尾。 很多标准模块中都定义了自己的异常,用以报告在他们所定义的函数中可能发生的错误。关于类的进一步信息请参见 [类](http://www.pythondoc.com/pythontutorial3/classes.html#tut-classes) 一章。
+
+## 13.4定义清理行为
+
+[try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句还有另一个可选的子句,目的在于定义在任何情况下都一定要执行的功能。例如:
+
+try: ... raise KeyboardInterrupt ... finally: ... print('Goodbye, world!') ... Goodbye, world! KeyboardInterrupt Traceback (most recent call last): File "", line 2, in ? 不管有没有发生异常,*finally子句* 在程序离开 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 后都一定会被执行。当 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句中发生了未被 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 捕获的异常(或者它发生在 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 或 [else](https://docs.python.org/3/reference/compound_stmts.html#else) 子句中),在 [finally](https://docs.python.org/3/reference/compound_stmts.html#finally) 子句执行完后它会被重新抛出。 [try](https://docs.python.org/3/reference/compound_stmts.html#try) 语句经由 [break](https://docs.python.org/3/reference/simple_stmts.html#break) ,[continue](https://docs.python.org/3/reference/simple_stmts.html#continue) 或 [return](https://docs.python.org/3/reference/simple_stmts.html#return) 语句退 出也一样会执行 [finally](https://docs.python.org/3/reference/compound_stmts.html#finally) 子句。以下是一个更复杂些的例子:
+
+> > def divide(x, y):
+... try:
+... result = x / y
+... except ZeroDivisionError:
+... print("division by zero!")
+... else:
+... print("result is", result)
+... finally:
+... print("executing finally clause")
+...
+
+> > divide(2, 1)
+result is 2
+executing finally clause
+
+> > divide(2, 0)
+division by zero!
+executing finally clause
+
+divide("2", "1") executing finally clause Traceback (most recent call last): File "", line 1, in ? File "", line 3, in divide TypeError: unsupported operand type(s) for /: 'str' and 'str' 如你所见, [finally](https://docs.python.org/3/reference/compound_stmts.html#finally) 子句在任何情况下都会执行。[TypeError](https://docs.python.org/3/library/exceptions.html#TypeError) 在两个字符串相除的时候抛出,未被 except 子句捕获,因此在 [finally](https://docs.python.org/3/reference/compound_stmts.html#finally) 子句执行完毕后重新抛出。 在真实场景的应用程序中,[finally](https://docs.python.org/3/reference/compound_stmts.html#finally) 子句用于释放外部资源(文件 或网络连接之类的),无论它们的使用过程中是否出错。
+
+## 13.5预定义清理行为
+
+有些对象定义了标准的清理行为,无论对象操作是否成功,不再需要该对象的时候就会起作用。以下示例尝试打开文件并把内容打印到屏幕上。
+
+for line in open("myfile.txt"):
+print(line)
+
+这段代码的问题在于在代码执行完后没有立即关闭打开的文件。这在简单的脚本里没什么,但是大型应用程序就会出问题。[with](https://docs.python.org/3/reference/compound_stmts.html#with) 语句使得文件之类的对象可以 确保总能及时准确地进行清理。
+
+with open("myfile.txt") as f:
+for line in f:
+print(line)
+
+语句执行后,文件 *f* 总会被关闭,即使是在处理文件中的数据时出错也一样。其它对象是否提供了预定义的清理行为要查看它们的文档。
+
+
+
+
+```
+## 9.py类
+```
+
+Python 的类机制通过最小的新语法和语义在语言中实现了类。它是 C++ 或者 Modula-3 语言中类机制的混合。就像模块一样,Python 的类并没有在用户和定义之间设立绝对的屏障,而是依赖于用户不去“强行闯入定义”的优雅。另一方面,类的大多数重要特性都被完整的保留下来:类继承机制允许多重继承,派生类可以覆盖(override)基类中的任何方法或类,可以使用相同的方法名称调用基类的方法。对象可以包含任意数量的私有数据。
+
+用 C++ 术语来讲,所有的类成员(包括数据成员)都是公有( *public* )的(其它情况见下文 [私有变量](http://www.pythondoc.com/pythontutorial3/classes.html#tut-private)),所有的成员函数都是虚( *virtual* )的。用 Modula-3 的术语来讲,在成员方法中没有简便的方式引用对象的成员:方法函数在定义时需要以引用的对象做为第一个参数,调用时则会隐式引用对象。像在 Smalltalk 中一个,类也是对象。这就提供了导入和重命名语义。不像 C++ 和 Modula-3 中那样,大多数带有特殊语法的内置操作符(算法运算符、下标等)都可以针对类的需要重新定义。
+
+在讨论类时,没有足够的得到共识的术语,我会偶尔从 Smalltalk 和 C++ 借用一些。我比较喜欢用 Modula-3 的用语,因为比起 C++,Python 的面向对象语法更像它,但是我想很少有读者听过这个。
+
+## 9.1. 术语相关
+
+对象具有特性,并且多个名称(在多个作用域中)可以绑定在同一个对象上。在其它语言中被称为别名。在对 Python 的第一印象中这通常会被忽略,并且当处理不可变基础类型(数字,字符串,元组)时可以被放心的忽略。但是,在调用列表、字典这类可变对象,或者大多数程序外部类型(文件,窗体等)描述实体时,别名对 Python 代码的语义便具有(有意而为)影响。这通常有助于程序的优化,因为在某些方面别名表现的就像是指针。例如,你可以轻易的传递一个对象,因为通过继承只是传递一个指针。并且如果一个方法修改了一个作为参数传递的对象,调用者可以接收这一变化——这消除了两种不同的参数传递机制的需要,像 Pascal 语言。
+
+## 9.2. Python 作用域和命名空间
+
+在介绍类之前,我首先介绍一些有关 Python 作用域的规则。类的定义非常巧妙的运用了命名空间,要完全理解接下来的知识,需要先理解作用域和命名空间的工作原理。另外,这一切的知识对于任何高级 Python 程序员都非常有用。
+
+让我们从一些定义说起。
+
+*命名空间* 是从命名到对象的映射。当前命名空间主要是通过 Python 字典实现的,不过通常不关心具体的实现方式(除非出于性能考虑),以后也有可能会改变其实现方式。以下有一些命名空间的例子:内置命名(像 [abs()](https://docs.python.org/3/library/functions.html#abs) 这样的函数,以及内置异常名)集,模块中的全局命名,函数调用中的局部命名。某种意义上讲对象的属性集也是一个命名空间。关于命名空间需要了解的一件很重要的事就是不同命名空间中的命名没有任何联系,例如两个不同的模块可能都会定义一个名为 `maximize` 的函数而不会发生混淆-用户必须以模块名为前缀来引用它们。
+
+顺便提一句,我称 Python 中任何一个“.”之后的命名为 *属性* --例如,表达式 `z.real` 中的 `real` 是对象 `z` 的一个属性。严格来讲,从模块中引用命名是引用属性:表达式 `modname.funcname` 中,`modname` 是一个模块对象,`funcname` 是它的一个属性。因此,模块的属性和模块中的全局命名有直接的映射关系:它们共享同一命名空间![[1]](http://www.pythondoc.com/pythontutorial3/classes.html#id27)
+
+属性可以是只读过或写的。后一种情况下,可以对属性赋值。你可以这样作: `modname.the_answer = 42` 。可写的属性也可以用 [del](https://docs.python.org/3/reference/simple_stmts.html#del) 语句删除。例如: `del modname.the_answer` 会从 `modname` 对象中删除 `the_answer` 属性。
+
+不同的命名空间在不同的时刻创建,有不同的生存期。包含内置命名的命名空间在 Python 解释器启动时创建,会一直保留,不被删除。模块的全局命名空间在模块定义被读入时创建,通常,模块命名空间也会一直保存到解释器退出。由解释器在最高层调用执行的语句,不管它是从脚本文件中读入还是来自交互式输入,都是 [**main**](https://docs.python.org/3/library/__main__.html#module-__main__) 模块的一部分,所以它们也拥有自己的命名空间(内置命名也同样被包含在一个模块中,它被称作 [builtins](https://docs.python.org/3/library/builtins.html#module-builtins) )。
+
+当调用函数时,就会为它创建一个局部命名空间,并且在函数返回或抛出一个并没有在函数内部处理的异常时被删除。(实际上,用遗忘来形容到底发生了什么更为贴切。)当然,每个递归调用都有自己的局部命名空间。
+
+*作用域* 就是一个 Python 程序可以直接访问命名空间的正文区域。这里的直接访问意思是一个对名称的错误引用会尝试在命名空间内查找。尽管作用域是静态定义,在使用时他们都是动态的。每次执行时,至少有三个命名空间可以直接访问的作用域嵌套在一起:
+
+- 包含局部命名的使用域在最里面,首先被搜索;其次搜索的是中层的作用域,这里包含了同级的函数;
+
+ 最后搜索最外面的作用域,它包含内置命名。
+
+- 首先搜索最内层的作用域,它包含局部命名任意函数包含的作用域,是内层嵌套作用域搜索起点,包含非局部,但是也非全局的命名
+- 接下来的作用域包含当前模块的全局命名
+- 最外层的作用域(最后搜索)是包含内置命名的命名空间
+
+如果一个命名声明为全局的,那么对它的所有引用和赋值会直接搜索包含这个模块全局命名的作用域。如果要重新绑定最里层作用域之外的变量,可以使用 [nonlocal](https://docs.python.org/3/reference/simple_stmts.html#nonlocal) 语句;如果不声明为 nonlocal,这些变量将是只读的(对这样的变量赋值会在最里面的作用域创建一个新的局部变量,外部具有相同命名的那个变量不会改变)。
+
+通常,局部作用域引用当前函数的命名。在函数之外,局部作用域与全局使用域引用同一命名空间:模块命名空间。类定义也是局部作用域中的另一个命名空间。
+
+重要的是作用域决定于源程序的意义:一个定义于某模块中的函数的全局作用域是该模块的命名空间,而不是该函数的别名被定义或调用的位置,了解这一点非常重要。另一方面,命名的实际搜索过程是动态的,在运行时确定的——然而,Python 语言也在不断发展,以后有可能会成为静态的“编译”时确定,所以不要依赖动态解析!(事实上,局部变量已经是静态确定了。)
+
+Python 的一个特别之处在于:如果没有使用 [global](https://docs.python.org/3/reference/simple_stmts.html#global) 语法,其赋值操作总是在最里层的作用域。赋值不会复制数据,只是将命名绑定到对象。删除也是如此:`del x` 只是从局部作用域的命名空间中删除命名 `x` 。事实上,所有引入新命名的操作都作用于局部作用域。特别是 [import](https://docs.python.org/3/reference/simple_stmts.html#import) 语句和函数定义将模块名或函数绑定于局部作用域(可以使用 [global](https://docs.python.org/3/reference/simple_stmts.html#global) 语句将变量引入到全局作用域)。
+
+[global](https://docs.python.org/3/reference/simple_stmts.html#global) 语句用以指明某个特定的变量为全局作用域,并重新绑定它。[nonlocal](https://docs.python.org/3/reference/simple_stmts.html#nonlocal) 语句用以指明某个特定的变量为封闭作用域,并重新绑定它。
+
+### 9.2.1. 作用域和命名空间示例
+
+以下是一个示例,演示了如何引用不同作用域和命名空间,以及 [global](https://docs.python.org/3/reference/simple_stmts.html#global) 和 [nonlocal](https://docs.python.org/3/reference/simple_stmts.html#nonlocal) 如何影响变量绑定:
+
+def scope_test():
+def do_local():
+spam = "local spam"
+def do_nonlocal():
+nonlocal spam
+spam = "nonlocal spam"
+def do_global():
+global spam
+spam = "global spam"
+spam = "test spam"
+do_local()
+print("After local assignment:", spam)
+do_nonlocal()
+print("After nonlocal assignment:", spam)
+do_global()
+print("After global assignment:", spam)
+
+scope_test()
+
+print("In global scope:", spam)
+
+以上示例代码的输出为:
+
+After local assignment: test spam
+
+After nonlocal assignment: nonlocal spam
+
+After global assignment: nonlocal spam
+
+In global scope: global spam
+
+注意:*local* 赋值语句是无法改变 *scope_test* 的 *spam* 绑定。[nonlocal](https://docs.python.org/3/reference/simple_stmts.html#nonlocal) 赋值语句改变了 *scope_test* 的 *spam* 绑定,并且 [global](https://docs.python.org/3/reference/simple_stmts.html#global) 赋值语句从模块级改变了 spam 绑定。
+
+你也可以看到在 [global](https://docs.python.org/3/reference/simple_stmts.html#global) 赋值语句之前对 *spam* 是没有预先绑定的。
+
+## 9.3. 初识类
+
+类引入了一些新语法:三种新的对象类型和一些新的语义。
+
+### 9.3.1. 类定义语法
+
+类定义最简单的形式如下:
+
+class ClassName: . . .
+
+类的定义就像函数定义( [def](https://docs.python.org/3/reference/compound_stmts.html#def) 语句),要先执行才能生效。(你当然可以把它放进 [if](https://docs.python.org/3/reference/compound_stmts.html#if) 语句的某一分支,或者一个函数的内部。)
+
+习惯上,类定义语句的内容通常是函数定义,不过其它语句也可以,有时会很有用,后面我们再回过头来讨论。类中的函数定义通常包括了一个特殊形式的参数列表,用于方法调用约定——同样我们在后面讨论这些。
+
+进入类定义部分后,会创建出一个新的命名空间,作为局部作用域。因此,所有的赋值成为这个新命名空间的局部变量。特别是函数定义在此绑定了新的命名。
+
+类定义完成时(正常退出),就创建了一个 *类对象*。基本上它是对类定义创建的命名空间进行了一个包装;我们在下一节进一步学习类对象的知识。原始的局部作用域(类定义引入之前生效的那个)得到恢复,类对象在这里绑定到类定义头部的类名(例子中是 `ClassName` )。
+
+### 9.3.2. 类对象
+
+类对象支持两种操作:属性引用和实例化。
+
+*属性引用* 使用和 Python 中所有的属性引用一样的标准语法:`obj.name`。类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
+
+class MyClass:
+"""A simple example class"""
+i = 12345
+def f(self):
+return 'hello world'
+
+那么 `MyClass.i` 和 `MyClass.f` 是有效的属性引用,分别返回一个整数和一个方法对象。也可以对类属性赋值,你可以通过给 `MyClass.i` 赋值来修改它。 `__doc__` 也是一个有效的属性,返回类的文档字符串:`"A simple example class"`。
+
+类的 *实例化* 使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可。例如(假设沿用前面的类):
+
+x = MyClass()
+
+以上创建了一个新的类 *实例* 并将该对象赋给局部变量 `x`。
+
+这个实例化操作(“调用”一个类对象)来创建一个空的对象。很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为 `__init__()` 的特殊方法,像下面这样:
+
+def **init**(self):
+self.data = []
+
+类定义了 `__init__()` 方法的话,类的实例化操作会自动为新创建的类实例调用 `__init__()` 方法。所以在下例中,可以这样创建一个新的实例:
+
+x = MyClass()
+
+当然,出于弹性的需要,`__init__()` 方法可以有参数。事实上,参数通过 `__init__()` 传递到类的实例化操作上。例如,
+
+> > class Complex:
+... def **init**(self, realpart, imagpart):
+... self.r = realpart
+... self.i = imagpart
+...
+
+> > x = Complex(3.0, -4.5)
+
+> > x.r, x.i
+(3.0, -4.5)
+
+### 9.3.3. 实例对象
+
+现在我们可以用实例对象作什么?实例对象唯一可用的操作就是属性引用。有两种有效的属性名。
+
+*数据属性* 相当于 Smalltalk 中的“实例变量”或 C++ 中的“数据成员”。和局部变量一样,数据属性不需要声明,第一次使用时它们就会生成。例如,如果 `x` 是前面创建的 `MyClass` 实例,下面这段代码会打印出 16 而在堆栈中留下多余的东西:
+
+x.counter = 1
+
+while x.counter < 10:
+x.counter = x.counter * 2
+
+print(x.counter)
+
+del x.counter
+
+另一种为实例对象所接受的引用属性是 *方法*。方法是“属于”一个对象的函数。(在 Python 中,方法不止是类实例所独有:其它类型的对象也可有方法。例如,链表对象有 append,insert,remove,sort 等等方法。然而,在后面的介绍中,除非特别说明,我们提到的方法特指类方法)
+
+实例对象的有效名称依赖于它的类。按照定义,类中所有(用户定义)的函数对象对应它的实例中的方法。所以在我们的例子中,`x.f` 是一个有效的方法引用,因为 `MyClass.f` 是一个函数。但 `x.i` 不是,因为 `MyClass.i` 不是函数。不过 `x.f` 和 `MyClass.f` 不同,它是一个 *方法对象* ,不是一个函数对象。
+
+### 9.3.4. 方法对象
+
+通常,方法通过右绑定方式调用:
+
+x.f()
+
+在 `MyClass` 示例中,这会返回字符串 `'hello world'`。然而,也不是一定要直接调用方法。 `x.f` 是一个方法对象,它可以存储起来以后调用。例如:
+
+xf = x.f
+
+while True:
+print(xf())
+
+会不断的打印 `hello world`。
+
+调用方法时发生了什么?你可能注意到调用 `x.f()` 时没有引用前面标出的变量,尽管在 `f()` 的函数定义中指明了一个参数。这个参数怎么了?事实上如果函数调用中缺少参数,Python 会抛出异常--甚至这个参数实际上没什么用……
+
+实际上,你可能已经猜到了答案:方法的特别之处在于实例对象作为函数的第一个参数传给了函数。在我们的例子中,调用 `x.f()` 相当于 `MyClass.f(x)` 。通常,以 *n* 个参数的列表去调用一个方法就相当于将方法的对象插入到参数列表的最前面后,以这个列表去调用相应的函数。
+
+如果你还是不理解方法的工作原理,了解一下它的实现也许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的函数对象类属性,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后函数对象调用这个新的参数列表。
+
+### 9.3.5. 类和实例变量
+
+一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:
+
+class Dog:
+kind = 'canine' # class variable shared by all instances
+def **init**(self, name): [self.name](http://self.name) = name # instance variable unique to each instance
+
+> > d = Dog('Fido')
+
+> > e = Dog('Buddy')
+
+> > d.kind # shared by all dogs
+'canine'
+
+> > e.kind # shared by all dogs
+'canine'
+
+> > [d.name](http://d.name) # unique to d
+'Fido'
+
+> > [e.name](http://e.name) # unique to e
+'Buddy'
+正如在 [术语相关](http://www.pythondoc.com/pythontutorial3/classes.html#tut-object) 讨论的, [可变](https://docs.python.org/3/glossary.html#term-mutable) 对象,例如列表和字典,的共享数据可能带来意外的效果。例如,下面代码中的 *tricks* 列表不应该用作类变量,因为所有的 *Dog* 实例将共享同一个列表:
+class Dog:
+tricks = [] # mistaken use of a class variable
+def **init**(self, name): [self.name](http://self.name) = name
+def add_trick(self, trick):
+self.tricks.append(trick)
+
+> > d = Dog('Fido')
+
+> > e = Dog('Buddy')
+
+> > d.add_trick('roll over')
+
+> > e.add_trick('play dead')
+
+> > d.tricks # unexpectedly shared by all dogs
+['roll over', 'play dead']
+这个类的正确设计应该使用一个实例变量:
+class Dog:
+def **init**(self, name): [self.name](http://self.name) = name
+self.tricks = [] # creates a new empty list for each dog
+def add_trick(self, trick):
+self.tricks.append(trick)
+
+> > d = Dog('Fido')
+
+> > e = Dog('Buddy')
+
+> > d.add_trick('roll over')
+
+> > e.add_trick('play dead')
+
+> > d.tricks
+['roll over']
+
+> > e.tricks
+['play dead']
+
+## 9.4. 一些说明
+
+数据属性会覆盖同名的方法属性。为了避免意外的名称冲突,这在大型程序中是极难发现的 Bug,使用一些约定来减少冲突的机会是明智的。可能的约定包括:大写方法名称的首字母,使用一个唯一的小字符串(也许只是一个下划线)作为数据属性名称的前缀,或者方法使用动词而数据属性使用名词。
+
+数据属性可以被方法引用,也可以由一个对象的普通用户(客户)使用。换句话说,类不能用来实现纯净的数据类型。事实上,Python 中不可能强制隐藏数据——一切基于约定(如果需要,使用 C 编写的 Python 实现可以完全隐藏实现细节并控制对象的访问。这可以用来通过 C 语言扩展 Python)。
+
+客户应该谨慎的使用数据属性——客户可能通过践踏他们的数据属性而使那些由方法维护的常量变得混乱。注意:只要能避免冲突,客户可以向一个实例对象添加他们自己的数据属性,而不会影响方法的正确性——再次强调,命名约定可以避免很多麻烦。
+
+从方法内部引用数据属性(或其他方法)并没有快捷方式。我觉得这实际上增加了方法的可读性:当浏览一个方法时,在局部变量和实例变量之间不会出现令人费解的情况。
+
+一般,方法的第一个参数被命名为 `self`。这仅仅是一个约定:对 Python 而言,名称 `self` 绝对没有任何特殊含义。(但是请注意:如果不遵循这个约定,对其他的 Python 程序员而言你的代码可读性就会变差,而且有些 *类查看器* 程序也可能是遵循此约定编写的。)
+
+类属性的任何函数对象都为那个类的实例定义了一个方法。函数定义代码不一定非得定义在类中:也可以将一个函数对象赋值给类中的一个局部变量。例如:
+
+# Function defined outside the class
+
+def f1(self, x, y):
+return min(x, x+y)
+
+class C:
+f = f1
+def g(self):
+return 'hello world'
+h = g
+
+现在 `f`, `g` 和 `h` 都是类 `C` 的属性,引用的都是函数对象,因此它们都是 `C` 实例的方法-- `h` 严格等于 `g` 。要注意的是这种习惯通常只会迷惑程序的读者。
+
+通过 `self` 参数的方法属性,方法可以调用其它的方法:
+
+class Bag:
+def **init**(self):
+self.data = []
+def add(self, x):
+self.data.append(x)
+def addtwice(self, x):
+self.add(x)
+self.add(x)
+
+方法可以像引用普通的函数那样引用全局命名。与方法关联的全局作用域是包含类定义的模块。(类本身永远不会做为全局作用域使用。)尽管很少有好的理由在方法 中使用全局数据,全局作用域确有很多合法的用途:其一是方法可以调用导入全局作用域的函数和方法,也可以调用定义在其中的类和函数。通常,包含此方法的类也会定义在这个全局作用域,在下一节我们会了解为何一个方法要引用自己的类。
+
+每个值都是一个对象,因此每个值都有一个 类( *class* ) (也称为它的 类型( *type* ) ),它存储为 `object.__class__` 。
+
+## 9.5. 继承
+
+当然,如果一种语言不支持继承就,“类”就没有什么意义。派生类的定义如下所示:
+
+class DerivedClassName(BaseClassName): . . .
+
+命名 `BaseClassName` (示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:
+
+class DerivedClassName(modname.BaseClassName):
+
+派生类定义的执行过程和基类是一样的。构造派生类对象时,就记住了基类。这在解析属性引用的时候尤其有用:如果在类中找不到请求调用的属性,就搜索基类。如果基类是由别的类派生而来,这个规则会递归的应用上去。
+
+派生类的实例化没有什么特殊之处: `DerivedClassName()` (示列中的派生类)创建一个新的类实例。方法引用按如下规则解析:搜索对应的类属性,必要时沿基类链逐级搜索,如果找到了函数对象这个方法引用就是合法的。
+
+派生类可能会覆盖其基类的方法。因为方法调用同一个对象中的其它方法时没有特权,基类的方法调用同一个基类的方法时,可能实际上最终调用了派生类中的覆盖方法。(对于 C++ 程序员来说,Python 中的所有方法本质上都是 `虚` 方法。)
+
+派生类中的覆盖方法可能是想要扩充而不是简单的替代基类中的重名方法。有一个简单的方法可以直接调用基类方法,只要调用: `BaseClassName.methodname(self, arguments)`。有时这对于客户也很有用。(要注意只有 `BaseClassName` 在同一全局作用域定义或导入时才能这样用。)
+
+Python 有两个用于继承的函数:
+
+- 函数 [isinstance()](https://docs.python.org/3/library/functions.html#isinstance) 用于检查实例类型: `isinstance(obj, int)` 只有在 `obj.__class__` 是 [int](https://docs.python.org/3/library/functions.html#int) 或其它从 [int](https://docs.python.org/3/library/functions.html#int) 继承的类型
+- 函数 [issubclass()](https://docs.python.org/3/library/functions.html#issubclass) 用于检查类继承: `issubclass(bool, int)` 为 `True`,因为 [bool](https://docs.python.org/3/library/functions.html#bool) 是 [int](https://docs.python.org/3/library/functions.html#int) 的子类。
+
+ 然而, `issubclass(float, int)` 为 `False`,因为 [float](https://docs.python.org/3/library/functions.html#float) 不是 [int](https://docs.python.org/3/library/functions.html#int) 的子类。
+
+### 9.5.1. 多继承
+
+Python 同样有限的支持多继承形式。多继承的类定义形如下例:
+
+class DerivedClassName(Base1, Base2, Base3): . . .
+
+在大多数情况下,在最简单的情况下,你能想到的搜索属性从父类继承的深度优先,左到右,而不是搜索两次在同一个类层次结构中,其中有一个重叠。因此,如果在 `DerivedClassName` (示例中的派生类)中没有找到某个属性,就会搜索 `Base1`,然后(递归的)搜索其基类,如果最终没有找到,就搜索 `Base2`,以此类推。
+
+实际上,[super()](https://docs.python.org/3/library/functions.html#super) 可以动态的改变解析顺序。这个方式可见于其它的一些多继承语言,类似 call-next-method,比单继承语言中的 super 更强大 。
+
+动态调整顺序十分必要的,因为所有的多继承会有一到多个菱形关系(指有至少一个祖先类可以从子类经由多个继承路径到达)。例如,所有的 new-style 类继承自 [object](https://docs.python.org/3/library/functions.html#object) ,所以任意的多继承总是会有多于一条继承路径到达 [object](https://docs.python.org/3/library/functions.html#object) 。
+
+为了防止重复访问基类,通过动态的线性化算法,每个类都按从左到右的顺序特别指定了顺序,每个祖先类只调用一次,这是单调的(意味着一个类被继承时不会影响它祖先的次序)。总算可以通过这种方式使得设计一个可靠并且可扩展的多继承类成为可能。进一步的内容请参见 [http://www.python.org/download/releases/2.3/mro/](http://www.python.org/download/releases/2.3/mro/) 。
+
+## 9.6. 私有变量
+
+只能从对像内部访问的“私有”实例变量,在 Python 中不存在。然而,也有一个变通的访问用于大多数 Python 代码:以一个下划线开头的命名(例如 `_spam` )会被处理为 API 的非公开部分(无论它是一个函数、方法或数据成员)。它会被视为一个实现细节,无需公开。
+
+因为有一个正当的类私有成员用途(即避免子类里定义的命名与之冲突),Python 提供了对这种结构的有限支持,称为 *name mangling* (命名编码) 。任何形如 `__spam` 的标识(前面至少两个下划线,后面至多一个),被替代为 `_classname__spam` ,去掉前导下划线的 `classname` 即当前的类名。此语法不关注标识的位置,只要求在类定义内。
+
+名称重整是有助于子类重写方法,而不会打破组内的方法调用。例如:
+
+class Mapping:
+def **init**(self, iterable):
+self.items_list = []
+self.__update(iterable)
+def update(self, iterable):
+for item in iterable:
+self.items_list.append(item)
+__update = update # private copy of original update() method
+
+class MappingSubclass(Mapping):
+def update(self, keys, values):
+# provides new signature for update()
+# but does not break **init**()
+for item in zip(keys, values):
+self.items_list.append(item)
+
+需要注意的是编码规则设计为尽可能的避免冲突,被认作为私有的变量仍然有可能被访问或修改。在特定的场合它也是有用的,比如调试的时候。
+
+要注意的是代码传入 `exec()`, `eval()` 时不考虑所调用的类的类名,视其为当前类,这类似于 `global` 语句的效应,已经按字节编译的部分也有同样的限制。这也同样作用于 `getattr()`, `setattr()` 和 `delattr()`,像直接引用 `__dict__` 一样。
+
+## 9.7. 补充
+
+有时类似于 Pascal 中“记录(record)”或 C 中“结构(struct)”的数据类型很有用,它将一组已命名的数据项绑定在一起。一个空的类定义可以很好的实现它:
+
+class Employee:
+pass
+
+john = Employee() # Create an empty employee record
+
+# Fill the fields of the record
+
+[john.name](http://john.name) = 'John Doe'
+
+john.dept = 'computer lab'
+
+john.salary = 1000
+
+某一段 Python 代码需要一个特殊的抽象数据结构的话,通常可以传入一个类,事实上这模仿了该类的方法。例如,如果你有一个用于从文件对象中格式化数据的函数,你可以定义一个带有 `read()` 和 `readline()` 方法的类,以此从字符串缓冲读取数据,然后将该类的对象作为参数传入前述的函数。
+
+实例方法对象也有属性:`m.__self__` 是一个实例方法所属的对象,而 `m.__func__` 是这个方法对应的函数对象。
+
+## 9.8. 异常也是类
+
+用户自定义异常也可以是类。利用这个机制可以创建可扩展的异常体系。
+
+以下是两种新的,有效的(语义上的)异常抛出形式,使用 [raise](https://docs.python.org/3/reference/simple_stmts.html#raise) 语句:
+
+raise Class
+
+raise Instance
+
+第一种形式中,`Class` 必须是 [type](https://docs.python.org/3/library/functions.html#type) 或其派生类的一个实例。第二种形式是以下形式的简写:
+
+raise Class()
+
+发生的异常其类型如果是 [except](https://docs.python.org/3/reference/compound_stmts.html#except) 子句中列出的类,或者是其派生类,那么它们就是相符的(反过来说--发生的异常其类型如果是异常子句中列出的类的基类,它们就不相符)。例如,以下代码会按顺序打印 B,C,D:
+
+class B(Exception):
+pass
+
+class C(B):
+pass
+
+class D(C):
+pass
+
+for cls in [B, C, D]:
+try:
+raise cls()
+except D:
+print("D")
+except C:
+print("C")
+except B:
+print("B")
+
+要注意的是如果异常子句的顺序颠倒过来( `execpt B` 在最前),它就会打印 B,B,B--第一个匹配的异常被触发。
+
+打印一个异常类的错误信息时,先打印类名,然后是一个空格、一个冒号,然后是用内置函数 [str()](https://docs.python.org/3/library/stdtypes.html#str) 将类转换得到的完整字符串。
+
+## 9.9. 迭代器
+
+现在你可能注意到大多数容器对象都可以用 [for](https://docs.python.org/3/reference/compound_stmts.html#for) 遍历:
+
+for element in [1, 2, 3]:
+print(element)
+
+for element in (1, 2, 3):
+print(element)
+
+for key in {'one':1, 'two':2}:
+print(key)
+
+for char in "123":
+print(char)
+
+for line in open("myfile.txt"):
+print(line, end='')
+
+这种形式的访问清晰、简洁、方便。迭代器的用法在 Python 中普遍而且统一。在后台, [for](https://docs.python.org/3/reference/compound_stmts.html#for) 语句在容器对象中调用 [iter()](https://docs.python.org/3/library/functions.html#iter) 。该函数返回一个定义了 [**next**()](https://docs.python.org/3/library/stdtypes.html#iterator.__next__) 方法的迭代器对象,它在容器中逐一访问元素。没有后续的元素时, [**next**()](https://docs.python.org/3/library/stdtypes.html#iterator.__next__) 抛出一个 [StopIteration](https://docs.python.org/3/library/exceptions.html#StopIteration) 异常通知 [for](https://docs.python.org/3/reference/compound_stmts.html#for) 语句循环结束。你可以是用内建的 [next()](https://docs.python.org/3/library/functions.html#next) 函数调用 [**next**()](https://docs.python.org/3/library/stdtypes.html#iterator.__next__) 方法;以下是其工作原理的示例:
+
+> > s = 'abc'
+
+> > it = iter(s)
+
+> > it
+
+
+> > next(it)
+'a'
+
+> > next(it)
+'b'
+
+> > next(it)
+'c'
+
+next(it) Traceback (most recent call last): File "", line 1, in ? next(it) StopIteration 了解了迭代器协议的后台机制,就可以很容易的给自己的类添加迭代器行为。定义一个 [**iter**()](https://docs.python.org/3/reference/datamodel.html#object.__iter__) 方法,使其返回一个带有 [**next**()](https://docs.python.org/3/library/stdtypes.html#iterator.__next__) 方法的对象。如果这个类已经定义了 [**next**()](https://docs.python.org/3/library/stdtypes.html#iterator.__next__) ,那么 [**iter**()](https://docs.python.org/3/reference/datamodel.html#object.__iter__) 只需要返回 `self`: class Reverse: """Iterator for looping over a sequence backwards.""" def **init**(self, data): self.data = data self.index = len(data) def **iter**(self): return self def **next**(self): if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index]
+
+> > rev = Reverse('spam')
+
+> > iter(rev)
+<**main**.Reverse object at 0x00A1DB50>
+
+> > for char in rev:
+... print(char)
+...
+m
+a
+p
+s
+
+## 9.10. 生成器
+
+[Generator](https://docs.python.org/3/glossary.html#term-generator) 是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,需要返回数据的时候使用 [yield](https://docs.python.org/3/reference/simple_stmts.html#yield) 语句。每次 [next()](https://docs.python.org/3/library/functions.html#next) 被调用时,生成器回复它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)。以下示例演示了生成器可以很简单的创建出来:
+
+def reverse(data):
+for index in range(len(data)-1, -1, -1):
+yield data[index]
+
+> > for char in reverse('golf'):
+... print(char)
+...
+f
+l
+o
+g
+前一节中描述了基于类的迭代器,它能作的每一件事生成器也能作到。因为自动创建了 [**iter**()](https://docs.python.org/3/reference/datamodel.html#object.__iter__) 和 [**next**()](https://docs.python.org/3/reference/expressions.html#generator.__next__) 方法,生成器显得如此简洁。
+另一个关键的功能在于两次执行之间,局部变量和执行状态都自动的保存下来。这使函数很容易写,而且比使用 `self.index` 和 `self.data` 之类的方式更清晰。
+除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出 [StopIteration](https://docs.python.org/3/library/exceptions.html#StopIteration) 异常。综上所述,这些功能使得编写一个正规函数成为创建迭代器的最简单方法。
+
+## 9.11. 生成器表达式
+
+有时简单的生成器可以用简洁的方式调用,就像不带中括号的链表推导式。这些表达式是为函数调用生成器而设计的。生成器表达式比完整的生成器定义更简洁,但是没有那么多变,而且通常比等价的链表推导式更容易记。
+
+例如:
+
+> > sum(i*i for i in range(10)) # sum of squares
+285
+
+> > xvec = [10, 20, 30]
+
+> > yvec = [7, 5, 3]
+
+> > sum(x*y for x,y in zip(xvec, yvec)) # dot product
+260
+
+> > from math import pi, sin
+
+> > sine_table = {x: sin(x*pi/180) for x in range(0, 91)}
+
+> > unique_words = set(word for line in page for word in line.split())
+
+> > valedictorian = max((student.gpa, [student.name](http://student.name)) for student in graduates)
+
+> > data = 'golf'
+
+> > list(data[i] for i in range(len(data)-1, -1, -1))
+['f', 'l', 'o', 'g']
+
+
+
+
+```
+## 10. Python 标准库概览库概览
+```
+
+
+## 10.1. 操作系统接口
+
+[os](https://docs.python.org/3/library/os.html#module-os) 模块提供了很多与操作系统交互的函数:
+
+> > import os
+
+> > os.getcwd() # Return the current working directory
+'C:\Python35'
+
+> > os.chdir('/server/accesslogs') # Change current working directory
+
+> > os.system('mkdir today') # Run the command mkdir in the system shell
+0
+应该用 `import os` 风格而非 `from os import *`。这样可以保证随操作系统不同而有所变化的 [os.open()](https://docs.python.org/3/library/os.html#os.open) 不会覆盖内置函数 [open()](https://docs.python.org/3/library/functions.html#open)。
+在使用一些像 [os](https://docs.python.org/3/library/os.html#module-os) 这样的大型模块时内置的 [dir()](https://docs.python.org/3/library/functions.html#dir) 和 [help()](https://docs.python.org/3/library/functions.html#help) 函数非常有用:
+
+> > import os
+
+dir(os)
+
+> > help(os)
+
+针对日常的文件和目录管理任务,[shutil](https://docs.python.org/3/library/shutil.html#module-shutil) 模块提供了一个易于使用的高级接口:
+
+> > import shutil
+
+> > shutil.copyfile('data.db', 'archive.db')
+'archive.db'
+
+> > shutil.move('/build/executables', 'installdir')
+'installdir'
+
+## 10.2. 文件通配符
+
+[glob](https://docs.python.org/3/library/glob.html#module-glob) 模块提供了一个函数用于从目录通配符搜索中生成文件列表:
+
+> > import glob
+
+> > glob.glob('*.py')
+['[primes.py](http://primes.py)', '[random.py](http://random.py)', '[quote.py](http://quote.py)']
+
+## 10.3. 命令行参数
+
+通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 [sys](https://docs.python.org/3/library/sys.html#module-sys) 模块的 *argv* 变量。例如在命令行中执行 `python demo.py one two three` 后可以得到以下输出结果:
+
+> > import sys
+
+> > print(sys.argv)
+['[demo.py](http://demo.py)', 'one', 'two', 'three'] [getopt](https://docs.python.org/3/library/getopt.html#module-getopt) 模块使用 Unix [getopt()](https://docs.python.org/3/library/getopt.html#module-getopt) 函数处理 *sys.argv*。更多的复杂命令行处理由 [argparse](https://docs.python.org/3/library/argparse.html#module-argparse) 模块提供。
+
+## 10.4. 错误输出重定向和程序终止
+
+[sys](https://docs.python.org/3/library/sys.html#module-sys) 还有 *stdin*, *stdout* 和 *stderr* 属性,即使在 *stdout* 被重定向时,后者也可以用于显示警告和错误信息:
+
+> > sys.stderr.write('Warning, log file not found starting a new one\n')
+Warning, log file not found starting a new one
+大多脚本的直接终止都使用 `sys.exit()`。
+
+
+
+```
+## 10.5. 字符串正则匹配
+```
+
+[re](https://docs.python.org/3/library/re.html#module-re) 模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:
+
+> > import re
+
+> > re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
+['foot', 'fell', 'fastest']
+
+> > re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
+'cat in the hat'
+只需简单的操作时,字符串方法最好用,因为它们易读,又容易调试:
+
+> > 'tea for too'.replace('too', 'two')
+'tea for two'
+
+## 10.6. 数学
+
+[math](https://docs.python.org/3/library/math.html#module-math) 模块为浮点运算提供了对底层C函数库的访问:
+
+> > import math
+
+> > math.cos(math.pi / 4.0)
+0.70710678118654757
+
+> > math.log(1024, 2)
+10.0 [random](https://docs.python.org/3/library/random.html#module-random) 提供了生成随机数的工具:
+
+> > import random
+
+> > random.choice(['apple', 'pear', 'banana'])
+'apple'
+
+> > random.sample(range(100), 10) # sampling without replacement
+[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
+
+> > random.random() # random float
+0.17970987693706186
+
+> > random.randrange(6) # random integer chosen from range(6)
+4
+SciPy <[http://scipy.org](http://scipy.org/)> 项目提供了许多数值计算的模块。
+
+## 10.7. 互联网访问
+
+有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 [urllib.request](https://docs.python.org/3/library/urllib.request.html#module-urllib.request) 以及用于发送电子邮件的 [smtplib](https://docs.python.org/3/library/smtplib.html#module-smtplib):
+
+> > from urllib.request import urlopen
+
+for line in urlopen('[http://tycho.usno.navy.mil/cgi-bin/timer.pl](http://tycho.usno.navy.mil/cgi-bin/timer.pl)'): ... line = line.decode('utf-8') # Decoding the binary data to text. ... if 'EST' in line or 'EDT' in line: # look for Eastern Time ... print(line)
+
+Nov. 25, 09:43:32 PM EST
+
+> > import smtplib
+
+> > server = smtplib.SMTP('localhost')
+
+> > server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
+... """To: [jcaesar@example.org](mailto:jcaesar@example.org) ... From: [soothsayer@example.org](mailto:soothsayer@example.org) ...
+... Beware the Ides of March.
+... """)
+
+> > server.quit()
+(注意第二个例子需要在 localhost 运行一个邮件服务器。)
+
+## 10.8. 日期和时间
+
+[datetime](https://docs.python.org/3/library/datetime.html#module-datetime) 模块为日期和时间处理同时提供了简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持时区处理。
+
+> > # dates are easily constructed and formatted
+
+> > from datetime import date
+
+> > now = date.today()
+
+> > now
+datetime.date(2003, 12, 2)
+
+> > now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
+'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
+
+> > # dates support calendar arithmetic
+
+> > birthday = date(1964, 7, 31)
+
+> > age = now - birthday
+
+> > age.days
+14368
+
+
+## 10.9. 数据压缩
+
+以下模块直接支持通用的数据打包和压缩格式:[zlib](https://docs.python.org/3/library/zlib.html#module-zlib), [gzip](https://docs.python.org/3/library/gzip.html#module-gzip), [bz2](https://docs.python.org/3/library/bz2.html#module-bz2), [lzma](https://docs.python.org/3/library/lzma.html#module-lzma), [zipfile](https://docs.python.org/3/library/zipfile.html#module-zipfile) 以及 [tarfile](https://docs.python.org/3/library/tarfile.html#module-tarfile)。
+
+> > import zlib
+
+> > s = b'witch which has which witches wrist watch'
+
+> > len(s)
+41
+
+> > t = zlib.compress(s)
+
+> > len(t)
+37
+
+> > zlib.decompress(t)
+b'witch which has which witches wrist watch'
+
+> > zlib.crc32(s)
+226805979
+
+## 10.10. 性能度量
+
+有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
+
+例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多。[timeit](https://docs.python.org/3/library/timeit.html#module-timeit) 证明了后者更快一些:
+
+> > from timeit import Timer
+
+> > Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
+0.57535828626024577
+
+> > Timer('a,b = b,a', 'a=1; b=2').timeit()
+0.54962537085770791
+相对于 [timeit](https://docs.python.org/3/library/timeit.html#module-timeit) 的细粒度,[profile](https://docs.python.org/3/library/profile.html#module-profile) 和 [pstats](https://docs.python.org/3/library/profile.html#module-pstats) 模块提供了针对更大代码块的时间度量工具。
+
+## 10.11. 质量控制
+
+开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试。
+
+[doctest](https://docs.python.org/3/library/doctest.html#module-doctest) 模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。通过用户提供的例子,它发展了文档,允许 doctest 模块确认代码的结果是否与文档一致:
+
+def average(values):
+"""Computes the arithmetic mean of a list of numbers.
+
+> > print(average([20, 30, 70]))
+40.0
+"""
+return sum(values) / len(values)
+import doctest
+doctest.testmod() # automatically validate the embedded tests [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) 模块不像 [doctest](https://docs.python.org/3/library/doctest.html#module-doctest) 模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集:
+import unittest
+class TestStatisticalFunctions(unittest.TestCase):
+def test_average(self):
+self.assertEqual(average([20, 30, 70]), 40.0)
+self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
+with self.assertRaises(ZeroDivisionError):
+average([])
+with self.assertRaises(TypeError):
+average(20, 30, 70)
+unittest.main() # Calling from the command line invokes all tests
+
+## 10.12. “瑞士军刀”
+
+Python 展现了“瑞士军刀”的哲学。这可以通过它更大的包的高级和健壮的功能来得到最好的展现。列如:
+
+- [xmlrpc.client](https://docs.python.org/3/library/xmlrpc.client.html#module-xmlrpc.client) 和 [xmlrpc.server](https://docs.python.org/3/library/xmlrpc.server.html#module-xmlrpc.server) 模块让远程过程调用变得轻而易举。尽管模块有这样的名字,用户无需拥有 XML 的知识或处理 XML。
+- [email](https://docs.python.org/3/library/email.html#module-email) 包是一个管理邮件信息的库,包括MIME和其它基于 RFC2822 的信息文档。
+
+ 不同于实际发送和接收信息的 [smtplib](https://docs.python.org/3/library/smtplib.html#module-smtplib) 和 [poplib](https://docs.python.org/3/library/poplib.html#module-poplib) 模块,email 包包含一个构造或解析复杂消息结构(包括附件)及实现互联网编码和头协议的完整工具集。
+
+- [xml.dom](https://docs.python.org/3/library/xml.dom.html#module-xml.dom) 和 [xml.sax](https://docs.python.org/3/library/xml.sax.html#module-xml.sax) 包为流行的信息交换格式提供了强大的支持。同样, [csv](https://docs.python.org/3/library/csv.html#module-csv) 模块支持在通用数据库格式中直接读写。
+
+ 综合起来,这些模块和包大大简化了 Python 应用程序和其它工具之间的数据交换。
+
+- 国际化由 [gettext](https://docs.python.org/3/library/gettext.html#module-gettext), [locale](https://docs.python.org/3/library/locale.html#module-locale) 和 [codecs](https://docs.python.org/3/library/codecs.html#module-codecs) 包支持。
+
+
+
+
+
+
+```
+## 14.Tkinter用户图形界面库::\*\*
+```
+
+
+下面基于 Python 的 GUI 图形界面开发库 Tkinter 优化上述脚本,实现友好的可视化 WIFI 暴力破解界面工具。
+
+关于 Tkinter 库的语法可参见:[https://www.runoob.com/python/python-gui-tkinter.html](https://www.runoob.com/python/python-gui-tkinter.html)
+
+[www.runoob.com](https://www.runoob.com/python/python-gui-tkinter.html)
+
+
+
+正在搜索: `类似 Tk 的用户图形界面(GUI)工具包接口`
+
+正在搜索: `类似 Tk 的用户图形界面(GUI)工具包接口`
+
+正在为你生成答案…
+
+正在为你生成答案…
+
+您好,这是Bing。😊
+
+根据搜索结果,类似 Tk 的用户图形界面(GUI)工具包接口有以下几种:
+
+- [**Tkinter**:Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口1](https://blog.csdn.net/tscaxx/article/details/104117849)[2](https://blog.csdn.net/qq_40186237/article/details/129292203)[3](https://zhuanlan.zhihu.com/p/390501243)[。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具1](https://blog.csdn.net/tscaxx/article/details/104117849)[3。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统3](https://zhuanlan.zhihu.com/p/390501243)。
+- [**PyQt5**:PyQt5是Qt5框架的Python绑定,提供了一套完整的GUI开发工具,包括窗口、控件、布局、事件、信号槽等4。PyQt5也是完全跨平台的,支持Windows、Linux、Mac OS X等操作系统4](https://cloud.tencent.com/developer/article/1843493)。
+- [**其他**:除了上述两种,还有一些其他的Python GUI框架,如wxPython、Kivy、PySide2等4](https://cloud.tencent.com/developer/article/1843493)[5](https://blog.csdn.net/xyzhan/article/details/113856833)。它们各有特点和优缺点,您可以根据自己的需求和喜好选择合适的框架。
+
+您想了解更多哪种框架呢?
+
+已收到消息. 您好,这是Bing。😊 根据搜索结果,类似 Tk 的用户图形界面(GUI)工具包接口有以下几种: - Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口 。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具 。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。 **Tkinter**- **PyQt5**:PyQt5是Qt5框架的Python绑定,提供了一套完整的GUI开发工具,包括窗口、控件、布局、事件、信号槽等。PyQt5也是完全跨平台的,支持Windows、Linux、Mac OS X等操作系统。 - **其他**:除了上述两种,还有一些其他的Python GUI框架,如wxPython、Kivy、PySide2等 。它们各有特点和优缺点,您可以根据自己的需求和喜好选择合适的框架。 您想了解更多哪种框架呢?
+
+了解详细信息:
+
+[1. blog.csdn.net](https://blog.csdn.net/tscaxx/article/details/104117849)[2. blog.csdn.net](https://blog.csdn.net/qq_40186237/article/details/129292203)[3. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/390501243)[4. cloud.tencent.com](https://cloud.tencent.com/developer/article/1843493)[5. blog.csdn.net](https://blog.csdn.net/xyzhan/article/details/113856833)+2 更多
+
+1共8
+
+python 类似 Tk 的用户图形界面(GUI)工具包接口,指的是什么工具包?
+
+已发送电子邮件. python 类似 Tk 的用户图形界面(GUI)工具包接口,指的是什么工具包?
+
+正在搜索: `python 类似 Tk 的用户图形界面(GUI)工具包接口`
+
+正在搜索: `python 类似 Tk 的用户图形界面(GUI)工具包接口`
+
+正在为你生成答案…
+
+正在为你生成答案…
+
+您好,这是Bing。😊
+
+[根据搜索结果,python 类似 Tk 的用户图形界面(GUI)工具包接口,指的是**Tkinter**1](https://blog.csdn.net/tscaxx/article/details/104117849)[2](https://blog.csdn.net/HJZ11/article/details/106311243)[3](https://blog.csdn.net/haoxun11/article/details/104868290)[。Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口1](https://blog.csdn.net/tscaxx/article/details/104117849)[2](https://blog.csdn.net/HJZ11/article/details/106311243)[3](https://blog.csdn.net/haoxun11/article/details/104868290)[。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具1](https://blog.csdn.net/tscaxx/article/details/104117849)[3。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统3](https://blog.csdn.net/haoxun11/article/details/104868290)。
+
+您想了解更多关于 Tkinter 的信息吗?
+
+已收到消息. 您好,这是Bing。😊 根据搜索结果,python 类似 Tk 的用户图形界面(GUI)工具包接口,指的是**Tkinter** 。Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口 。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具 。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。 您想了解更多关于 Tkinter 的信息吗?
+
+了解详细信息:
+
+[1. blog.csdn.net](https://blog.csdn.net/tscaxx/article/details/104117849)[2. blog.csdn.net](https://blog.csdn.net/HJZ11/article/details/106311243)[3. blog.csdn.net](https://blog.csdn.net/haoxun11/article/details/104868290)[4. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/390501243)[5. blog.csdn.net](https://blog.csdn.net/xyzhan/article/details/113856833)[6. cloud.tencent.com](https://cloud.tencent.com/developer/article/1843493)+3 更多
+
+2共8
+
+请给我一些 Tkinter 的代码示例。
+
+已发送电子邮件. 请给我一些 Tkinter 的代码示例。
+
+正在搜索: `Tkinter 代码示例`
+
+正在搜索: `Tkinter 代码示例`
+
+正在为你生成答案…
+
+正在为你生成答案…
+
+好的,我找到了一些 Tkinter 的代码示例,您可以参考一下。😊
+
+- [一个简单的窗口1](https://www.cnblogs.com/kaituorensheng/p/3287652.html)[2](https://zhuanlan.zhihu.com/p/491126005)[3](https://www.runoob.com/python/python-gui-tkinter.html):
+
+\`\`\`python
+from tkinter import *
+# 创建窗口:实例化一个窗口对象。
+root = Tk()
+# 窗口大小
+root.geometry("600x450+374+182")
+# 显示窗口
+root.mainloop()
+
+```
+- [一个带有标签的窗口](https://blog.csdn.net/sinat_36184075/article/details/86662104) [4](https://bing.com/search?q=Tkinter+代码示例) [5](https://blog.csdn.net/sinat_36184075/article/details/86662104):
+
+```
+from tkinter import *
+root = Tk()
+root.title("hello world")
+root.geometry('300x200')
+l = Label(root, text="show", bg="green", font=("Arial", 12), width=5, height=2)
+l.pack(side=LEFT) #这里的side可以赋值为LEFT RTGHT TOP BOTTOM
+root.mainloop()
+
+```
+- [一个带有按钮和消息框的窗口1](https://www.cnblogs.com/kaituorensheng/p/3287652.html):
+
+```
+from tkinter import *
+from tkinter import messagebox
+def hello():
+ messagebox.showinfo("Hello", "Hello World!")
+root = Tk()
+b = Button(root, text="Hello", command=hello)
+b.pack()
+root.mainloop()
+
+
+
+您还有其他问题吗?
+
+已收到消息. 好的,我找到了一些 Tkinter 的代码示例,您可以参考一下。😊 - 一个简单的窗口 : `python from tkinter import * # 创建窗口:实例化一个窗口对象。 root = Tk() # 窗口大小 root.geometry("600x450+374+182") # 显示窗口 root.mainloop()` - 一个带有标签的窗口 : `python from tkinter import * root = Tk() root.title("hello world") root.geometry('300x200') l = Label(root, text="show", bg="green", font=("Arial", 12), width=5, height=2) l.pack(side=LEFT) #这里的side可以赋值为LEFT RTGHT TOP BOTTOM root.mainloop()` - 一个带有按钮和消息框的窗口: `python from tkinter import * from tkinter import messagebox def hello(): messagebox.showinfo("Hello", "Hello World!") root = Tk() b = Button(root, text="Hello", command=hello) b.pack() root.mainloop()` 您还有其他问题吗?
+
+了解详细信息:
+
+[1. cnblogs.com](https://www.cnblogs.com/kaituorensheng/p/3287652.html)[2. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/491126005)[3. runoob.com](https://www.runoob.com/python/python-gui-tkinter.html)[4. bing.com](https://bing.com/search?q=Tkinter+%e4%bb%a3%e7%a0%81%e7%a4%ba%e4%be%8b)[5. blog.csdn.net](https://blog.csdn.net/sinat_36184075/article/details/86662104)[6. cloud.tencent.com](https://cloud.tencent.com/developer/article/1666431)+2 更多
+
+3共8
+
+请问如何在 Tkinter 中创建菜单栏?
+
+已发送电子邮件. 请问如何在 Tkinter 中创建菜单栏?
+
+正在搜索: `Tkinter 创建菜单栏`
+
+正在搜索: `Tkinter 创建菜单栏`
+
+正在为你生成答案…
+
+正在为你生成答案…
+
+在 Tkinter 中创建菜单栏的基本步骤如下:
+
+- 创建一个菜单实例,例如 `menubar = tk.Menu (window)`[12](https://blog.csdn.net/qq_41149269/article/details/81947086)``[3](https://blog.csdn.net/qq_41556318/article/details/85273584)``[4](https://cloud.tencent.com/developer/article/1637726)
+- [创建一个或多个子菜单实例,例如 `filemenu = tk.Menu (menubar, tearoff=0)`1](https://blog.csdn.net/qq_41149269/article/details/81947086)[4](https://cloud.tencent.com/developer/article/1637726)
+- [使用 `add_cascade` 方法将子菜单添加到主菜单中,例如 `menubar.add_cascade (label='文件', menu=filemenu)`1](https://blog.csdn.net/qq_41149269/article/details/81947086)[4](https://cloud.tencent.com/developer/article/1637726)
+- [使用 `add_command` 方法将命令添加到子菜单中,例如 `filemenu.add_command (label='新建', command=do_job)`1](https://blog.csdn.net/qq_41149269/article/details/81947086)[4](https://cloud.tencent.com/developer/article/1637726)
+- [使用 `config` 方法将主菜单设置为窗口的菜单,例如 `window.config (menu=menubar)`12](https://blog.csdn.net/qq_41149269/article/details/81947086)
+
+[以下是一个完整的代码示例1](https://blog.csdn.net/qq_41149269/article/details/81947086):
+
+\`\`\`python
+import tkinter as tk
+window = tk.Tk()
+window.title('菜单栏')
+window.geometry('300x200')
+l = tk.Label(window, bg='green', width=25, height=2, text='empty')
+l.pack()
+counter = 0
+def do_job():
+ global counter
+ l.config(text='do'+str(counter))
+ counter += 1
+menubar = tk.Menu(window)
+filemenu = tk.Menu(menubar, tearoff=0)
+menubar.add_cascade(label='文件', menu=filemenu)
+filemenu.add_command(label='新建', command=do_job)
+filemenu.add_command(label='打开', command=do_job)
+filemenu.add_command(label='保存', command=do_job)
+filemenu.add_separator()
+filemenu.add_command(label='退出', command=window.quit)
+editmenu = tk.Menu(menubar, tearoff=0)
+menubar.add_cascade(label='编辑', menu=editmenu)
+editmenu.add_command(label='剪切', command=do_job)
+editmenu.add_command(label='复制', command=do_job)
+editmenu.add_command(label='粘贴', command=do_job)
+
+submenu = tk.Menu(filemenu)
+filemenu.add_cascade(label='导入', menu=submenu, underline=0)
+submenu.add_command(label="Subcommand_1", command=do_job)
+
+window.config(menu=menubar)
+
+window.mainloop()
+
+```
+您还有其他问题吗?
+已收到消息. 在 Tkinter 中创建菜单栏的基本步骤如下: - 创建一个菜单实例,例如 `menubar = tk.Menu (window)` - 创建一个或多个子菜单实例,例如 `filemenu = tk.Menu (menubar, tearoff=0)` - 使用 `add\_cascade` 方法将子菜单添加到主菜单中,例如 `menubar.add\_cascade (label='文件', menu=filemenu)` - 使用 `add\_command` 方法将命令添加到子菜单中,例如 `filemenu.add\_command (label='新建', command=do\_job)` - 使用 `config` 方法将主菜单设置为窗口的菜单,例如 `window.config (menu=menubar)` 以下是一个完整的代码示例: `python import tkinter as tk window = tk.Tk() window.title('菜单栏') window.geometry('300x200') l = tk.Label(window, bg='green', width=25, height=2, text='empty') l.pack() counter = 0 def do\_job(): global counter l.config(text='do'+str(counter)) counter += 1 menubar = tk.Menu(window) filemenu = tk.Menu(menubar, tearoff=0) menubar.add\_cascade(label='文件', menu=filemenu) filemenu.add\_command(label='新建', command=do\_job) filemenu.add\_command(label='打开', command=do\_job) filemenu.add\_command(label='保存', command=do\_job) filemenu.add\_separator() filemenu.add\_command(label='退出', command=window.quit) editmenu = tk.Menu(menubar, tearoff=0) menubar.add\_cascade(label='编辑', menu=editmenu) editmenu.add\_command(label='剪切', command=do\_job) editmenu.add\_command(label='复制', command=do\_job) editmenu.add\_command(label='粘贴', command=do\_job) submenu = tk.Menu(filemenu) filemenu.add\_cascade(label='导入', menu=submenu, underline=0) submenu.add\_command(label="Subcommand\_1", command=do\_job) window.config(menu=menubar) window.mainloop()` 您还有其他问题吗?
+了解详细信息:
+[1. blog.csdn.net2. blog.csdn.net](https://blog.csdn.net/qq_41149269/article/details/81947086) [3. blog.csdn.net](https://blog.csdn.net/qq_41556318/article/details/85273584) [4. cloud.tencent.com](https://cloud.tencent.com/developer/article/1637726) [5. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/334461321)+1 更多
+4共8
+python Tkinter 库需要安装吗?
+已发送电子邮件. python Tkinter 库需要安装吗?
+正在搜索: `python Tkinter 库需要安装吗`
+正在搜索: `python Tkinter 库需要安装吗`
+正在为你生成答案…
+正在为你生成答案…
+根据搜索结果[12](https://jingyan.baidu.com/article/1974b289d1fd07b4b0f77420.html) [3](https://blog.csdn.net/qq_24726509/article/details/84312468) [,Tkinter 是 Python 自带的 GUI 库,并不需要安装即可直接使用。只要导入 Tkinter 模块,就可以使用它的组件和方法进行 GUI 编程4](https://blog.csdn.net/qq_41185868/article/details/126893475)。
+您还有其他问题吗?
+已收到消息. 根据搜索结果 ,Tkinter 是 Python 自带的 GUI 库,并不需要安装即可直接使用。只要导入 Tkinter 模块,就可以使用它的组件和方法进行 GUI 编程。 您还有其他问题吗?
+了解详细信息:
+[1. jingyan.baidu.com2. jingyan.baidu.com](https://jingyan.baidu.com/article/1974b289d1fd07b4b0f77420.html) [3. blog.csdn.net](https://blog.csdn.net/qq_24726509/article/details/84312468) [4. blog.csdn.net](https://blog.csdn.net/qq_41185868/article/details/126893475) [5. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/92017216)+2 更多
+5共8
+请问如何在 Tkinter 中创建按钮?
+已发送电子邮件. 请问如何在 Tkinter 中创建按钮?
+正在搜索: `Tkinter 创建按钮`
+正在搜索: `Tkinter 创建按钮`
+正在为你生成答案…
+正在为你生成答案…
+在 Tkinter 中创建按钮的基本步骤如下:
+- 导入 Tkinter 模块,例如 [`import tkinter as tk`1](https://blog.csdn.net/wosind/article/details/100071232) [2](https://www.delftstack.com/zh/howto/python-tkinter/how-to-create-a-new-window-with-a-button-in-tkinter/) [3](https://blog.csdn.net/u011541946/article/details/71354276)
+- 创建一个窗口实例,例如 [`window = tk.Tk()`1](https://blog.csdn.net/wosind/article/details/100071232) [2](https://www.delftstack.com/zh/howto/python-tkinter/how-to-create-a-new-window-with-a-button-in-tkinter/) [3](https://blog.csdn.net/u011541946/article/details/71354276)
+- 创建一个按钮实例,使用 `tk.Button` 类,并设置按钮的文本、背景色、前景色等属性,例如 `[button = tk.Button (window, bg ="#ff0000", fg ="#ffffff", text ="按钮")](https://blog.csdn.net/u011541946/article/details/71354276)` [4](https://bing.com/search?q=Tkinter+创建按钮) [3](https://blog.csdn.net/u011541946/article/details/71354276)
+- 使用 `pack` 或 `grid` 方法将按钮添加到窗口中,例如 `button.pack()` 或 [`button.grid(row=0, column=0)`1](https://blog.csdn.net/wosind/article/details/100071232) [3](https://blog.csdn.net/u011541946/article/details/71354276)
+- 使用 `mainloop` 方法启动窗口的主循环,例如 [`window.mainloop()`1](https://blog.csdn.net/wosind/article/details/100071232) [2](https://www.delftstack.com/zh/howto/python-tkinter/how-to-create-a-new-window-with-a-button-in-tkinter/) [3](https://blog.csdn.net/u011541946/article/details/71354276)
+
+以下是一个完整的代码示例[3](https://blog.csdn.net/u011541946/article/details/71354276):
+```
+import tkinter as tk
+window = tk.Tk()
+window.title('按钮')
+window.geometry('300x200')
+# 创建按钮,并设置按钮的背景色和前景色
+button = tk.Button (window, bg ="#ff0000", fg ="#ffffff", text ="按钮")
+button.pack()
+window.mainloop()
+
+```
+您还有其他问题吗?
+已收到消息. 在 Tkinter 中创建按钮的基本步骤如下: - 导入 Tkinter 模块,例如 `import tkinter as tk` - 创建一个窗口实例,例如 `window = tk.Tk()` - 创建一个按钮实例,使用 `tk.Button` 类,并设置按钮的文本、背景色、前景色等属性,例如 `button = tk.Button (window, bg ="#ff0000", fg ="#ffffff", text ="按钮")` - 使用 `pack` 或 `grid` 方法将按钮添加到窗口中,例如 `button.pack()` 或 `button.grid(row=0, column=0)` - 使用 `mainloop` 方法启动窗口的主循环,例如 `window.mainloop()` 以下是一个完整的代码示例: `python import tkinter as tk window = tk.Tk() window.title('按钮') window.geometry('300x200') # 创建按钮,并设置按钮的背景色和前景色 button = tk.Button (window, bg ="#ff0000", fg ="#ffffff", text ="按钮") button.pack() window.mainloop()` 您还有其他问题吗?
+了解详细信息:
+[1. blog.csdn.net](https://blog.csdn.net/wosind/article/details/100071232) [2. delftstack.com](https://www.delftstack.com/zh/howto/python-tkinter/how-to-create-a-new-window-with-a-button-in-tkinter/) [3. blog.csdn.net](https://blog.csdn.net/u011541946/article/details/71354276) [4. bing.com](https://bing.com/search?q=Tkinter+创建按钮) [5. runoob.com](https://www.runoob.com/python/python-tk-button.html)+1 更多
+6共8
+请问如何在 Tkinter 中添加事件处理函数?
+已发送电子邮件. 请问如何在 Tkinter 中添加事件处理函数?
+正在搜索: `Tkinter 添加事件处理函数`
+正在搜索: `Tkinter 添加事件处理函数`
+正在为你生成答案…
+正在为你生成答案…
+在 Tkinter 中添加事件处理函数的基本步骤如下:
+- 定义一个事件处理函数,例如 `def handler(): print("handler")`[1](https://bing.com/search?q=Tkinter+添加事件处理函数)\`\`[2](https://www.cnblogs.com/liyuanhong/articles/10718217.html)
+- 创建一个按钮实例,并使用 `command` 参数指定事件处理函数,例如 `button = tk.Button (window, text="按钮", command=handler)`[1](https://bing.com/search?q=Tkinter+添加事件处理函数)\`\`[2](https://www.cnblogs.com/liyuanhong/articles/10718217.html)
+- 或者使用 `bind` 方法将事件和事件处理函数绑定,例如 `button.bind("", handler)`[2](https://www.cnblogs.com/liyuanhong/articles/10718217.html)\`\`[3](http://m.biancheng.net/tkinter/event.html)
+- 如果需要传递参数给事件处理函数,可以使用 `lambda` 表达式或者中介函数[1](https://bing.com/search?q=Tkinter+添加事件处理函数) [3](http://m.biancheng.net/tkinter/event.html)
+
+以下是一个完整的代码示例[1](https://bing.com/search?q=Tkinter+添加事件处理函数):
+```
+import tkinter as tk
+def handler():
+ print("handler")
+def handlerAdaptor(fun, **kwds):
+ return lambda event,fun=fun,kwds=kwds: fun(event,**kwds)
+def handlerWithParam(event,name):
+ print(name)
+root = tk.Tk()
+# 通过command参数设置事件处理函数
+btn = tk.Button (text="按钮", command=handler)
+btn.pack()
+# 通过bind方法绑定事件和事件处理函数
+btn.bind("", handlerAdaptor(handlerWithParam,name="right"))
+root.mainloop()
+
+```
+您还有其他问题吗?
+已收到消息. 在 Tkinter 中添加事件处理函数的基本步骤如下: - 定义一个事件处理函数,例如 `def handler(): print("handler")` - 创建一个按钮实例,并使用 `command` 参数指定事件处理函数,例如 `button = tk.Button (window, text="按钮", command=handler)` - 或者使用 `bind` 方法将事件和事件处理函数绑定,例如 `button.bind("", handler)` - 如果需要传递参数给事件处理函数,可以使用 `lambda` 表达式或者中介函数 以下是一个完整的代码示例: `python import tkinter as tk def handler(): print("handler") def handlerAdaptor(fun, \*\*kwds): return lambda event,fun=fun,kwds=kwds: fun(event,\*\*kwds) def handlerWithParam(event,name): print(name) root = tk.Tk() # 通过command参数设置事件处理函数 btn = tk.Button (text="按钮", command=handler) btn.pack() # 通过bind方法绑定事件和事件处理函数 btn.bind("", handlerAdaptor(handlerWithParam,name="right")) root.mainloop()` 您还有其他问题吗?
+了解详细信息:
+[1. bing.com](https://bing.com/search?q=Tkinter+添加事件处理函数) [2. cnblogs.com](https://www.cnblogs.com/liyuanhong/articles/10718217.html) [3. biancheng.net](http://m.biancheng.net/tkinter/event.html) [4. blog.csdn.net](https://blog.csdn.net/xiaozhimonica/article/details/87873048) [5. blog.csdn.net](https://blog.csdn.net/jss19940414/article/details/84728830)+1 更多
+7共8
+请问如何在 Tkinter 中创建菜单栏?
+已发送电子邮件. 请问如何在 Tkinter 中创建菜单栏?
+正在搜索: `Tkinter 创建菜单栏`
+正在搜索: `Tkinter 创建菜单栏`
+正在为你生成答案…
+正在为你生成答案…
+在 Tkinter 中创建菜单栏的基本步骤如下:
+- 创建一个菜单实例,例如 `menubar = tk.Menu (window)`[1](https://blog.csdn.net/qq_41149269/article/details/81947086)\`\`[2](https://cloud.tencent.com/developer/article/1637726)
+- 创建一个或多个子菜单实例,并使用 `tearoff` 参数设置是否可以分离,例如 `filemenu = tk.Menu (menubar, tearoff=0)`[31](https://blog.csdn.net/qq_41149269/article/details/81947086)\`\`[2](https://cloud.tencent.com/developer/article/1637726)
+- 使用 `add\_cascade` 方法将子菜单添加到主菜单中,并设置标签,例如 [`menubar.add\_cascade (label='文件', menu=filemenu)`31](https://blog.csdn.net/qq_41149269/article/details/81947086) [2](https://cloud.tencent.com/developer/article/1637726)
+- 使用 `add\_command` 方法为子菜单添加命令项,并设置标签和回调函数,例如 `filemenu.add\_command (label='新建', command=do\_job)`[31](https://blog.csdn.net/qq_41149269/article/details/81947086)
+- 使用 `config` 方法将主菜单配置为窗口的菜单,例如 `window.config (menu=menubar)`[31](https://blog.csdn.net/qq_41149269/article/details/81947086)
+
+以下是一个完整的代码示例[3](https://blog.csdn.net/qq_41149269/article/details/81947086):
+```
+import tkinter as tk
+def do_job():
+ print("do job")
+window = tk.Tk()
+window.title('菜单栏')
+window.geometry('300x200')
+# 创建一个主菜单
+menubar = tk.Menu(window)
+# 创建一个子菜单
+filemenu = tk.Menu(menubar, tearoff=0)
+# 将子菜单添加到主菜单中
+menubar.add_cascade(label='文件', menu=filemenu)
+# 为子菜单添加命令项
+filemenu.add_command(label='新建', command=do_job)
+filemenu.add_command(label='打开', command=do_job)
+filemenu.add_command(label='保存', command=do_job)
+filemenu.add_separator()
+filemenu.add_command(label='退出', command=window.quit)
+# 将主菜单配置为窗口的菜单
+window.config(menu=menubar)
+window.mainloop()
+
+```
+15 Kivy
+正在为你生成答案…
+正在为你生成答案…
+[Kivy 是一个开源的,跨平台的 Python 开发框架,用于开发使用创新的应用程序。它可以运行于各大桌面及移动平台上(包括 Linux, Windows,OS X, Android, iOS, 以及 Raspberry Pi)1](https://blog.csdn.net/cnds123/article/details/107321712) [。这里有一些关于 Kivy 基础的博客文章:一般市民Young的博客2](https://blog.csdn.net/Young824/article/details/109576930)、[软件开发技术爱好者的博客1](https://blog.csdn.net/cnds123/article/details/107321712)、[Yummyik 的博客3](https://blog.csdn.net/weixin_44015669/article/details/115658064)。
+已收到消息. Kivy 是一个开源的,跨平台的 Python 开发框架,用于开发使用创新的应用程序。它可以运行于各大桌面及移动平台上(包括 Linux, Windows,OS X, Android, iOS, 以及 Raspberry Pi)。这里有一些关于 Kivy 基础的博客文章:[一般市民Young的博客](https://blog.csdn.net/Young824/article/details/109576930)、[软件开发技术爱好者的博客](https://blog.csdn.net/cnds123/article/details/107321712)、[Yummyik 的博客](https://blog.csdn.net/weixin_44015669/article/details/115658064)。
+了解详细信息:
+[1. blog.csdn.net](https://blog.csdn.net/cnds123/article/details/107321712) [2. blog.csdn.net](https://blog.csdn.net/Young824/article/details/109576930) [3. blog.csdn.net](https://blog.csdn.net/weixin_44015669/article/details/115658064) [4. blog.csdn.net](https://blog.csdn.net/Young824/article/details/109576930) [5. blog.csdn.net](https://blog.csdn.net/cnds123/article/details/107321712) [6. blog.csdn.net](https://blog.csdn.net/weixin_44015669/article/details/115658064)+2 更多
+1共8
+Kivy 与其他 Python GUI 框架有什么区别?
+已发送电子邮件. Kivy 与其他 Python GUI 框架有什么区别?
+正在搜索: `Kivy 与其他 Python GUI 框架区别`
+正在搜索: `Kivy 与其他 Python GUI 框架区别`
+正在为你生成答案…
+正在为你生成答案…
+[Kivy 与其他 Python GUI 框架的一个区别在于 Kivy 的 UI 设计和代码逻辑是分开的。这意味着你可以使用一种 UI 语言来设计界面1。不过,我没有找到更多关于 Kivy 与其他 Python GUI 框架区别的信息。你可以查看这些文章了解更多关于 Kivy 的信息:知乎文章11](https://zhuanlan.zhihu.com/p/48532144)、[掘金文章2](https://juejin.cn/post/7068480463806939166) [、知乎文章23](https://www.zhihu.com/question/23989805)。
+已收到消息. Kivy 与其他 Python GUI 框架的一个区别在于 Kivy 的 UI 设计和代码逻辑是分开的。这意味着你可以使用一种 UI 语言来设计界面。不过,我没有找到更多关于 Kivy 与其他 Python GUI 框架区别的信息。你可以查看这些文章了解更多关于 Kivy 的信息:[知乎文章1](https://zhuanlan.zhihu.com/p/48532144)、[掘金文章](https://juejin.cn/post/7068480463806939166)、[知乎文章2](https://www.zhihu.com/question/23989805)。
+了解详细信息:
+[1. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/48532144) [2. juejin.cn](https://juejin.cn/post/7068480463806939166) [3. zhihu.com](https://www.zhihu.com/question/23989805) [4. zhihu.com](https://www.zhihu.com/question/457095851)
+2共8
+Kivy 的优点是什么?
+已发送电子邮件. Kivy 的优点是什么?
+正在搜索: `Kivy 优点`
+正在搜索: `Kivy 优点`
+正在为你生成答案…
+正在为你生成答案…
+[Kivy 是一个优秀的,基于 Python 的 GUI 库。它可以利用 Python 快速编程的特点,快速地编写 Windows,Linux,Mac,Android 和 iOS 等主流平台的应用程序1](https://blog.csdn.net/qq_41185868/article/details/80515375) [2](https://blog.csdn.net/hpwzjz/article/details/89703313) [。与 wxPython 和 PyQt 相比,它最大的优点是可以快速地编写移动应用程序1](https://blog.csdn.net/qq_41185868/article/details/80515375) [。此外,Kivy 还支持多点触控事件和 GPU 加速图形(因为它们是用 OpenGL ES2 构建的)3](https://blog.csdn.net/Young824/article/details/109576930)。
+已收到消息. Kivy 是一个优秀的,基于 Python 的 GUI 库。它可以利用 Python 快速编程的特点,快速地编写 Windows,Linux,Mac,Android 和 iOS 等主流平台的应用程序 。与 wxPython 和 PyQt 相比,它最大的优点是可以快速地编写移动应用程序。此外,Kivy 还支持多点触控事件和 GPU 加速图形(因为它们是用 OpenGL ES2 构建的)。
+了解详细信息:
+[1. blog.csdn.net](https://blog.csdn.net/qq_41185868/article/details/80515375) [2. blog.csdn.net](https://blog.csdn.net/hpwzjz/article/details/89703313) [3. blog.csdn.net](https://blog.csdn.net/Young824/article/details/109576930) [4. zhihu.com](https://www.zhihu.com/topic/20008797/hot) [5. juejin.cn](https://juejin.cn/post/7068480463806939166)
+3共8
+正在搜索: `Kivy 安装方法`
+[在 Windows 上安装 Kivy,你需要先确保你的电脑上已经安装了 Python 3.6 或更高版本,并且已经设置好了 pip 国内源(国内镜像)1。然后,按下 Windows 徽标 + R 键,输入 cmd 并按回车键启动 Windows 命令行窗口。在命令行窗口中,使用 pip 安装 Kivy 依赖1](https://zhuanlan.zhihu.com/p/30808918)。
+[你可以参考这些文章了解更多关于 Kivy 安装方法的信息:知乎文章11](https://zhuanlan.zhihu.com/p/30808918)、[知乎文章22](https://zhuanlan.zhihu.com/p/148913469)、[CSDN博客文章3](https://blog.csdn.net/m0_55538985/article/details/114238800)。
+已收到消息. 在 Windows 上安装 Kivy,你需要先确保你的电脑上已经安装了 Python 3.6 或更高版本,并且已经设置好了 pip 国内源(国内镜像)。然后,按下 Windows 徽标 + R 键,输入 cmd 并按回车键启动 Windows 命令行窗口。在命令行窗口中,使用 pip 安装 Kivy 依赖。 你可以参考这些文章了解更多关于 Kivy 安装方法的信息:[知乎文章1](https://zhuanlan.zhihu.com/p/30808918)、[知乎文章2](https://zhuanlan.zhihu.com/p/148913469)、[CSDN博客文章](https://blog.csdn.net/m0_55538985/article/details/114238800)。
+了解详细信息:
+[1. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/30808918) [2. zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/148913469) [3. blog.csdn.net](https://blog.csdn.net/m0_55538985/article/details/114238800) [4. bing.com](https://bing.com/search?q=Kivy+安装方法)
+4共8
+[Python用法查询笔记.html](http://python%E4%BB%A3%E7%A0%81%E7%9F%A5%E8%AF%86%E5%8F%8A%E7%BB%83%E4%B9%A0.assets/Python%E7%94%A8%E6%B3%95%E6%9F%A5%E8%AF%A2%E7%AC%94%E8%AE%B0.html)
diff --git a/Anytype.20240802.082116.32/pylen.md b/Anytype.20240802.082116.32/pylen.md
new file mode 100644
index 0000000..0b11236
--- /dev/null
+++ b/Anytype.20240802.082116.32/pylen.md
@@ -0,0 +1,1941 @@
+# Pylen
+```
+
+##文件名:python练习
+##姓 名:Ryan6981
+##日 期:2020.12.17
+
+```
+## 1-15基础练习
+```
+
+
+# 练习1:print输出
+print('hello Word!')
+
+# 练习2:
+name='SGFang10000'
+print(name)
+
+# 练习3:
+name='王添发'
+age=42
+print("我叫%s,今你年%d岁了"%(name,age))
+
+# 练习4:
+for name in ['Bart', 'Lisa', 'Adam']:
+ print('Hello,',name)
+
+# 练习5:1000元以下商品打9.5折,1000-5000元之间的商品打9折,其他情况打8.5折。请编写程序代码:实现对任意输入一件商品售价,能够输出其优惠价格与最终价格。
+
+amount = int(input("请输入金额: "))
+if amount < 1000:
+ discount = amount*0.05
+ print ("折扣",discount)
+elif amount < 5000:
+ discount = amount*0.10
+ print ("折扣",discount)
+else:
+ discount = amount*0.15
+ print ("折扣",discount)
+print ("优惠金额:",amount-discount)
+
+
+
+
+# 练习6:
+x='Hello'
+y='Chanel'
+# Line feed output
+print(x)
+print(y)
+#Print a dividing line
+print('-'*20)
+#Do not wrap output
+print(x,end=" ")
+print(y,end=" ")
+print(x+y,end=" ")
+
+
+# 练习7:
+name ='Zhang'
+position ='讲师'
+address ='北京市'
+print("---------------------------------------------")
+print("姓名: %s" % name)
+print("职位: %s" % position)
+print("公司地址: %s" % address)
+print("-------------------------------------------")
+
+
+# 练习8:计算体重bmi值
+height = float(input("请输入您的身高(单位为米):"))
+print("您的身高:",height)
+weight = float(input("请输入您的体重(单位千克):"))
+print("您的体重:", weight)
+bmi = weight / (height * height) # bim值=身高/体重的平方
+print("您的BMI指数:",bmi)
+if bmi>=32:
+ print("严重肥胖")
+elif bmi>=28:
+ print("肥胖")
+elif bmi>=25:
+ print("过重")
+elif bmi>=18.5:
+ print("正常")
+else:
+ print("过轻")
+
+
+
+# 练习9:小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位,请用代码实现
+last_score = 72
+newscore = 85
+point = (newscore - last_score) * 100.0 / 72
+print(point)
+print('提升百分点:%.1f%%' % point)
+
+
+
+# 练习10:if嵌套语句练习
+historyscore=90
+if historyscore>=60:
+ print('你已经及格')
+ if historyscore>=80:
+ print('你很优秀')
+ else:
+ print('你只是一般般')
+else:
+ print('不及格')
+ #增加额外条件if...
+ if historyscore<30:
+ print('学渣')
+ else:
+ print('还能抢救一下')
+
+
+
+#练习11:iinput()函数结果的强制转换的用法:
+age = int(input('猜一猜巫师的『法定成年年龄』是几岁,请输入:'))
+#将输入的岁数(字符串),强制转换为整数
+
+if age > 17:
+#当年龄(整数)大于17(整数)时
+ print('哈哈,居然比这个年龄还要小呢!')
+#打印if条件下的结果
+
+elif age == 17:
+#当年龄(整数)等于17(整数)时
+ print('正确!我猜你是个巫师啦~')
+#打印if条件下的结果
+
+else:
+#当年龄(整数)小于17(整数)时
+ print('呜呜,这个年龄~我还是个宝宝呢,正确答案是17岁哦')
+#打印else条件下的结果
+
+
+
+#练习12:input()函数结果的强制转换的用法实例二:
+money = int(input('你一个月工资多少钱?'))
+#将输入的工资数(字符串),强制转换为整数
+
+if money >= 10000:
+#当工资数(整数)大于等于10000(整数)时
+ print('土豪我们做朋友吧!')
+#打印if条件下的结果
+
+else:
+#当工资数(整数)小于10000(整数)时
+ print('我负责赚钱养家,你负责貌美如花~')
+#打印else条件下
+
+
+
+
+#练习13:if嵌套循环语句:
+money=3000
+if money<=500:
+ print('欢迎进入史塔克穷人帮前三名')
+ if money<=100:
+ print('恭喜您荣获“美元队长”称号!')
+ else:
+ print('请找弗瑞队长加薪')
+elif 5002000:
+ print('您是不是来自于瓦坎达国')
+print('程序结束')
+
+
+#练习14:综合练习
+
+print('您好,欢迎来到古灵阁,请问您需要帮助吗?')
+choice=input('需要or不需要?请选择:')
+if choice=='需要':
+ need=int(input('请问您需要什么帮助呢?1.存取款;2.货币兑换;3.咨询:'))
+ if need==2:
+ amount=input('金加隆和人民币的兑换率1:51.3,请问您需要兑换多少金加隆呢?')
+ print('请问您要兑换'+amount+'金加隆吗?')
+ print('您需要付给我'+str(int(amount)*51.3)+'人民币')
+ elif need==1:
+ print('请您去存取款窗口.')
+ else:
+ print('请您去咨询窗口.')
+else:
+ print('好的,再见。')
+
+#while语句密码的练习
+password = '' # 变量password用来保存输入的密码
+
+while password != '816':
+ password = input('请尝试输入密码:')
+
+print('欢迎回家!')
+
+#循环语句练习
+while True:
+ a = input('A,你认罪吗?请回答认罪或者不认:')
+ b = input('B,你认罪吗?请回答认罪或者不认:')
+ if a == '认罪' and b == '认罪':
+ print('两人都得判10年,唉')
+ break
+ elif a == '不认' and b == '认罪':
+ print('A判20年,B判1年,唉')
+ break
+ elif a == '认罪' and b == '不认':
+ print('A判1年,B判20年')
+ break
+ elif a == '不认' and b == '不认':
+ print('都判3年,太棒了')
+ break
+ else:
+ print('别捣乱,只能回答“认罪”或“不认”!')
+
+
+```
+## 五几个小游戏案例
+```
+
+
+#用循环语句做小游戏的练习
+
+import time,random
+
+player_victory = 0
+enemy_victory = 0
+
+for i in range(1,4):
+ time.sleep(2) # 让局与局之间有较明显的有时间间隔
+ print(' \n——————现在是第'+str(i)+'局——————') # 作为局的标记
+
+ player_life = random.randint(100,150)
+ player_attack = random.randint(30,50)
+ enemy_life = random.randint(100,150)
+ enemy_attack = random.randint(30,50)
+
+ # 展示双方角色的属性
+ print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
+ print('------------------------')
+ time.sleep(1)
+ print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))
+ print('------------------------')
+ time.sleep(1)
+
+ # 双方PK
+ while player_life > 0 and enemy_life > 0:
+ player_life = player_life - enemy_attack
+ enemy_life = enemy_life - player_attack
+ print('你发起了攻击,【敌人】剩余血量'+str(enemy_life))
+ print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life))
+ print('-----------------------')
+ time.sleep(1.5)
+
+ #打印最终战果
+ if player_life > 0 and enemy_life <= 0:
+ player_victory += 1
+ print('敌人死翘翘了,你赢了!')
+ elif player_life <= 0 and enemy_life > 0:
+ enemy_victory += 1
+ print('悲催,敌人把你干掉了!')
+ else:
+ print('哎呀,你和敌人同归于尽了!')
+
+if player_victory > enemy_victory :
+ time.sleep(1)
+ print('【最终结果:你赢了!】')
+elif enemy_victory > player_victory:
+ print('【最终结果:你输了!】')
+else:
+ print('【最终结果:平局!】')
+
+
+#猜硬币小游戏第一种;
+import random
+guess = ''
+
+while guess not in [0,1]:
+ print('------猜硬币游戏------')
+ print('猜一猜硬币是正面还是反面?')
+ guess = int(input('“正面”请输入0,“反面”请输入1:'))
+ #注意要用int()将字符串类型转换为数字类型
+
+toss = random.randint(0,1)
+
+if toss == guess:
+ print('猜对了!你真棒')
+else:
+ print('没猜对,再给你一次机会。')
+ guess = int(input('再输一次(“正面”请输入0,“反面”请输入1):'))
+ if toss == guess:
+ print('你终于猜对了!')
+ else:
+ print('大失败!')
+
+
+#》》------猜硬币游戏------
+#》》猜一猜硬币是正面还是反面?
+#》》请输入“0.正面”或“1.反面”:1
+#》》猜对了!你真棒
+#》》你终于猜对了!
+
+#猜硬币小游戏第种二;
+import random
+
+all = ['正面','反面']
+guess = ''
+
+while guess not in all:
+ print('------猜硬币游戏------')
+ print('猜一猜硬币是正面还是反面?')
+ guess = input('请输入“正面”或“反面”:')
+
+toss = all[random.randint(0,1)]
+# 随机抛硬币,all[0]取出正面,all[1]取出反面
+
+if toss == guess:
+ print('猜对了!你真棒')
+else:
+ print('没猜对,再给你一次机会。')
+ guess = input('再输一次“正面”或“反面”:')
+ if toss == guess:
+ print('你终于猜对了!')
+ else:
+ print('大失败!')
+
+
+
+
+#猜拳小游戏
+
+import random
+#电脑
+computer=str(random.randint(0,2))
+
+#玩家
+playter=input('请出拳:0--【石头】 1--【剪刀】 2--【布】')
+print('电脑出的是:',computer)
+print('玩家出的是:',playter)
+#玩家获胜
+if (playter=='0' and computer=='1') or (playter=='1' and computer=='2') or (playter=='2' and computer=='0'):
+ print('玩家获胜')
+#平局
+elif playter==computer:
+ print('平局')
+#电脑获胜
+else:
+ print('电脑获胜')
+
+
+
+#猜拳游戏函数版
+import random
+def init():
+ # 声明两个个全局变量
+ global playter
+ global computer
+
+playter=input('请出拳:0--【石头】 1--【剪刀】 2--【布】') #玩家出拳
+
+def computer1(): #电脑出拳
+ computer=str(random.randint(0,2))
+ return computer
+computer=computer1()
+
+print('电脑出的是:',computer)
+print('玩家出的是:',playter)
+
+#玩家获胜
+def punches():
+ if (playter=='0' and computer=='1') or (playter=='1' and computer=='2') or (playter=='2' and computer=='0'):
+ print('玩家获胜')
+ elif playter==computer:
+ print('平局') #平局
+ else:
+ print('电脑获胜') #电脑获胜
+
+punches()
+
+
+
+
+```
+## 登录及菜单案例
+```
+
+#自定义登录密码函数
+def password():
+ n=0
+ while n<3:
+ username = input("请输入用户名:")
+ password = input("请输入密码:")
+ if username == 'abc' and password == '123':
+ print("登录成功")
+ break
+ else:
+ n=n+1
+ print("输入有误")
+ else:
+ print("你输错了三次,登录失败")
+password()
+#》》输入用户名:abc
+#》》请输入密码:123
+#》》登录成功
+
+
+
+#简单自定义函数嵌套:思考函数如何有效嵌套?
+def yang():
+ age=int(input('请输入您的年龄?:'))
+ if age>=18:
+ print("可以进网吧嗨皮……")
+ else:
+ print("你还没长大,应该回家写作业!")
+
+def warning():
+ print('Error: 你确定您输入的密码正确吗?')
+
+def main():
+ for i in range(3):
+ tssw=input('请输入登陆密码?')
+ if tssw=='861':
+ yang()
+ else:
+ warning()
+
+main()
+
+#》》请输入登陆密码?861
+#》》请输入您的年龄?:18
+#》》可以进网吧嗨皮……
+
+
+#练习22
+def win():
+ a=0
+ while a <3:
+ a+=1
+ print('--------------- 第'+str(a)+'局WIN-----------------')
+win()
+
+print('=====================================================')
+print('分割线')
+print('=====================================================')
+
+def win2():
+ for i in range(3):
+ print('--------------- 第'+str(i+1)+'局WIN-----------------')
+win2()
+
+#用for循环呢取出字典内容
+movie = {
+'妖猫传':['黄轩','染谷将太'],
+'无问西东':['章子怡','王力宏','祖峰'],
+'超时空同居':['雷佳音','佟丽娅'],
+}
+
+name = input('你想查询哪个演员?')
+for i in movie:
+ actors = movie[i]
+ #取出字典的值
+ if name in actors:
+ print(name+'出演了电影'+i)
+
+
+
+#格式化字符串
+a='张山这小子和'
+b='李四一起'
+c='去买香烟'
+print('{} {} {}'.format(a,b,c))
+#》》张山这小子 和李四一起 去买香烟
+
+
+#练习题:帮你做选择之我要吃什么?
+import random
+def dbcai():
+ dbcai={1:'锅包肉',2:'尖椒干豆腐',3:'大棒骨',4:'酱骨架',5:'酸菜白菜猪肉炖粉条',6:'小鸡炖蘑菇',7:'葱烧鲤鱼'} #菜单用字典
+ for x1 in random.sample(dbcai.keys(),len(dbcai)): #随机生成不重复的菜品
+ v1=dbcai[x1]
+ a1=input(v1+'选择Y,否则选择N:')
+ if a1=='Y':
+ print('您的选择是'+v1)
+ break
+def xcai():
+ xcai={1:'剁椒鱼头',2:'辣椒炒肉',3:'板栗烧鸡',4:'蒜香腊鸡腿',5:'麻辣小龙虾',6:'剁椒萝卜皮'}
+ for x2 in random.sample(xcai.keys(),len(xcai)):
+ v2=xcai[x2]
+ a2=input(v2+'选择Y,否则选择N:')
+ if a2=='Y':
+ print('您的选择是'+v2)
+ break
+def chicai():
+ chicai={1:'四川辣子鸡',2:'水煮面',3:'四川麻辣鸡',4:'干煸牛肉丝',5:'豆豉蒸排骨',6:'川味水煮鱼'}
+ for x3 in random.sample(chicai.keys(),len(chicai)):
+ v3=chicai[x3]
+ a3=input(v3+'选择Y,否则选择N:')
+ if a3=='Y':
+ print('您的选择是'+v3)
+ break
+
+def main():
+
+ while True:
+ print('请选择饭店?:「1」大明东北菜馆;「2」毛家饭店湘菜馆;「3」辣不怕川菜馆')
+ choice=input('请输入饭店名称(如果退出请按 N ):')
+
+ if choice=='1':
+ dbcai()
+ print('感谢惠顾!欢迎您下次光临!')
+ continue
+ elif choice=='2':
+ xcai()
+ print('感谢惠顾!欢迎您下次光临!')
+ continue
+ elif choice=='3':
+ chicai()
+ print('感谢惠顾!欢迎您下次光临!')
+ continue
+ elif choice=='N':
+ print('感谢惠顾!欢迎您下次光临!')
+ break
+ else:
+ print('您输入有误,请重新输入')
+ continue
+
+main()
+
+#第二种情况
+# 练习题:帮你做选择之我要吃什么
+import random
+
+# 将需要用到的表格和变量放在开头
+list_food = ['KFC', '蒸菜馆', '楼下快餐店', '桂林米粉', '东北饺子', '金牌猪脚饭', '三及第汤饭'] # 备选菜单,可自定义。
+list_choice = []
+
+# 由于两个原因都包含判断过程,所以,为了让代码更简洁,可将其封装成函数。
+def choose(list):
+ while True:
+ food = random.choice(list)
+ judgement = input('去吃【%s】好不好啊?同意的话输入y,不想吃直接回车即可。'%(food))
+ if judgement == 'y':
+ print('去吃【%s】!就这么愉快地决定啦!'%(food))
+ break
+
+# 判断环节
+reason = int(input('你不知道吃什么的原因是:1.完全不知道吃什么;2.在几家店之间徘徊(请输入1或2):'))
+if reason == 1:
+ choose(list_food)
+elif reason == 2:
+ add = True
+ while add:
+ choice = input('请输入让你犹豫的店名(注:一家一家输,完成后输入y):')
+ if choice != 'y': # 这个判断语句,是为了不将 y 也添加到菜单里。
+ list_choice.append(choice)
+ if choice == 'y':
+ add = False
+ choose(list_choice)
+else:
+ print('抱歉,目前还不支持第三种情况——不过,你可以加代码哦。')
+
+
+#滾動屏幕廣告效果
+import os, time
+
+def main(): # 用函数封装,可复用性会高一些(可在其他的.py文件里调用该函数。)
+ content = ' 我愛你董春華...' # 广告词可自定义。
+ while True:
+ # linux/os x系统【清除屏幕】代码(线上使用本代码)
+ os.system('clear') # 清屏和打印结合起来,形成滚动效果。
+ # windows系统【清除屏幕】代码
+ '''
+ os.system('cls')
+ '''
+
+ content = content[1:] + content[0]
+ print(content)# 这行代码相当于:将字符串中第一个元素移到了最后一个。
+ time.sleep(0.25) # 你可以改下时间,体会“循环周期”和“滚动速度”之间的关联。
+
+if __name__ == '__main__': # 类里面学到的检测方法,在函数中其实也可以用。
+ main()
+
+
+
+```
+## 101例函数式编程测卦系统等
+```
+
+#例题101:
+lsg=['乾天刚建,自强不息','坤地方直,厚德载物','水积雷响,屯积助长','山下流水,启蒙德育','水在天上,需等饮食','天升水落,讼兴不争','地下藏水,师出有名','水漫于地,密交亲比','风行天上,小畜积雨','天下有泽,和悦慎履','地天相交,和谐通泰','天地相悖,闭塞成否','天火同燃,同人团结','火燃天上,大有收获','地中隐山,谨慎为谦','雷响于地,豫乐自警','泽中有雷,随机应变','山下有风,蛊惑横行','地高于泽,居高临下','风拂大地,遍观通达','火闪雷鸣,噬嗑威刑','山脚火焰,贲饰文美','高山附地,剥蚀去伪','地下雷鸣,刚阳复兴','天降暴雷,守道无妄','山中有天,大畜能容','山下有雷,养志颐情','泽淹风木,大过之征','习坎为水,守信克险','附离为火,柔顺亨通','泽山相应,咸感贞吉','雷响风行,识道守恒','天下藏山,退遁避险','雷震天上,识礼大壮','火出地上,晋升明德','地压潜火,明夷避祸','风熊火里,家人同乐','上火下泽,睽违少和','水漫山路,蹇滞艰难','雷鸣水降,解除旱象','高山低泽,损下益上','风激雷荡,益下损上','泽与天上,夬决坚刚','天下微风,阴生姤合','泽汇于地,萃英聚众','地平风扬,贤能萌升','泽中漏水,知困早悟','水盛风木,井收勿幕','泽中起火,改制旧革','火燃风木,鼎新之物','震雷压惊,反思内省','艮为山止,知止当止','风木依山,循序渐进','雷震泽上,归妹依礼','雷鸣火电,丰茂光明','火烧山外,旅途亨通','巽为风顺,大人齐物','兑为泽悦,修德和睦','风行水面,离析涣散','水溢泽岸,节制礼数','风吹泽面,中孚信诚','雷惊山上,小过无妨','水火相融,既济功成','火水离错,未济大江']
+import random
+input('请输入任意字符或回车')
+a = random.choice(lsg)
+for i in range(1,2):
+ print(a)
+
+
+
+#例题102初版:
+
+import random
+lsg1=['1','2','3','4','5','6','7','8']
+a=random.choice(lsg1)
+b=random.choice(lsg1)
+mo={'乾为天(乾卦)自强不息':'11','坤为地(坤卦)厚德载物':'88','水雷屯(屯卦)起始维艰':'64','山水蒙(蒙卦)启蒙奋发':'76','水天需(需卦)守正待机':'61','天水讼(讼卦)慎争戒讼':'16','地水师(师卦)行险而顺':'86','水地比(比卦)诚信团结':'68','风天小畜(小畜卦)蓄养待进':'51','天泽履(履卦)脚踏实地':'12','地天泰(泰卦)应时而变':'81','天地否(pǐ)(否卦)不交不通':'18','天火同人(同人卦)上下和同':'13','火天大有(大有卦)顺天依时':'31','地山谦(谦卦)内高外低':'87','雷地豫(豫卦)顺时依势':'48','泽雷随(随卦)随时变通':'24','山风蛊(蛊卦)振疲起衰':'75','地泽临(临卦)教民保民':'82','风地观(观卦)观下瞻上':'58','火雷噬嗑(噬嗑卦)刚柔相济':'34','山火贲(贲卦)饰外扬质':'73','山地剥(剥卦)顺势而止':'78','地雷复(复卦)寓动于顺':'84','天雷无妄(无妄卦)无妄而得':'14','山天大畜(大畜卦)止而不止':'71','山雷颐(颐卦)纯正以养':'74','泽风大过(大过卦)非常行动':'25','坎为水(坎卦)行险用险':'66','离为火(离卦)附和依托':'33','泽山咸(咸卦)相互感应':'27','雷风恒(恒卦)恒心有成':'45','天山遁(遁卦)遁世救世':'17','雷天大壮(大壮卦)壮勿妄动':'41','火地晋(晋卦)求进发展':'38','地火明夷(明夷卦)晦而转明':'83','风火家人(家人卦)诚威治业':'53','火泽睽(睽卦)异中求同':'32','水山蹇(蹇卦)险阻在前':'67','雷水解(解卦)柔道致治':'46','山泽损(损卦)损益制衡':'72','风雷益(益卦)损上益下':'54','泽天夬(夬卦)决而能和':'21','天风姤(姤卦)天下有风':'16','泽地萃(萃卦)荟萃聚集':'28','地风升(升卦)柔顺谦虚':'85','泽水困(困卦)困境求通':'26','水风井(井卦)求贤若渴':'65','泽火革(革卦)顺天应人':'23','火风鼎(鼎卦)稳重图变':'35','震为雷(震卦)临危不乱':'44','艮为山(艮卦)动静适时':'77','风山渐(渐卦)渐进蓄德':'58','雷泽归妹(归妹卦)立家兴业':'42','雷火丰(丰卦)日中则斜':'43','火山旅(旅卦)依义顺时':'37','巽为风(巽卦)谦逊受益':'55','兑为泽(泽卦)刚内柔外':'22','风水涣(涣卦)拯救涣散':'56','水泽节(节卦)万物有节':'62','风泽中孚(中孚卦)诚信立身':'52','雷山小过(小过卦)行动有度':'47','水火既济(既济卦)盛极将衰':'63','火水未济(未济卦)事业未竟':'36'}
+name =a+b
+for i in mo:
+ ac=mo[i]
+ if name in ac:
+ print('['+name+'卦像]:'+i)
+
+
+
+
+
+
+
+#例题函数式103第二次升级版:
+import random
+def zylsg():
+ lsg1=['1','2','3','4','5','6','7','8']
+ a=random.choice(lsg1)
+ b=random.choice(lsg1)
+ name=a+b
+ mo={'乾为天(乾卦)自强不息':'11','坤为地(坤卦)厚德载物':'88','水雷屯(屯卦)起始维艰':'64','山水蒙(蒙卦)启蒙奋发':'76','水天需(需卦)守正待机':'61','天水讼(讼卦)慎争戒讼':'16','地水师(师卦)行险而顺':'86','水地比(比卦)诚信团结':'68','风天小畜(小畜卦)蓄养待进':'51','天泽履(履卦)脚踏实地':'12','地天泰(泰卦)应时而变':'81','天地否(pǐ)(否卦)不交不通':'18','天火同人(同人卦)上下和同':'13','火天大有(大有卦)顺天依时':'31','地山谦(谦卦)内高外低':'87','雷地豫(豫卦)顺时依势':'48','泽雷随(随卦)随时变通':'24','山风蛊(蛊卦)振疲起衰':'75','地泽临(临卦)教民保民':'82','风地观(观卦)观下瞻上':'58','火雷噬嗑(噬嗑卦)刚柔相济':'34','山火贲(贲卦)饰外扬质':'73','山地剥(剥卦)顺势而止':'78','地雷复(复卦)寓动于顺':'84','天雷无妄(无妄卦)无妄而得':'14','山天大畜(大畜卦)止而不止':'71','山雷颐(颐卦)纯正以养':'74','泽风大过(大过卦)非常行动':'25','坎为水(坎卦)行险用险':'66','离为火(离卦)附和依托':'33','泽山咸(咸卦)相互感应':'27','雷风恒(恒卦)恒心有成':'45','天山遁(遁卦)遁世救世':'17','雷天大壮(大壮卦)壮勿妄动':'41','火地晋(晋卦)求进发展':'38','地火明夷(明夷卦)晦而转明':'83','风火家人(家人卦)诚威治业':'53','火泽睽(睽卦)异中求同':'32','水山蹇(蹇卦)险阻在前':'67','雷水解(解卦)柔道致治':'46','山泽损(损卦)损益制衡':'72','风雷益(益卦)损上益下':'54','泽天夬(夬卦)决而能和':'21','天风姤(姤卦)天下有风':'16','泽地萃(萃卦)荟萃聚集':'28','地风升(升卦)柔顺谦虚':'85','泽水困(困卦)困境求通':'26','水风井(井卦)求贤若渴':'65','泽火革(革卦)顺天应人':'23','火风鼎(鼎卦)稳重图变':'35','震为雷(震卦)临危不乱':'44','艮为山(艮卦)动静适时':'77','风山渐(渐卦)渐进蓄德':'58','雷泽归妹(归妹卦)立家兴业':'42','雷火丰(丰卦)日中则斜':'43','火山旅(旅卦)依义顺时':'37','巽为风(巽卦)谦逊受益':'55','兑为泽(泽卦)刚内柔外':'22','风水涣(涣卦)拯救涣散':'56','水泽节(节卦)万物有节':'62','风泽中孚(中孚卦)诚信立身':'52','雷山小过(小过卦)行动有度':'47','水火既济(既济卦)盛极将衰':'63','火水未济(未济卦)事业未竟':'36'}
+ for i in mo:
+ ac=mo[i]
+ if name in ac:
+ print('['+name+'卦像]:'+i)
+ print('继续请选择')
+
+def main():
+ for i in range(6):
+ shuru=input('请输入数字1测卦,否者选q:')
+ if shuru=='1':
+ zylsg()
+ elif shuru in ['q','Q','Quit','quit']:
+ print("下次再会~\n")
+ break
+ else:
+ print('你输入的有误,请重新输入')
+
+main()
+
+
+#函数式103第3次升级版本:
+import random
+def zylsg():
+ code = ''
+ for i in range(6):
+ c = str(random.randint(0,1))
+ b = random.choice(c)
+ code += b
+ mo={'乾为天(乾卦)自强不息':'111111','坤为地(坤卦)厚德载物':'000000','水雷屯(屯卦)起始维艰':'010001','山水蒙(蒙卦)启蒙奋发':'100010','水天需(需卦)守正待机':'010111','天水讼(讼卦)慎争戒讼':'111010','地水师(师卦)行险而顺':'000010','水地比(比卦)诚信团结':'010000','风天小畜(小畜卦)蓄养待进':'110111','天泽履(履卦)脚踏实地':'111011','地天泰(泰卦)应时而变':'000111','天地否(pǐ)(否卦)不交不通':'111000','天火同人(同人卦)上下和同':'111101','火天大有(大有卦)顺天依时':'101111','地山谦(谦卦)内高外低':'000100','雷地豫(豫卦)顺时依势':'001000','泽雷随(随卦)随时变通':'011001','山风蛊(蛊卦)振疲起衰':'100110','地泽临(临卦)教民保民':'000011','风地观(观卦)观下瞻上':'110000','火雷噬嗑(噬嗑卦)刚柔相济':'101001','山火贲(贲卦)饰外扬质':'100101','山地剥(剥卦)顺势而止':'100000','地雷复(复卦)寓动于顺':'000001','天雷无妄(无妄卦)无妄而得':'111001','山天大畜(大畜卦)止而不止':'100111','山雷颐(颐卦)纯正以养':'100001','泽风大过(大过卦)非常行动':'011110','坎为水(坎卦)行险用险':'010010','离为火(离卦)附和依托':'101101','泽山咸(咸卦)相互感应':'011100','雷风恒(恒卦)恒心有成':'001110','天山遁(遁卦)遁世救世':'111100','雷天大壮(大壮卦)壮勿妄动':'001111','火地晋(晋卦)求进发展':'101000','地火明夷(明夷卦)晦而转明':'000101','风火家人(家人卦)诚威治业':'110101','火泽睽(睽卦)异中求同':'101011','水山蹇(蹇卦)险阻在前':'010100','雷水解(解卦)柔道致治':'001010','山泽损(损卦)损益制衡':'100011','风雷益(益卦)损上益下':'110001','泽天夬(夬卦)决而能和':'011111','天风姤(姤卦)天下有风':'111010','泽地萃(萃卦)荟萃聚集':'011000','地风升(升卦)柔顺谦虚':'000110','泽水困(困卦)困境求通':'011010','水风井(井卦)求贤若渴':'010110','泽火革(革卦)顺天应人':'011101','火风鼎(鼎卦)稳重图变':'101110','震为雷(震卦)临危不乱':'001001','艮为山(艮卦)动静适时':'100100','风山渐(渐卦)渐进蓄德':'110000','雷泽归妹(归妹卦)立家兴业':'001011','雷火丰(丰卦)日中则斜':'001101','火山旅(旅卦)依义顺时':'101100','巽为风(巽卦)谦逊受益':'110110','兑为泽(泽卦)刚内柔外':'011011','风水涣(涣卦)拯救涣散':'110010','水泽节(节卦)万物有节':'010011','风泽中孚(中孚卦)诚信立身':'110011','雷山小过(小过卦)行动有度':'001100','水火既济(既济卦)盛极将衰':'010101','火水未济(未济卦)事业未竟':'101010'}
+ for i in mo:
+ ac=mo[i]
+ if code in ac:
+ print('['+code+'卦像]:'+i)
+ print('继续请选择')
+
+def main():
+ for i in range(6):
+ shuru=input('请输入数字1测卦,否者选q:')
+ if shuru=='1':
+ zylsg()
+ elif shuru in ['q','Q','Quit','quit']:
+ print("下次再会~\n")
+ break
+ else:
+ print('你输入的有误,请重新输入')
+main()
+
+
+#函数式104第4次升级版本20230303最终版:
+import random
+
+def get_trigram():
+ trigram = []
+ for i in range(3):
+ coin_tosses = [random.randint(0, 1) for _ in range(3)]
+ trigram.append(sum(coin_tosses) % 2)
+ return trigram
+
+def get_hexagram():
+ lower_trigram = get_trigram()
+ upper_trigram = get_trigram()
+ return upper_trigram + lower_trigram
+
+
+
+
+def main_hexagram():
+ hexagram = get_hexagram()
+ result = ''.join(map(str, hexagram))
+ exp_hexagram={'乾为天(乾卦)自强不息':'111111','坤为地(坤卦)厚德载物':'000000','水雷屯(屯卦)起始维艰':'010001','山水蒙(蒙卦)启蒙奋发':'100010','水天需(需卦)守正待机':'010111','天水讼(讼卦)慎争戒讼':'111010','地水师(师卦)行险而顺':'000010','水地比(比卦)诚信团结':'010000','风天小畜(小畜卦)蓄养待进':'110111','天泽履(履卦)脚踏实地':'111011','地天泰(泰卦)应时而变':'000111','天地否(pǐ)(否卦)不交不通':'111000','天火同人(同人卦)上下和同':'111101','火天大有(大有卦)顺天依时':'101111','地山谦(谦卦)内高外低':'000100','雷地豫(豫卦)顺时依势':'001000','泽雷随(随卦)随时变通':'011001','山风蛊(蛊卦)振疲起衰':'100110','地泽临(临卦)教民保民':'000011','风地观(观卦)观下瞻上':'110000','火雷噬嗑(噬嗑卦)刚柔相济':'101001','山火贲(贲卦)饰外扬质':'100101','山地剥(剥卦)顺势而止':'100000','地雷复(复卦)寓动于顺':'000001','天雷无妄(无妄卦)无妄而得':'111001','山天大畜(大畜卦)止而不止':'100111','山雷颐(颐卦)纯正以养':'100001','泽风大过(大过卦)非常行动':'011110','坎为水(坎卦)行险用险':'010010','离为火(离卦)附和依托':'101101','泽山咸(咸卦)相互感应':'011100','雷风恒(恒卦)恒心有成':'001110','天山遁(遁卦)遁世救世':'111100','雷天大壮(大壮卦)壮勿妄动':'001111','火地晋(晋卦)求进发展':'101000','地火明夷(明夷卦)晦而转明':'000101','风火家人(家人卦)诚威治业':'110101','火泽睽(睽卦)异中求同':'101011','水山蹇(蹇卦)险阻在前':'010100','雷水解(解卦)柔道致治':'001010','山泽损(损卦)损益制衡':'100011','风雷益(益卦)损上益下':'110001','泽天夬(夬卦)决而能和':'011111','天风姤(姤卦)天下有风':'111010','泽地萃(萃卦)荟萃聚集':'011000','地风升(升卦)柔顺谦虚':'000110','泽水困(困卦)困境求通':'011010','水风井(井卦)求贤若渴':'010110','泽火革(革卦)顺天应人':'011101','火风鼎(鼎卦)稳重图变':'101110','震为雷(震卦)临危不乱':'001001','艮为山(艮卦)动静适时':'100100','风山渐(渐卦)渐进蓄德':'110000','雷泽归妹(归妹卦)立家兴业':'001011','雷火丰(丰卦)日中则斜':'001101','火山旅(旅卦)依义顺时':'101100','巽为风(巽卦)谦逊受益':'110110','兑为泽(泽卦)刚内柔外':'011011','风水涣(涣卦)拯救涣散':'110010','水泽节(节卦)万物有节':'010011','风泽中孚(中孚卦)诚信立身':'110011','雷山小过(小过卦)行动有度':'001100','水火既济(既济卦)盛极将衰':'010101','火水未济(未济卦)事业未竟':'101010'}
+ for key, value in exp_hexagram.items():
+ if value==result:
+ print(value+'卦辞为:'+key)
+ print('继续请选择')
+
+
+def main():
+ for i in range(6):
+ hex_inp=input('请输入数字1测卦,否者选q:')
+ if hex_inp=='1':
+ main_hexagram()
+
+ elif shuru in ['q','Q','Quit','quit']:
+ print("下次再会~\n")
+ #break
+ else:
+ print('你输入的有误,请重新输入')
+main()
+
+
+
+
+
+```
+## 类的练习,借书系统及超级便签
+```
+
+#类的练习,借书系统:
+class Book:
+
+ def __init__(self, name, author, comment, state = 0):
+ self.name = name
+ self.author = author
+ self.comment = comment
+ self.state = state
+
+ def __str__(self):
+ status = '未借出'
+ if self.state == 1:
+ status = '已借出'
+ return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
+
+class BookManager:
+
+ authors = []
+ def __init__(self):
+ book1 = Book('撒哈拉的故事','三毛','我每想你一次,天上便落下一粒沙,从此便有了撒哈拉。')
+ book2 = Book('梦里花落知多少','三毛','人人都曾拥有荷西,虽然他终会离去。')
+ book3 = Book('月亮与六便士','毛姆','满地都是六便士,他却抬头看见了月亮。')
+ self.books = [book1,book2,book3]
+ self.authors.append(book1.author)
+ self.authors.append(book2.author)
+ self.authors.append(book3.author)
+
+ def menu(self):
+ while True:
+ print('1.查询书籍')
+ choice = int(input('请输入数字选择对应的功能:'))
+ if choice == 1:
+ self.show_author_book()
+ else:
+ print('感谢使用!')
+ break
+
+ def show_author_book(self):
+ author = input('请输入想查询作家的名称:')
+ if author in self.authors:
+ print(author + '的作品有:')
+ for book in self.books:
+ if book.author == author:
+ print(book)
+ else:
+ print('很可惜,我们暂时没有收录这位作者的作品')
+
+manager = BookManager()
+manager.menu()
+'''
+一个思路:
+1. 先用条件判断语句判断该作者在不在列表authors里,如果不在就打印'很可惜,我们暂时没有收录这位作者的作品'
+2. 如果在,就遍历列表books的每个实例,当实例属性author与输入的作者名相等,就打印该实例
+'''
+
+
+
+
+
+#练习 超级便捷:
+
+class List:
+
+ def __init__(self, number, item,status):
+ self.number = number
+ self.item = item
+ self.status= status
+
+
+
+ def __str__(self):
+ return '序号:「%s」 事项:%s 重要等级:%s' % (self.number,self.item,self.status)
+
+class ListManager:
+
+ lists = []
+ def __init__(self):
+ list1 = List('ID','今日事项','级别')
+ self.lists.append(list1)
+
+
+ def menu(self):
+ print('欢迎使用超级便笺系统,希望你有缘,为精神家园找到一片栖息地。\n')
+ while True:
+ print('1.查询所有便笺\n2.添加便笺\n3.清空所有\n4.退出系统\n')
+ choice = int(input('请输入数字选择对应的功能:'))
+ if choice == 1:
+ self.show_all_list()
+ elif choice == 2:
+ self.add_list()
+ elif choice == 3:
+ self.return_list()
+ elif choice == 4:
+ print('感谢使用!愿你我成为好朋友,在茫茫人海里相遇。')
+ break
+
+ def show_all_list(self):
+ print('便笺信息如下:')
+ for list in self.lists:
+ print(list)
+ print('')
+
+ def add_list(self):
+ new_number = input('请输入序列号:')
+ new_item = input('请输入事项内容:')
+ new_status= input('请输入重要等级:')
+
+ new_list = List(new_number, new_item,new_status)
+ self.lists.append(new_list)
+ print('便笺录入成功!\n')
+
+ def check_list(self,number):
+ for list in self.lists:
+ if list.number == number:
+ return list
+ else:
+ return None
+
+ def return_list(self):
+ number = input('请输入序列号:')
+ res = self.check_list(number)
+ # 调用check_list方法,将返回值赋值给变量res
+
+ if res == None:
+ # 如果返回的是空值,即这本书的书名不在系统里
+
+ print('没有这个序列号,您恐怕输错了~')
+ else:
+ # 如果返回的是实例对象
+
+ for number in self.lists:
+ self.lists.clear()
+
+ print('已经清全部空便笺记录!')
+ else:
+
+ print('欢迎您继续添加新的便笺!')
+
+
+
+
+manager = ListManager()
+manager.menu()
+
+
+```
+## 背单词案例
+```
+
+
+#50行代码背单词
+
+
+import random
+
+
+# 存放单词的列表(可以自己填写需要背诵的单词)
+words = ['print', 'int','str','len', 'input', 'format', 'if','for','def']
+
+#初始化信息↓↓↓↓↓↓↓
+def init():
+ # 声明三个全局变量
+ global word
+ global tips
+ global ranList
+
+ #随机获取单词列表里的一个单词
+ word = list(words[random.randint(0, len(words) - 1)])
+
+ #随机数列表,存放着与单词长度一致的随机数(不重复)
+ ranList = random.sample(range(0, len(word)), len(word))
+
+ #存放提示信息
+ tips = list()
+ #初始化提示信息
+ #存放跟单词长度一致的下划线
+ for i in range(len(word)):
+ tips.append(_)
+ #随机提示两个字母
+ tips[ranList[0]] = word[ranList[0]]
+ tips[ranList[1]] = word[ranList[1]]
+
+#函数部分↓↓↓↓↓
+
+#展示菜单
+def showMenu():
+ print('需要提示请输入?')
+ print('结束游戏请输入quit!')
+
+
+#显示提示信息
+def showtips():
+ for i in tips:
+ print(i, end='' )
+ print(i)
+
+
+#需要提示
+def needTips(tipsSize):
+ #至少有两个未知字母
+ if tipsSize <= len(word)-3:
+ tips[ranList[tipsSize]] = word[ranList[tipsSize]]
+ tipsSize += 1
+ return tipsSize
+ else:
+ print('已没有提示!')
+
+
+#主要运行函数↓↓↓↓↓↓
+def run():
+ print('------python关键字版本-------')
+ init()
+ tipsSize = 2
+ showMenu()
+
+ while True:
+ print('提示:',end='')
+ showtips()
+ guessWord = input('猜一下这个单词:')
+ # ''.join(word)>把word列表的内容转换成字符串
+ if guessWord == ''.join(word):
+ print('恭喜你,猜对了!','就是%s!'%(''.join(word)))
+ print('再猜一次')
+ init()
+
+ elif guessWord == '?':
+ tipsSize = needTips(tipsSize)
+ elif guessWord == 'quit!':
+ break
+ else:
+ print('猜错了!')
+ continue
+run()
+
+
+#随机背单词立例题二:
+import random as t
+#创建单词序列
+words=("easy","difficult","answer","continue")
+zi=("容易","困难","回答","继续")
+hanzi={ "easy":"容易", "difficult":"困难","answer":"回答", "continue":"继续","blue":"蓝色"}
+yin={"容易":"easy","困难":"difficult","回答":"answer","继续":"continue","蓝色":"blue"}
+def jiemian():
+ print("""
+ 欢迎来到背单词
+ 根据English回答汉语或者根据汉语回答English
+ -------------------------------------------
+ 1.English——>汉语
+
+ 2.汉语——>English
+
+ 3.单词列表
+
+ 4.退出系统
+""")
+#######Zhang###### English——>汉语 ################################
+
+def yyihan():
+ n=0
+ m=0
+ su=0
+ iscontinue="y"
+ while iscontinue=="y" or iscontinue=="Y":
+ word=t.choice(words)
+ print("随机生成在单词:")
+ print(">------> "+word)
+ guess=input("\n输入汉语: ").strip()# 防止用户误操作录入空白
+ while guess!=hanzi[word]:
+ print("对不起,不正确。")
+ n=n+1
+ print('\n——>正确率:%.2f'%(m/(n+m)))
+ guess=input("继续输入:").strip()
+ if guess==hanzi[word]:
+ print("真棒!答对了!!")
+ m=m+1
+ print('\n——>正确率:%.2f'%(m/(n+m)))
+ iscontinue=input("\nn\是否继续(Y/N):")
+
+############### 汉语——>English #########wei####################
+
+def hanyiy():
+ n=0;
+ m=0;
+ su=0;
+ iscontinue="y"
+ while iscontinue=="y" or iscontinue=="Y":
+ hz=t.choice(zi)
+ print("随机生成在汉语:")
+ print(">------> "+hz)
+ guess=input("\n输入Ehglish: ").strip()
+ while guess!=yin[hz]:
+ print("对不起,不正确。")
+ n=n+1
+ print('\n——>正确率:%.2f'%(m/(n+m)))
+ guess=input("继续输入:").strip()
+ if guess==yin[hz]:
+ print("真棒!答对了!!")
+ m=m+1
+ print('\n——>正确率:%.2f'%(m/(n+m)))
+ iscontinue=input("\nn\是否继续(Y/N):")
+
+####bu##########################################################
+
+def lib():
+ print("************************")
+ print("\n")
+ for i in range (len(words)):
+ print(words[i]," ",zi[i],"\n")
+ print("\n")
+ print("************************")
+ a=input("输入 1 背诵单词结束——>: ")
+
+
+###################################################################
+
+while True:
+ jiemian()
+ a=int(input("\n\n\n\选择需要进行的操作(1、2、3、4):"))
+ if(a==1):
+ yyihan()
+ elif a==2:
+ hanyiy()
+ elif a==3:
+ lib()
+ elif a==4:
+ exit()
+ else:
+ print("输入格式错误,重新输入!!")
+
+
+
+
+```
+## 纸牌游戏案例
+```
+
+import random
+#print(f'幻影来到《十一点》游戏场地'.center(100,'-'))
+
+
+poke_num_list=[i for i in range(1,14)]
+poke_color_list=['黑桃','红桃','方块','梅花']
+total_poke_list=[[color,num] for num in poke_num_list for color in poke_color_list]+[['小王',14],['大王',15]]
+print(total_poke_list)
+print(f'洗牌'.center(100,'='))
+random.shuffle(total_poke_list)
+print(total_poke_list)
+
+print(f'欢迎来到《十一点》游戏场地'.center(100,'-'))
+while True:
+ count=input('请输入参与游戏人数:')
+ if not count.isdecimal():
+ print('输入的必须是纯数字,兄弟!!')
+ continue
+
+ user_count=int(count)
+ print('参与的人数是{}'.format(user_count))
+ if user_count<1:
+ print('参与人数必须大于1,你这个二货!!')
+ continue
+ break
+
+total_user_score={}
+
+for i in range(1,user_count+1):
+ print(user_count)
+
+ random_index=random.randint(0,len(total_poke_list)-1)
+ card=total_poke_list.pop(random_index)
+ score=0
+ value=0.5 if card[1]>10 else card[1]
+
+ score+=value
+ print(f'给用户{i}发的牌是{card}得分情况是:{score}')
+
+ while True:
+ choice=input('您是否还继续要牌:(Y/N)'.upper())
+ if choice not in {'Y','N'}:
+ print('你这个大笨蛋,你能好好输入吗?只能是Y或N')
+ continue
+ if choice=='N':
+ print('本帅哥不要了,88!!')
+ break
+ random_index=random.randint(0,len(total_poke_list)-1)
+ card=total_poke_list.pop(random_index)
+ value=0.5 if card[1]>10 else card[1]
+ score+=value
+ print(f'给用户{i}发的牌是{card}得分情况是:{score}')
+ if score>11:
+ print('您经超过11点,回家洗洗睡吧,我要裂开了'.center(60,'—'))
+ score=0
+ break
+ total_user_score[f'用户{i}']=score
+ print(total_user_score)
+
+
+
+
+```
+## 员工抽奖案例及 数据库版便笺
+```
+#幸运员工
+
+import random
+user_list=[f'幸运员工{i}' for i in range(1,31)]
+print(user_list)
+bonuns_list=[['三等奖 笔记本一个',3],['二等奖 50元红包一个',2],['一等奖 笔记本一个',1]]
+for text,count in bonuns_list:
+ winner_list=random.sample(user_list,count)
+for user in winner_list:
+ user_list.remove(user)
+print(f'赢家是:{winner_list}'.center(86,'*'))
+print(f'奖品是:{text},赢家是:{winner_list}')
+
+print(92*'*')
+
+
+
+#幸运员工开奖另一种写法
+
+import random
+staff_list=[]
+for i in range (1,301):
+ staff_list.append(f'员工{i}')
+
+print(staff_list)
+print('+'*151)
+level=[30,6,3]
+count=0
+
+for j in range(3):
+ winnList=random.sample(staff_list,level[j])
+
+ count+=1
+ for winner in winnList:
+ staff_list.remove(winner)
+ print(f'获得{3-j}等奖的员工是:{winnList}')
+ print(f'还剩{(len(staff_list))}个未中奖')
+
+
+
+
+#ChatGPT源代码
+import os
+import openai
+
+openai.api_key =' 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'
+start_sequence='\nA:'
+restart_requence='\n\nQ:'
+restart_requence='\n\nQ:'
+while 1==1:
+ prompt=input(restart_requence)
+ if prompt=='quit':
+ break
+ else:
+ response = openai.Completion.create(
+ model="text-davinci-003",
+ prompt=prompt,
+ temperature=0.7,
+ max_tokens=256,
+ top_p=1,
+ frequency_penalty=0,
+ presence_penalty=0
+ )
+ print(response['choices'][0]['text'].strip())
+
+
+#ChatYuan源码
+import clueai
+# initialize the Clueai Client with an API Key
+cl = clueai.Client('gUf5Yh-WXUluN3YE-hC38101001011011', check_api_key=True)
+start_sequence='\nA:'
+restart_requence='\n\nQ:'
+restart_requence='\n\nQ:'
+while 1==1:
+ prompt=input(restart_requence)
+ if prompt=='quit':
+ break
+ else:
+ response =cl.generate(
+ model_name='ChatYuan-large',
+ prompt=prompt)
+ print('元语Ai: {}'.format(response.generations[0].text))
+
+
+
+
+#超级行事历初版本
+
+import sys
+import time
+#reload(sys)
+#sys.setdefaultencoding('utf-8')
+
+
+class List():
+ #number=0
+
+ # def __init__(self):
+ # self.Supercal_list=[]
+ # self.Suoercal_dict={}
+
+ #定义行事属性,初始化方法
+ def __init__(self,date,item,content,status):
+ self.date = date
+ self.item = item
+ self.content=content
+ self.status= status
+ #Supercal.number=Supercal.number+1
+
+ def __str__(self):
+ return "Date:{}.Item:{}.Content:{}.Status".format(self.date,self.item,self.content,self.status)
+
+
+class Supercal():
+ def __init__(self):
+ self.Supercal_list=[]
+ self.Suoercal_dict={}
+
+ #定义行事历菜单
+ def menu(self):
+ print('欢迎使用超级行事历系统,希望你有缘,为精神家园找到一片栖息地。\n')
+ while True:
+ print('1.查询所有行事历\n2.添加行事历\n3.修改行事历\n4.保存事历\n5.退出系统\n')
+ choice = int(input('请输入数字选择对应的功能:'))
+ if choice == 1:
+ #self.show()
+ self.read_file()
+ self.show()
+ elif choice == 2:
+ self.add()
+
+ elif choice == 3:
+ self.return_list()
+ elif choice == 4:
+ self.add_file()
+ elif choice == 5:
+ print('感谢使用!愿你我成为好朋友,在茫茫人海里相遇。')
+ break
+
+
+
+ #添加行事历
+ def add(self):
+ date=input("请输入日期:")
+ item=input("请输入事项类别:")
+ content=input("请输入具体内容:")
+ status=input("请输入重要等级:")
+
+
+ self.Supercal_dict1={"date":date,"item":item,"content":content,"status":status}
+
+ self.Supercal_list.append(self.Supercal_dict1)
+ print()
+ print("-----添加行事历信息界面-----")
+ print()
+ print("日期\t\t","事项\t\t","内容\t\t\t\t","等级\t\t")
+ for Supercal_dict_1 in self.Supercal_list:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t" %(Supercal_dict_1["date"],
+ Supercal_dict_1["item"],
+ Supercal_dict_1["content"],
+ Supercal_dict_1["status"],))
+ print()
+ print("录入成功!")
+ print()
+
+ #staticmethod
+ def show(self):
+ list1=self.Supercal_list
+ print()
+ print("-----行事历信息界面-----")
+ print()
+ print("日期\t\t","事项\t\t","内容\t\t\t\t","等级\t\t")
+ for list1 in self.Supercal_list:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t" %(list1["date"],
+ list1["item"],
+ list1["content"],
+ list1["status"],))
+ print()
+ print("查询行事历成功!")
+ print()
+ #print('行事历息如下:')
+ #print("Date:{}.Item:{}.Content:{}.Status".format(self.date,self.item,self.content,self.status))
+
+
+
+
+ #保存数据至文件中
+ def save_file(self):
+
+ f = open("Supercal2.txt", 'a', encoding='utf-8')
+ f.write(str(self.Supercal_list))
+ f.close()
+ print("数据保存至Supercal2.txt文件成功!")
+
+
+ #新增加数据至文件中
+ def add_file(self):
+ filename='Supercal2.txt'
+ with open(filename,'r+', encoding='utf-8') as f:
+ content=f.read()
+ if content:
+ f.write('\n'+str(self.Supercal_list))
+
+
+
+
+
+
+
+#list1.append(['aa', 'bb'])
+#print(list1)
+
+
+
+ #将数据读取至变量中
+ def read_file(self):
+
+ #if os.path.exists('Supercal2.txt'):
+ f = open('Supercal2.txt', 'r', encoding='utf-8')
+ ret = f.read()
+
+ self.Supercal_list=eval(ret)
+ f.close()
+ print("数据读取成功!")
+
+manager = Supercal()
+manager.menu()
+
+
+#第二版修改后
+
+import sys
+import time
+import os
+#reload(sys)
+#sys.setdefaultencoding('utf-8')
+
+
+class List():
+ #number=0
+
+ # def __init__(self):
+ # self.Supercal_list=[]
+ # self.Suoercal_dict={}
+
+ #定义行事属性,初始化方法
+ def __init__(self,date,item,content,status):
+ self.date = date
+ self.item = item
+ self.content=content
+ self.status= status
+ #Supercal.number=Supercal.number+1
+
+ # def __str__(self):
+ # return "Date:{}.Item:{}.Content:{}.Status".format(self.date,self.item,self.content,self.status)
+
+class Supercal():
+ def __init__(self):
+ self.Supercal_list=[]
+ self.Suoercal_dict={}
+
+ #定义行事历菜单
+ def menu(self):
+ print('欢迎使用超级行事历系统,希望你有缘为精神家园找到一片栖息地!\n')
+ while True:
+ #print('1.查询所有行事历\n2.添加行事历\n3.清除行事历\n4.保存行事历\n5.添加行事历\n6.退出系统\n')
+ print("-------------------------------")
+ print(" 行事历系统 V2.0" )
+ print(" ")
+ print(" 1:查询行事历" )
+ print(" 2:写入行事历" )
+ print(" 3:增加行事历" )
+ print(" 4:清除行事历" )
+ print(" 5:保存行事历" )
+ print(" 6:退出系统" )
+ print(" ")
+ print("-------------------------------")
+ choice = int(input('请输入您的选择:'))
+ if choice == 1:
+ #self.show()
+ self.read_file()
+ self.show()
+ elif choice == 2:
+ self.add()
+ elif choice == 3:
+ self.add_file()
+ elif choice == 4:
+ self.dell_file()
+ elif choice == 5:
+ self.save_file()
+ elif choice == 6:
+ print('感谢使用!愿你我成为好朋友,在茫茫人海里相遇。')
+ break
+
+ #添加行事历
+ def add(self):
+ date=input("请输入日期:")
+ item=input("请输入事项类别:")
+ content=input("请输入具体内容:")
+ status=input("请输入重要等级:")
+ self.Supercal_dict1={"date":date,"item":item,"content":content,"status":status}
+ self.Supercal_list.append(self.Supercal_dict1)
+ print()
+ print("-----添加行事历信息界面-----")
+ print()
+ print("日期\t\t","事项\t\t","内容\t\t\t\t","等级\t\t")
+ for Supercal_dict_1 in self.Supercal_list:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t" %(Supercal_dict_1["date"],
+ Supercal_dict_1["item"],
+ Supercal_dict_1["content"],
+ Supercal_dict_1["status"],))
+ print()
+ print("录入成功!")
+ print()
+
+ #staticmethod
+ def show(self):
+ list1=self.Supercal_list
+ print()
+ print("-----行事历信息界面-----")
+ print()
+ print("日期\t\t","事项\t\t","内容\t\t\t\t","等级\t\t")
+ for list1 in self.Supercal_list:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t" %(list1["date"],
+ list1["item"],
+ list1["content"],
+ list1["status"],))
+ print()
+ print("查询行事历成功!")
+ print()
+ #print('行事历息如下:')
+ #print("Date:{}.Item:{}.Content:{}.Status".format(self.date,self.item,self.content,self.status))
+
+
+ #保存数据至文件中
+ def save_file(self):
+ f = open("Supercal2.txt", 'w+', encoding='utf-8')
+ f.write(str(self.Supercal_list))
+ f.close()
+
+ #f = open("Supercal2.txt", 'a', encoding='utf-8')
+ # f.write(str(self.Supercal_list))
+ #f.close()
+ print("数据保存至Supercal2.txt文件成功!")
+
+
+ #新增加数据至文件中
+ def add_file(self):
+ self.add()
+ self.save_file()
+
+ def dell_file(self):
+ os.remove("Supercal2.txt")
+ print("File removed successfully")
+
+#list1.append(['aa', 'bb'])
+#print(list1)
+
+ #将数据读取至变量中
+ def read_file(self):
+
+ #if os.path.exists('Supercal2.txt'):
+ f = open('Supercal2.txt', 'r', encoding='utf-8')
+ ret = f.read()
+
+ self.Supercal_list=eval(ret)
+ f.close()
+ print("数据读取成功!")
+
+manager = Supercal()
+manager.menu()
+
+
+
+```
+## 炸金花游戏示例
+```
+
+
+import random
+def alex():
+ poke_types=['♥','♠','♣','♦']
+ poke_nums=[2,3,4,5,6,7,8,9,10,'J','Q','K','A']
+ poke_list=[]
+ for p_type in poke_types:
+ count=2
+ for p_num in poke_nums:
+ card=[f'{p_type}{p_num}',count]
+ poke_list.append(card)
+ count+=1
+ #print(poke_list)
+ return poke_list
+pokeList=alex()
+print(pokeList)
+
+#发牌
+players=['Man','忙里偷闲','龙哥','平安']
+def blackGirl(pl,pk,pn):
+ player_dic={}
+ for p_name in pl:
+ p_cards=random.sample(pk,pn)
+ for card in p_cards:
+ pk.remove(card)
+ player_dic[p_name]=p_cards
+ print(f"为玩家【{p_name}】生成了牌:{p_cards}")
+ return player_dic
+
+
+print('^'*125)
+playerDic=blackGirl(players,pokeList,3)
+#print(playerDic)
+
+#冒泡排序
+def sortList(dataList):
+ length=len(dataList)
+ for i in range(length):
+ for j in range(length-i-1):
+ if dataList[j][1]>dataList[j+1][1]:
+ dataList[j],dataList[j+1]=dataList[j+1],dataList[j]
+ return dataList
+
+
+#计算单牌得分
+def calculate_single(p_cards,score):
+ #初始化得分
+ score=0
+ p_cards=sortList(p_cards)
+#计算
+ weight_val=[0.1,1,10]
+ count=0
+ for card in p_cards:
+ score+=card[1]*weight_val[count]
+ count+=1
+ print(f"计算单牌的结果是:{score}")
+ return score
+print('&'*125)
+
+
+#计算对子
+def calculate_pair(p_cards,score):
+ p_cards=sortList(p_cards)
+ card_val=[i[1] for i in p_cards]
+ if len(set(card_val))==2:
+ if card_val[0]==card_val[1]:
+ score=(card_val[0]+card_val[1])*50+card_val[2] #aab
+ else: #abb
+ score=(card_val[1]+card_val[2])*50+card_val[0]
+ print(f"计算对子的结果是:{score}")
+ return score
+
+#顺子
+def calculate_straight(p_cards,score):
+
+ p_cards=sortList(p_cards)
+ card_val=[i[1] for i in p_cards]
+ a,b,c = card_val
+ if b-a == 1 and c-b == 1:
+ score*=100
+ print(f"计算顺子的结果是:{score}")
+ return score
+
+
+#同花
+def calculate_same_color(p_cards,score):
+
+ color_val = [i[0] for i in p_cards]
+ if len(set(color_val)) == 1:
+ score*=1000
+ print(f"计算同花的结果是:{score}")
+ return score
+
+
+#同花顺
+def calculate_same_color_straight(p_cards,score):
+
+ #同花
+ color_val = [i[0] for i in p_cards]
+ if len(set(color_val)) == 1:
+ #顺子
+ p_cards=sortList(p_cards)
+ card_val=[i[1] for i in p_cards]
+ a,b,c = card_val
+ if b-a == 1 and c-b == 1:
+ score*=10000
+ print(f"计算同花顺的结果是:{score}")
+ return score
+
+#豹子
+def calculate_leopard(p_cards,score):
+ card_val = {i[1] for i in p_cards}
+ if len(card_val) == 1:
+ score*=100000
+ print(f"计算豹子结果是:{score}")
+ return score
+
+## 比对逻辑
+calc_fun_orders = [
+ calculate_single,
+ calculate_pair,
+ calculate_straight,
+ calculate_same_color,
+ calculate_same_color_straight,
+ calculate_leopard
+]
+
+player_score = [] # 需要提前定义列表
+for p_name, p_cards in playerDic.items():
+ print(f"开始计算玩家【{p_name}】的牌:{p_cards}")
+ score = 0
+ for calc_func in calc_fun_orders:
+ score = calc_func(p_cards,score) # 移除不必要的score参数
+ player_score.append([p_name, score]) # 添加计算结果到列表中
+
+winner = sortList(player_score)[-1]
+print(f"恭喜最后获胜的玩家是:【{winner[0]}】,得分是:{winner[1]}")
+
+
+
+#行事历更新数据库版本
+import random
+import shelve
+import datetime
+import time
+import itertools
+
+# 定义一个生成唯一序列号的函数
+def generate_sequence_number():
+ return random.randint(1, 1000)
+
+# 定义录入功能函数
+def insert_data():
+ with shelve.open('my_supercal') as db:
+ dateup=[]
+
+ DATE_FORMAT = "%Y-%m-%d"
+ supercal_name = input("请输入行事历名称:")
+ if supercal_name == 'q':
+ return
+ supercal_date = input("请输入日期(默认为当前日期):") or time.strftime(
+ "%Y-%m-%d", time.localtime())
+
+ # 生成唯一的序列号
+ sequence_number = str(generate_sequence_number())
+
+ # 将数据存储在字典中
+ supercal_content = input("请输入行事内容")
+ supercal_grade = input("等级默认 AAA ")
+ if supercal_grade=="":
+ supercal_grade=='AAA'
+
+ date= {'sequence_number': sequence_number, 'date': supercal_date, 'supercal_name': supercal_name,'supercal_content': supercal_content, 'supercal_grade': supercal_grade}
+
+ dateup.append(date)
+ #print(dateup)
+ if 'cal' in db:
+ db['cal']+=dateup
+ else:
+ db['cal']=dateup
+ db.close
+
+# 定义查询功能函数
+def query_data(sequence_number):
+ with shelve.open('my_supercal') as db:
+ mydate = db['cal']
+ print("序号\t\t", "日期\t\t", "事项\t\t", "内容\t\t\t\t", "等级\t\t")
+ for i, item in enumerate(mydate):
+ if item['sequence_number']==str(sequence_number):
+ values=item.values()
+ for value in values:
+ print(value,end=' ')
+
+ #else:
+ # print("未找到相关记录")
+ db.close
+
+# 定义删除功能函数
+def delete_data(sequence_number):
+ with shelve.open('my_supercal') as db:
+ mydate = db['cal']
+ for i, item in enumerate(mydate):
+ if item['sequence_number']==str(sequence_number):
+ mydate.pop(i)
+ db['cal']=mydate
+ #print(mydate)
+ db.close
+ print(f"已成功删除序列号为{sequence_number}的行事历记录。")
+
+
+#清空所有数据
+def delete_all_date():
+ with shelve.open('my_supercal') as db:
+ #获取要清空的表名
+ table_name = 'cal'
+ #删除表中的所有数据
+ if table_name in db:
+ del db[table_name]
+ print("File Clear out successfully")
+
+# 关闭shelve文件
+ db.close()
+
+
+
+# 定义显示所有数据的函数
+def show_all_data():
+ with shelve.open('my_supercal') as db:
+ list1= db.get('cal', [])
+ #print(list1)
+ print()
+ print("-----行事历信息界面-----")
+ print()
+ print("序号\t\t", "日期\t\t", "事项\t\t", "内容\t\t\t\t", "等级\t\t")
+ for item in list1:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t\t%s\t\t" % (
+ item["sequence_number"], item["date"], item["supercal_name"], item["supercal_content"], item["supercal_grade"]))
+ db.close
+
+# 定义菜单函数
+def menu():
+ print("欢迎使用行事历系统,希望你有缘为精神家园找到一片栖息地!")
+ while True:
+ print("-------------------------------")
+ print(" 行事历系统 V3.0")
+ print(" ")
+ print(" 1. 写入行事历 ")
+ print(" 2. 查询行事历 ")
+ print(" 3. 删除行事历 ")
+ print(" 4. 展示所Cal ")
+ print(" 5. 清空行事历 ")
+ print(" 6. 退出 系统 ")
+ choice = int(input("请输入你的选择:"))
+ if choice == 1:
+ insert_data()
+ elif choice == 2:
+ query_data(int(input("请输入要查询的行事历序列号:")))
+ elif choice == 3:
+ delete_data(int(input("请输入要删除的行事历序列号:")))
+ elif choice == 4:
+ show_all_data()
+ elif choice == 5:
+ delete_all_date()
+ elif hoice == 6:
+ print("感谢使用!")
+ break
+# 主程序
+while True:
+ menu()
+
+
+
+
+```
+## 线程池及装饰器案例
+```
+
+
+#线程池应用例子:
+import time
+from concurrent.futures import ThreadPoolExecutor
+
+#线程池map()函数案例
+def func(name):
+ for i in range(100):
+ print(name,i)
+
+if __name__=='__main__':
+ with ThreadPoolExecutor(10) as t:
+ for i in range(10000):
+ results=t.map(func,['张三','李四','王二麻子','傻蛋','不嘻嘻熬过'])
+ for result in results:
+ print(result)
+
+
+
+##线程池submit()函数案例
+def func(name):
+ for i in range(100):
+ print(name,i)
+
+
+if __name__=='__main__':
+ with ThreadPoolExecutor(10) as t:
+ for i in range(10000):
+ t.submit(func,f'任务{i}')
+
+
+
+
+
+ #@staticmethod装饰器传递多参数案例
+class Mathtil:
+ @staticmethod
+ def add(x,y):
+ return x*y
+
+nnunb11=Mathtil.add(45,8)
+print(nnunb11)
+
+
+
+# @staticmethod装饰器传递字典数据案例:
+class supper:
+ @staticmethod
+ def add(datect:dict):
+ return datect
+
+
+def insert_data():
+ updates={}
+ number=input("请输入序号:")
+ date=input("请输入日期:")
+ contents=input("请输入内容:")
+ grade=input("请输入级别:")
+ dates={'number':number,'date': date,'contents': contents,'grade': grade}
+ updates.update(dates)
+ return updates
+
+test11=insert_data()
+csxg=supper.add(test11)
+
+print("序号\t\t", "日期\t\t", "内容\t\t\t\t", "等级\t\t")
+for key,value in test11.items():
+ print(f'{value}',end=' ')
+
+
+
+
+
+```
+## 实例化Dash应用
+```
+
+#实例化Dash应用:
+import dash
+from dash import html
+import feffery_antd_components as fac
+from dash.dependencies import Input, Output
+
+# 实例化Dash应用对象
+app = dash.Dash(__name__)
+
+# 添加初始化页面内容
+app.layout = html.Div(
+ [
+ fac.AntdTitle('你好!Dash!',level=3),
+ fac.AntdText('Dash版本%s' % dash.__version__),
+ fac.AntdDivider(),
+ fac.AntdText('fac版本%s' % fac.__version__)
+
+ ]
+)
+
+
+if __name__ == '__main__':
+ app.run(debug=False)
+
+
+'''
+https://fac.feffery.tech/
+环境搭建
+在基于dash和fac进行应用开发之前,我们需要先搭建好所需的环境,推荐使用conda作为环境管理工具,这里以Python 3.7版本为例,在终端执行下列命令进行相关环境的创建及激活:
+注:由于国内pypi相关镜像的更新延迟,通过其进行相关库的安装,版本可能滞后于原始pypi中的最新版本
+默认方式
+国内使用镜像
+conda create -n dash-devs python=3.7 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+conda activate dash-devs
+完成环境的创建及激活后,我们在对应环境中直接通过pip进行相关基础依赖库的安装即可:
+默认方式
+国内使用镜像
+pip install dash feffery-antd-components -U -i https://pypi.tuna.tsinghua.edu.cn/simple
+或
+conda create -n pytest-devs python=3.8 -c https://mirrors.aliyun.com/anaconda/pkgs/main/ -y
+
+'''
+
+
+```
+## 扫描仪扫描自动点击鼠标脚本
+```
+
+#扫描仪扫描自动点击鼠标脚本
+import pyautogui
+import time
+
+def click(x, y, interval):
+ # 点击指定位置的鼠标
+ pyautogui.click(x, y)
+
+ # 等待指定的时间间隔
+ time.sleep(interval)
+
+# 定义一个包含点击位置和时间间隔的列表
+clicks = [(2425, 957, 1),(2167, 107, 1), (2769, 1257, 1)]
+
+# 遍历列表,依次点击每个位置
+for x, y, interval in clicks:
+ click(x, y, interval)
+'''
+#检查鼠标位置函数备用
+def wait_and_detect_mouse_position():
+ # 等待 2 秒
+ time.sleep(4)
+
+ # 检测鼠标位置
+ mouse_position = pyautogui.position()
+
+ return mouse_position
+
+# 调用函数
+mouse_position = wait_and_detect_mouse_position()
+print("鼠标位置:", mouse_position)
+
+'''
+
+```
diff --git a/Anytype.20240802.082116.32/python.md b/Anytype.20240802.082116.32/python.md
new file mode 100644
index 0000000..d1008ab
--- /dev/null
+++ b/Anytype.20240802.082116.32/python.md
@@ -0,0 +1 @@
+# python
diff --git a/Anytype.20240802.082116.32/python_20code.md b/Anytype.20240802.082116.32/python_20code.md
new file mode 100644
index 0000000..165dad4
--- /dev/null
+++ b/Anytype.20240802.082116.32/python_20code.md
@@ -0,0 +1,539 @@
+# python\_20code
+# python单行代码及库
+## 20 个非常有用的 Python 单行代码
+```
+
+编辑丨数据STUDIO
+来源丨https://python.plainenglish.io/20-extremely-useful-python-one-liners-you-must-know
+
+大家好,我是菜鸟哥!
+在本文中,给大家分享20 个 Python 一行代码,你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间,并使你的代码看起来更干净且易于阅读。
+
+1 一行 For 循环
+for 循环是一个多行语句,但是在 Python 中,我们可以使用列表推导式方法在一行中编写 for 循环。以过滤小于250的值为例,查看下面的代码示例。
+
+## For循环在一行
+mylist = [200, 300, 400, 500]
+#正常方式
+result = []
+for x in mylist:
+ if x > 250:
+ result.append(x)
+print(result) # [300, 400, 500]
+## 一行代码方式
+result = [x for x in mylist if x > 250]
+print(result) # [300, 400, 500]
+2 一行 While 循环
+这个 One-Liner 片段将向你展示如何在一行中使用 While 循环代码,我已经展示了两种方法。
+
+## 方法 1 Single Statement
+while True: print(1) #infinite 1
+#方法 2 多语句
+x = 0
+while x < 5: print(x); x= x + 1 # 0 1 2 3 4 5
+3 一行 IF Else 语句
+好吧,要在一行中编写 IF Else 语句,我们将使用三元运算符。三元的语法是“[on true] if [expression] else [on false]”。
+
+我在下面的示例代码中展示了 3 个示例,以使你清楚地了解如何将三元运算符用于一行 if-else 语句。要使用 Elif 语句,我们必须使用多个三元运算符。
+
+#if Else 在一行中
+#Example 1 if else
+print("Yes") if 8 > 9 else print("No") # No
+#Example 2 if elif else
+E = 2
+print("High") if E == 5 else print("数据STUDIO") if E == 2 else
+print("Low") # 数据STUDIO
+
+#Example 3 only if
+if 3 > 2: print("Exactly") # Exactly
+4 一行合并字典
+这个 单行代码段将向你展示如何使用一行代码将两个字典合并为一个。下面我展示了两种合并字典的方法。
+
+## 在一行中合并字典
+d1 = { 'A': 1, 'B': 2 }
+d2 = { 'C': 3, 'D': 4 }
+#方法 1
+d1.update(d2)
+print(d1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
+#方法 2
+d3 = {**d1, **d2}
+print(d3) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
+5 一行函数
+我们有两种方法可以在一行中编写函数,在第一种方法中,我们将使用与三元运算符或单行循环方法相同的函数定义。
+
+第二种方法是用 lambda 定义函数。查看下面的示例代码以获得更清晰的理解。
+
+#函数在一行中
+#方法一
+def fun(x): return True if x % 2 == 0 else False
+print(fun(2)) # False
+#方法2
+fun = lambda x : x % 2 == 0
+print(fun(2)) # True
+print(fun(3)) # False
+6 一行递归
+这个单行代码片段将展示如何在一行中使用递归。我们将使用一行函数定义和一行 if-else 语句。下面是查找斐波那契数的示例。
+
+## 单行递归
+#Fibonaci 单行递归示例
+def Fib(x): return 1 if x in {0, 1} else Fib(x-1) + Fib(x-2)
+print(Fib(5)) # 8
+print(Fib(15)) # 987
+7 一行数组过滤
+Python 列表可以通过使用列表推导方法在一行代码中进行过滤。以过滤偶数列表为例。
+
+## 一行中的数组过滤
+mylist = [2, 3, 5, 8, 9, 12, 13, 15]
+#正常方式
+result = []
+for x in mylist:
+ if x % 2 == 0:
+ result.append(x)
+print(result) # [2, 8, 12]
+## 单线方式
+result = [x for x in mylist if x % 2 == 0]
+print(result) # [2, 8, 12]
+8 一行异常处理
+我们使用异常处理来处理 Python 中的运行时错误。你知道我们可以在一行中编写这个 Try except 语句吗?通过使用 exec() 语句,我们可以做到这一点。
+
+## 一行异常处理
+#原始方式
+try:
+ print(x)
+except:
+ print("Error")
+#单行方式
+exec('try:print(x) \nexcept:print("Error")') # 错误
+9 一行列表转字典
+我们可以使用 Python enumerate() 函数将 List 转换为一行字典。在enumerate() 中传递列表并使用dict() 将最终输出转换为字典格式。
+
+## 字典在一行
+mydict = ["John", "Peter", "Mathew", "Tom"]
+mydict = dict(enumerate(mydict))
+print(mydict) # {0: 'John', 1: 'Peter', 2: 'Mathew', 3: 'Tom'}
+10 一行多变量
+Python 允许在一行中进行多个变量赋值。下面的示例代码将向你展示如何做到这一点。
+
+## 多行变量
+### 正常方式
+x = 5
+y = 7
+z = 10
+print(x , y, z) # 5 7 10
+#单行方式
+a, b, c = 5, 7, 10
+print(a, b, c) # 5 7 10
+11 一行交换值
+交换是编程中一项有趣的任务,并且总是需要第三个变量名称 temp 来保存交换值。这个单行代码段将向你展示如何在没有任何临时变量的情况下交换一行中的值。
+
+#换成一行
+#正常方式
+v1 = 100
+v2 = 200
+temp = v1
+v1 = v2
+v2 = temp
+print(v1, v2) # 200 100
+### 单行交换
+v1, v2 = v2, v1
+print(v1, v2) # 200 100
+12 一行排序
+排序是编程中的一个普遍问题,Python 有许多内置的方法来解决这个排序问题。下面的代码示例将展示如何在一行中进行排序。
+
+# 在一行中排序
+mylist = [32, 22, 11, 4, 6, 8, 12]
+# 方法 1
+mylist.sort()
+print(mylist) # # [4, 6, 8, 11, 12, 22, 32]
+print(sorted(mylist)) # [4, 6, 8, 11, 12, 22, 32]
+13 一行读取文件
+不使用语句或正常读取方法,也可以正确读取一行文件。
+
+#一行读取文件
+#正常方式
+with open("data.txt", "r") as file:
+ data = file.readline()
+ print(data) # Hello world
+#单行方式
+data = [line.strip() for line in open("data.txt","r")]
+print(data) # ['hello world', 'Hello Python']
+14 一行类
+上课总是多线工作。但是在 Python 中,有一些方法可以在一行代码中使用类特性。
+
+# 一行中的类
+#普通方式
+class Emp:
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+ emp1 = Emp("云朵君", 22)
+print(emp1.name, emp1.age) # 云朵君 22
+## 单行方式
+#方法 1 带有动态 Artibutes 的 Lambda
+
+Emp = lambda:None; Emp.name = "云朵君"; Emp.age = 22
+print(Emp.name, Emp.age) # 云朵君 22
+
+## 方法 2
+from collections import namedtuple
+Emp = namedtuple('Emp', ["name", "age"]) ("云朵君", 22)
+print(Emp.name, Emp.age) # 云朵君 22
+15 一行分号
+一行代码片段中的分号将向你展示如何使用分号在一行中编写多行代码。
+
+# 一行分号
+# 例 1
+a = "Python"; b = "编程"; c = "语言"; print(a, b, c)
+# 输出
+# Python 编程语言
+16 一行打印
+这不是很重要的片段,但有时当你不需要使用循环来执行任务时它很有用。
+
+# 一行打印
+## 正常方式
+for x in range(1, 5):
+ print(x) # 1 2 3 4
+## 单行方式
+print(*range(1, 5)) # 1 2 3 4
+print(*range(1, 6)) # 1 2 3 4 5
+17 一行map函数
+Map 函数是适用的高阶函数。这将函数应用于每个元素。下面是我们如何在一行代码中使用 map 函数的示例。
+
+# 在一行中map
+print(list(map(lambda a: a + 2, [5, 6, 7, 8, 9, 10])))
+# 输出
+# [7, 8, 9, 10, 11, 12]
+18 删除列表第一行中的 Mul 元素
+你现在可以使用 del 方法在一行代码中删除 List 中的多个元素,而无需进行任何修改。
+
+# 删除一行中的Mul元素
+mylist = [100, 200, 300, 400, 500]
+del mylist[1::2]
+print(mylist) # [100, 300, 500]
+19 一行打印图案
+现在你不再需要使用for循环来打印相同的图案。你可以使用 print 语句和星号 (*) 在一行代码中执行相同的操作。
+
+# 在一行中打印图案#
+# 正常方式
+for x in range(3):
+ print('😀')
+# 输出
+# 😀 😀 😀
+#单行方式
+print('😀' * 3) # 😀 😀 😀
+print('😀' * 2) # 😀 😀
+print('😀' * 1) # 😀
+20 一行查找质数
+此代码段将向你展示如何编写单行代码来查找范围内的素数。
+
+# 查找质数
+print(list(filter(lambda a: all(a % b != 0 for b in range(2, a)),
+ range(2,20))))
+# 输出
+# [2, 3, 5, 7, 11, 13, 17, 19]
+
+
+万水千山总是情,点个 👍 行不行。
+
+
+
+推荐阅读:
+
+入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
+
+
+
+干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
+
+
+
+趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
+
+
+
+AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
+
+
+
+小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
+
+
+
+年度爆款文案
+
+1).卧槽!Pdf转Word用Python轻松搞定!
+2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
+3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
+4).80行代码!用Python做一个哆来A梦分身
+5).你必须掌握的20个python代码,短小精悍,用处无穷
+6).30个Python奇淫技巧集
+7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
+8).再见Python!我要学Go了!2500字深度分析!
+9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动
+
+
+
+```
+## python模块、包和库
+```
+
+# 一文带你分清python模块、包和库
+Python宝典 2023-02-24 09:00 发表于安徽
+一、模块
+
+Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
+
+模块能定义函数,类和变量,模块也能包含可执行的代码。
+
+1.1 导入模块
+1.1.1 导入模块的方式
+
+import 模块名
+from 模块名 import 功能名
+from 模块名 import *
+import 模块名 as 别名
+from 模块名 import 功能名 as 别名
+1.2 导入方式详解
+import 语法:
+
+## 1. 导⼊模块
+import 模块名
+import 模块名1, 模块名2...
+
+## 2. 调⽤功能
+模块名.功能名()
+体验:
+
+import math
+print(math.sqrt(9)) # 3.0
+from..import..
+
+语法:
+
+from 模块名 import 功能1, 功能2, 功能3...
+体验:
+
+from math import sqrt
+print(sqrt(9))
+from .. import *
+语法
+
+from 模块名 import *
+体验:
+
+from math import *
+print(sqrt(9))
+as定义别名
+
+语法
+
+## 模块定义别名
+import 模块名 as 别名
+
+## 功能定义别名
+from 模块名 import 功能 as 别名
+体验
+
+## 模块别名
+import time as tt
+
+tt.sleep(2)
+print('hello')
+
+## 功能别名
+from time import sleep as sl
+sl(2)
+print('hello')
+1.2 制作模块
+在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说定义模块名必须要符合标识符命名规则。
+
+1.2.1 定义模块
+
+新建一个Python文件,命名为 my_module1.py ,并定义 testA 函数。
+
+def testA(a, b):
+ print(a + b)
+1.2.2 测试模块
+
+在实际开发中,当一个开发员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发员会在py文件中添加一些测试信息.,例如,在 my_module1.py 文件中添加测试代码。
+
+def testA(a, b):
+ print(a + b)
+
+testA(1, 1) 12345
+此时,无论是当前文件,还是其他已经导入了该模块的⽂件,在运行的时候都会自动执行 testA 函数的调用。
+
+解决办法如下:
+
+def testA(a, b):
+ print(a + b)
+## 只在当前⽂件中调⽤该函数,其他导⼊的⽂件内不符合该条件,则不执⾏testA函数调⽤
+if __name__ == '__main__':
+ testA(1, 1)
+1.2.3 调用模块
+
+import my_module1
+my_module1.testA(1, 1)
+1.2.4 注意事项
+
+如果使用 from .. import .. 或 from .. import * 导入多个模块的时候,且模块内有同名功能。当调 ⽤这个同名功能的时候,调用到的是后导入的模块的功能。
+
+体验:
+
+## 模块1代码
+def my_test(a, b):
+ print(a + b)
+## 模块2代码
+def my_test(a, b):
+ print(a - b)
+
+## 导⼊模块和调⽤功能代码
+from my_module1 import my_test
+from my_module2 import my_test
+
+## my_test函数是模块2中的函数
+my_test(1, 1)
+1.3 模块的定位顺序
+当导入一个模块,Python解析器对模块位置的搜索顺序是:
+
+1. 当前目录
+
+2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
+
+3. 如果都找不到,Python会查看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
+
+模块搜索路径存储在system模块的sys.path变量中。变量包含当前目录,PYTHONPATH和由安装过 程决定的默认目录。
+
+注意:⾃⼰的⽂件名不要和已有模块名重复,否则导致模块功能用法使用,使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功 能。
+1.4 __all__
+
+如果一个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。
+
+my_module1模块代码:
+
+__all__ = ['testA']
+
+def testA():
+ print('testA')
+
+
+def testB():
+ print('testB')
+导入模块的文件代码:
+
+from my_module1 import *
+testA()
+testB()
+图片
+
+
+二、库
+严格来说,Python中没有库(library)的概念,模块(module)和包(package)才是Python语法中有的概念。这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块的集合,只是一个通俗的说法。平时说的库既可以是一个模块,也可以是一个包。
+
+包和模块之间的关系,如下图:
+
+图片
+
+一个包里面可以包含很多的模块。模块是一个包含有组织的代码片段,一个.py文件对应一个模块,文件名就是模块名(去除掉后缀.py)。
+
+
+
+三、包
+包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字 为 __init__.py 文件,那么这个文件夹就称之为包。
+
+3.1 制作包
+[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。
+
+注意:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入。
+
+3.1.1 快速体验
+
+1. 新建包 mypackage
+
+2. 新建包内模块:my_module1 和 my_module2
+
+3. 模块内代码如下
+
+## my_module1
+print(1)
+
+
+def info_print1():
+ print('my_module1')
+
+
+## my_module2
+print(2)
+
+
+def info_print2():
+ print('my_module2')
+3.2 导入包
+3.2.1 方法一:
+
+import 包名.模块名
+
+包名.模块名.⽬标
+3.2.2 快速体验
+
+import my_package.my_module1
+
+my_package.my_module1.info_print1()
+3.2.3 方法二
+
+注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
+
+from 包名 import *
+模块名.⽬标
+3.2.4 快速体验
+
+from my_package import *
+my_module1.info_print1()
+
+
+
+ # pip install Pillow 放大图片先安装这个库
+
+# 无损放大JPG源代码:
+
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+import cv2
+from PIL import Image
+import time
+import shutil
+import os
+
+
+
+DATA = input('请输入要放大的图片名称(JPG文件名称必须使用数字或英文):')
+Multiple = int(input('请输入要放大的图片的倍数(必须大于1):'))
+DATA_file = input('请输入要图片要保存的图片名称:')
+print('开始放大....')
+os.mkdir('DATA') # 新建
+#读取图片 要放大的图片
+src = cv2.imread(DATA)
+# 用来读取原图片的像素RGB颜色值 先读取图片文件
+IMG = Image.open(DATA)
+#获取图像大小 获取图像的大写XY也是颠倒过来的
+y, x = src.shape[:2]
+
+# 临时装饰器
+List_elements = []
+for YY in range(y): # 获取图片的Y轴有多少像素 也相当于长度
+ '''意思:循环读取图片的每一个像素点的RGB值 并以列表的形式存储起来'''
+ if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
+ List_elements = []
+ for XX in range(x): # 获取图片的X轴有多少像素 也相当于宽度
+ # IMG.getpixel((a, aa)) 用来获取图片某位置的RGB像素值 提示:获取的值 对应 BGR 是RGB反过来的
+ List_elements = List_elements + [list(IMG.getpixel((XX, YY)))] # 读取某坐标的像素值并将元组为列表进行存储
+ NAME = open(f"DATA/{YY}", 'w') # 存储
+ NAME.write(str(List_elements)) # 将列表转为字符串保存
+ NAME.close()
+
+time.sleep(2) # 延迟一下 ,防止文件加载过慢读取错误
+
+# 图像缩放 要将原图进行翻倍放大 然后在原图的基础上进行绘图
+result = cv2.resize(src, (x*Mult
+
+```
diff --git a/Anytype.20240802.082116.32/python_20code_i.md b/Anytype.20240802.082116.32/python_20code_i.md
new file mode 100644
index 0000000..4321528
--- /dev/null
+++ b/Anytype.20240802.082116.32/python_20code_i.md
@@ -0,0 +1,539 @@
+# python\_20code
+##
+## 20 个非常有用的 Python 单行代码及库
+```
+
+编辑丨数据STUDIO
+来源丨https://python.plainenglish.io/20-extremely-useful-python-one-liners-you-must-know
+
+大家好,我是菜鸟哥!
+在本文中,给大家分享20 个 Python 一行代码,你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间,并使你的代码看起来更干净且易于阅读。
+
+1 一行 For 循环
+for 循环是一个多行语句,但是在 Python 中,我们可以使用列表推导式方法在一行中编写 for 循环。以过滤小于250的值为例,查看下面的代码示例。
+
+## For循环在一行
+mylist = [200, 300, 400, 500]
+#正常方式
+result = []
+for x in mylist:
+ if x > 250:
+ result.append(x)
+print(result) # [300, 400, 500]
+## 一行代码方式
+result = [x for x in mylist if x > 250]
+print(result) # [300, 400, 500]
+2 一行 While 循环
+这个 One-Liner 片段将向你展示如何在一行中使用 While 循环代码,我已经展示了两种方法。
+
+## 方法 1 Single Statement
+while True: print(1) #infinite 1
+#方法 2 多语句
+x = 0
+while x < 5: print(x); x= x + 1 # 0 1 2 3 4 5
+3 一行 IF Else 语句
+好吧,要在一行中编写 IF Else 语句,我们将使用三元运算符。三元的语法是“[on true] if [expression] else [on false]”。
+
+我在下面的示例代码中展示了 3 个示例,以使你清楚地了解如何将三元运算符用于一行 if-else 语句。要使用 Elif 语句,我们必须使用多个三元运算符。
+
+#if Else 在一行中
+#Example 1 if else
+print("Yes") if 8 > 9 else print("No") # No
+#Example 2 if elif else
+E = 2
+print("High") if E == 5 else print("数据STUDIO") if E == 2 else
+print("Low") # 数据STUDIO
+
+#Example 3 only if
+if 3 > 2: print("Exactly") # Exactly
+4 一行合并字典
+这个 单行代码段将向你展示如何使用一行代码将两个字典合并为一个。下面我展示了两种合并字典的方法。
+
+## 在一行中合并字典
+d1 = { 'A': 1, 'B': 2 }
+d2 = { 'C': 3, 'D': 4 }
+#方法 1
+d1.update(d2)
+print(d1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
+#方法 2
+d3 = {**d1, **d2}
+print(d3) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
+5 一行函数
+我们有两种方法可以在一行中编写函数,在第一种方法中,我们将使用与三元运算符或单行循环方法相同的函数定义。
+
+第二种方法是用 lambda 定义函数。查看下面的示例代码以获得更清晰的理解。
+
+#函数在一行中
+#方法一
+def fun(x): return True if x % 2 == 0 else False
+print(fun(2)) # False
+#方法2
+fun = lambda x : x % 2 == 0
+print(fun(2)) # True
+print(fun(3)) # False
+6 一行递归
+这个单行代码片段将展示如何在一行中使用递归。我们将使用一行函数定义和一行 if-else 语句。下面是查找斐波那契数的示例。
+
+## 单行递归
+#Fibonaci 单行递归示例
+def Fib(x): return 1 if x in {0, 1} else Fib(x-1) + Fib(x-2)
+print(Fib(5)) # 8
+print(Fib(15)) # 987
+7 一行数组过滤
+Python 列表可以通过使用列表推导方法在一行代码中进行过滤。以过滤偶数列表为例。
+
+## 一行中的数组过滤
+mylist = [2, 3, 5, 8, 9, 12, 13, 15]
+#正常方式
+result = []
+for x in mylist:
+ if x % 2 == 0:
+ result.append(x)
+print(result) # [2, 8, 12]
+## 单线方式
+result = [x for x in mylist if x % 2 == 0]
+print(result) # [2, 8, 12]
+8 一行异常处理
+我们使用异常处理来处理 Python 中的运行时错误。你知道我们可以在一行中编写这个 Try except 语句吗?通过使用 exec() 语句,我们可以做到这一点。
+
+## 一行异常处理
+#原始方式
+try:
+ print(x)
+except:
+ print("Error")
+#单行方式
+exec('try:print(x) \nexcept:print("Error")') # 错误
+9 一行列表转字典
+我们可以使用 Python enumerate() 函数将 List 转换为一行字典。在enumerate() 中传递列表并使用dict() 将最终输出转换为字典格式。
+
+## 字典在一行
+mydict = ["John", "Peter", "Mathew", "Tom"]
+mydict = dict(enumerate(mydict))
+print(mydict) # {0: 'John', 1: 'Peter', 2: 'Mathew', 3: 'Tom'}
+10 一行多变量
+Python 允许在一行中进行多个变量赋值。下面的示例代码将向你展示如何做到这一点。
+
+## 多行变量
+### 正常方式
+x = 5
+y = 7
+z = 10
+print(x , y, z) # 5 7 10
+#单行方式
+a, b, c = 5, 7, 10
+print(a, b, c) # 5 7 10
+11 一行交换值
+交换是编程中一项有趣的任务,并且总是需要第三个变量名称 temp 来保存交换值。这个单行代码段将向你展示如何在没有任何临时变量的情况下交换一行中的值。
+
+#换成一行
+#正常方式
+v1 = 100
+v2 = 200
+temp = v1
+v1 = v2
+v2 = temp
+print(v1, v2) # 200 100
+### 单行交换
+v1, v2 = v2, v1
+print(v1, v2) # 200 100
+12 一行排序
+排序是编程中的一个普遍问题,Python 有许多内置的方法来解决这个排序问题。下面的代码示例将展示如何在一行中进行排序。
+
+# 在一行中排序
+mylist = [32, 22, 11, 4, 6, 8, 12]
+# 方法 1
+mylist.sort()
+print(mylist) # # [4, 6, 8, 11, 12, 22, 32]
+print(sorted(mylist)) # [4, 6, 8, 11, 12, 22, 32]
+13 一行读取文件
+不使用语句或正常读取方法,也可以正确读取一行文件。
+
+#一行读取文件
+#正常方式
+with open("data.txt", "r") as file:
+ data = file.readline()
+ print(data) # Hello world
+#单行方式
+data = [line.strip() for line in open("data.txt","r")]
+print(data) # ['hello world', 'Hello Python']
+14 一行类
+上课总是多线工作。但是在 Python 中,有一些方法可以在一行代码中使用类特性。
+
+# 一行中的类
+#普通方式
+class Emp:
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+ emp1 = Emp("云朵君", 22)
+print(emp1.name, emp1.age) # 云朵君 22
+## 单行方式
+#方法 1 带有动态 Artibutes 的 Lambda
+
+Emp = lambda:None; Emp.name = "云朵君"; Emp.age = 22
+print(Emp.name, Emp.age) # 云朵君 22
+
+## 方法 2
+from collections import namedtuple
+Emp = namedtuple('Emp', ["name", "age"]) ("云朵君", 22)
+print(Emp.name, Emp.age) # 云朵君 22
+15 一行分号
+一行代码片段中的分号将向你展示如何使用分号在一行中编写多行代码。
+
+# 一行分号
+# 例 1
+a = "Python"; b = "编程"; c = "语言"; print(a, b, c)
+# 输出
+# Python 编程语言
+16 一行打印
+这不是很重要的片段,但有时当你不需要使用循环来执行任务时它很有用。
+
+# 一行打印
+## 正常方式
+for x in range(1, 5):
+ print(x) # 1 2 3 4
+## 单行方式
+print(*range(1, 5)) # 1 2 3 4
+print(*range(1, 6)) # 1 2 3 4 5
+17 一行map函数
+Map 函数是适用的高阶函数。这将函数应用于每个元素。下面是我们如何在一行代码中使用 map 函数的示例。
+
+# 在一行中map
+print(list(map(lambda a: a + 2, [5, 6, 7, 8, 9, 10])))
+# 输出
+# [7, 8, 9, 10, 11, 12]
+18 删除列表第一行中的 Mul 元素
+你现在可以使用 del 方法在一行代码中删除 List 中的多个元素,而无需进行任何修改。
+
+# 删除一行中的Mul元素
+mylist = [100, 200, 300, 400, 500]
+del mylist[1::2]
+print(mylist) # [100, 300, 500]
+19 一行打印图案
+现在你不再需要使用for循环来打印相同的图案。你可以使用 print 语句和星号 (*) 在一行代码中执行相同的操作。
+
+# 在一行中打印图案#
+# 正常方式
+for x in range(3):
+ print('😀')
+# 输出
+# 😀 😀 😀
+#单行方式
+print('😀' * 3) # 😀 😀 😀
+print('😀' * 2) # 😀 😀
+print('😀' * 1) # 😀
+20 一行查找质数
+此代码段将向你展示如何编写单行代码来查找范围内的素数。
+
+# 查找质数
+print(list(filter(lambda a: all(a % b != 0 for b in range(2, a)),
+ range(2,20))))
+# 输出
+# [2, 3, 5, 7, 11, 13, 17, 19]
+
+
+万水千山总是情,点个 👍 行不行。
+
+
+
+推荐阅读:
+
+入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
+
+
+
+干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
+
+
+
+趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
+
+
+
+AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
+
+
+
+小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
+
+
+
+年度爆款文案
+
+1).卧槽!Pdf转Word用Python轻松搞定!
+2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
+3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
+4).80行代码!用Python做一个哆来A梦分身
+5).你必须掌握的20个python代码,短小精悍,用处无穷
+6).30个Python奇淫技巧集
+7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
+8).再见Python!我要学Go了!2500字深度分析!
+9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动
+
+
+
+```
+## python模块、包和库
+```
+
+# 一文带你分清python模块、包和库
+Python宝典 2023-02-24 09:00 发表于安徽
+一、模块
+
+Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
+
+模块能定义函数,类和变量,模块也能包含可执行的代码。
+
+1.1 导入模块
+1.1.1 导入模块的方式
+
+import 模块名
+from 模块名 import 功能名
+from 模块名 import *
+import 模块名 as 别名
+from 模块名 import 功能名 as 别名
+1.2 导入方式详解
+import 语法:
+
+## 1. 导⼊模块
+import 模块名
+import 模块名1, 模块名2...
+
+## 2. 调⽤功能
+模块名.功能名()
+体验:
+
+import math
+print(math.sqrt(9)) # 3.0
+from..import..
+
+语法:
+
+from 模块名 import 功能1, 功能2, 功能3...
+体验:
+
+from math import sqrt
+print(sqrt(9))
+from .. import *
+语法
+
+from 模块名 import *
+体验:
+
+from math import *
+print(sqrt(9))
+as定义别名
+
+语法
+
+## 模块定义别名
+import 模块名 as 别名
+
+## 功能定义别名
+from 模块名 import 功能 as 别名
+体验
+
+## 模块别名
+import time as tt
+
+tt.sleep(2)
+print('hello')
+
+## 功能别名
+from time import sleep as sl
+sl(2)
+print('hello')
+1.2 制作模块
+在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说定义模块名必须要符合标识符命名规则。
+
+1.2.1 定义模块
+
+新建一个Python文件,命名为 my_module1.py ,并定义 testA 函数。
+
+def testA(a, b):
+ print(a + b)
+1.2.2 测试模块
+
+在实际开发中,当一个开发员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发员会在py文件中添加一些测试信息.,例如,在 my_module1.py 文件中添加测试代码。
+
+def testA(a, b):
+ print(a + b)
+
+testA(1, 1) 12345
+此时,无论是当前文件,还是其他已经导入了该模块的⽂件,在运行的时候都会自动执行 testA 函数的调用。
+
+解决办法如下:
+
+def testA(a, b):
+ print(a + b)
+## 只在当前⽂件中调⽤该函数,其他导⼊的⽂件内不符合该条件,则不执⾏testA函数调⽤
+if __name__ == '__main__':
+ testA(1, 1)
+1.2.3 调用模块
+
+import my_module1
+my_module1.testA(1, 1)
+1.2.4 注意事项
+
+如果使用 from .. import .. 或 from .. import * 导入多个模块的时候,且模块内有同名功能。当调 ⽤这个同名功能的时候,调用到的是后导入的模块的功能。
+
+体验:
+
+## 模块1代码
+def my_test(a, b):
+ print(a + b)
+## 模块2代码
+def my_test(a, b):
+ print(a - b)
+
+## 导⼊模块和调⽤功能代码
+from my_module1 import my_test
+from my_module2 import my_test
+
+## my_test函数是模块2中的函数
+my_test(1, 1)
+1.3 模块的定位顺序
+当导入一个模块,Python解析器对模块位置的搜索顺序是:
+
+1. 当前目录
+
+2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
+
+3. 如果都找不到,Python会查看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
+
+模块搜索路径存储在system模块的sys.path变量中。变量包含当前目录,PYTHONPATH和由安装过 程决定的默认目录。
+
+注意:⾃⼰的⽂件名不要和已有模块名重复,否则导致模块功能用法使用,使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功 能。
+1.4 __all__
+
+如果一个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。
+
+my_module1模块代码:
+
+__all__ = ['testA']
+
+def testA():
+ print('testA')
+
+
+def testB():
+ print('testB')
+导入模块的文件代码:
+
+from my_module1 import *
+testA()
+testB()
+图片
+
+
+二、库
+严格来说,Python中没有库(library)的概念,模块(module)和包(package)才是Python语法中有的概念。这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块的集合,只是一个通俗的说法。平时说的库既可以是一个模块,也可以是一个包。
+
+包和模块之间的关系,如下图:
+
+图片
+
+一个包里面可以包含很多的模块。模块是一个包含有组织的代码片段,一个.py文件对应一个模块,文件名就是模块名(去除掉后缀.py)。
+
+
+
+三、包
+包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字 为 __init__.py 文件,那么这个文件夹就称之为包。
+
+3.1 制作包
+[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。
+
+注意:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入。
+
+3.1.1 快速体验
+
+1. 新建包 mypackage
+
+2. 新建包内模块:my_module1 和 my_module2
+
+3. 模块内代码如下
+
+## my_module1
+print(1)
+
+
+def info_print1():
+ print('my_module1')
+
+
+## my_module2
+print(2)
+
+
+def info_print2():
+ print('my_module2')
+3.2 导入包
+3.2.1 方法一:
+
+import 包名.模块名
+
+包名.模块名.⽬标
+3.2.2 快速体验
+
+import my_package.my_module1
+
+my_package.my_module1.info_print1()
+3.2.3 方法二
+
+注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
+
+from 包名 import *
+模块名.⽬标
+3.2.4 快速体验
+
+from my_package import *
+my_module1.info_print1()
+
+
+
+ # pip install Pillow 放大图片先安装这个库
+
+# 无损放大JPG源代码:
+
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+import cv2
+from PIL import Image
+import time
+import shutil
+import os
+
+
+
+DATA = input('请输入要放大的图片名称(JPG文件名称必须使用数字或英文):')
+Multiple = int(input('请输入要放大的图片的倍数(必须大于1):'))
+DATA_file = input('请输入要图片要保存的图片名称:')
+print('开始放大....')
+os.mkdir('DATA') # 新建
+#读取图片 要放大的图片
+src = cv2.imread(DATA)
+# 用来读取原图片的像素RGB颜色值 先读取图片文件
+IMG = Image.open(DATA)
+#获取图像大小 获取图像的大写XY也是颠倒过来的
+y, x = src.shape[:2]
+
+# 临时装饰器
+List_elements = []
+for YY in range(y): # 获取图片的Y轴有多少像素 也相当于长度
+ '''意思:循环读取图片的每一个像素点的RGB值 并以列表的形式存储起来'''
+ if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
+ List_elements = []
+ for XX in range(x): # 获取图片的X轴有多少像素 也相当于宽度
+ # IMG.getpixel((a, aa)) 用来获取图片某位置的RGB像素值 提示:获取的值 对应 BGR 是RGB反过来的
+ List_elements = List_elements + [list(IMG.getpixel((XX, YY)))] # 读取某坐标的像素值并将元组为列表进行存储
+ NAME = open(f"DATA/{YY}", 'w') # 存储
+ NAME.write(str(List_elements)) # 将列表转为字符串保存
+ NAME.close()
+
+time.sleep(2) # 延迟一下 ,防止文件加载过慢读取错误
+
+# 图像缩放 要将原图进行翻倍放大 然后在原图的基础上进行绘图
+result = cv2.resize(src, (x*Mult
+
+```
diff --git a/Anytype.20240802.082116.32/python_o.md b/Anytype.20240802.082116.32/python_o.md
new file mode 100644
index 0000000..f44839e
--- /dev/null
+++ b/Anytype.20240802.082116.32/python_o.md
@@ -0,0 +1 @@
+# Python
diff --git a/Anytype.20240802.082116.32/python_q.md b/Anytype.20240802.082116.32/python_q.md
new file mode 100644
index 0000000..9f38e21
--- /dev/null
+++ b/Anytype.20240802.082116.32/python_q.md
@@ -0,0 +1 @@
+# python
diff --git a/Anytype.20240802.082116.32/python_x.md b/Anytype.20240802.082116.32/python_x.md
new file mode 100644
index 0000000..49712e7
--- /dev/null
+++ b/Anytype.20240802.082116.32/python_x.md
@@ -0,0 +1 @@
+# Python
diff --git a/Anytype.20240802.082116.32/readers-limit.md b/Anytype.20240802.082116.32/readers-limit.md
new file mode 100644
index 0000000..ca602b6
--- /dev/null
+++ b/Anytype.20240802.082116.32/readers-limit.md
@@ -0,0 +1 @@
+# Readers limit
diff --git a/Anytype.20240802.082116.32/readonly.md b/Anytype.20240802.082116.32/readonly.md
new file mode 100644
index 0000000..d6c7020
--- /dev/null
+++ b/Anytype.20240802.082116.32/readonly.md
@@ -0,0 +1 @@
+# Readonly
diff --git a/Anytype.20240802.082116.32/recommended-layout.md b/Anytype.20240802.082116.32/recommended-layout.md
new file mode 100644
index 0000000..62aac86
--- /dev/null
+++ b/Anytype.20240802.082116.32/recommended-layout.md
@@ -0,0 +1 @@
+# Recommended layout
diff --git a/Anytype.20240802.082116.32/recommended-relations.md b/Anytype.20240802.082116.32/recommended-relations.md
new file mode 100644
index 0000000..46129eb
--- /dev/null
+++ b/Anytype.20240802.082116.32/recommended-relations.md
@@ -0,0 +1 @@
+# Recommended relations
diff --git a/Anytype.20240802.082116.32/recording-artist.md b/Anytype.20240802.082116.32/recording-artist.md
new file mode 100644
index 0000000..8c1646c
--- /dev/null
+++ b/Anytype.20240802.082116.32/recording-artist.md
@@ -0,0 +1 @@
+# Recording Artist
diff --git a/Anytype.20240802.082116.32/relation-key.md b/Anytype.20240802.082116.32/relation-key.md
new file mode 100644
index 0000000..ccb5324
--- /dev/null
+++ b/Anytype.20240802.082116.32/relation-key.md
@@ -0,0 +1 @@
+# Relation key
diff --git a/Anytype.20240802.082116.32/relation-option-color.md b/Anytype.20240802.082116.32/relation-option-color.md
new file mode 100644
index 0000000..cd6f582
--- /dev/null
+++ b/Anytype.20240802.082116.32/relation-option-color.md
@@ -0,0 +1 @@
+# Relation option color
diff --git a/Anytype.20240802.082116.32/relation-option.md b/Anytype.20240802.082116.32/relation-option.md
new file mode 100644
index 0000000..31e07ef
--- /dev/null
+++ b/Anytype.20240802.082116.32/relation-option.md
@@ -0,0 +1 @@
+# Relation option
diff --git a/Anytype.20240802.082116.32/relation-value-is-readonly.md b/Anytype.20240802.082116.32/relation-value-is-readonly.md
new file mode 100644
index 0000000..bfc3b9b
--- /dev/null
+++ b/Anytype.20240802.082116.32/relation-value-is-readonly.md
@@ -0,0 +1 @@
+# Relation value is readonly
diff --git a/Anytype.20240802.082116.32/relation.md b/Anytype.20240802.082116.32/relation.md
new file mode 100644
index 0000000..a5a25f4
--- /dev/null
+++ b/Anytype.20240802.082116.32/relation.md
@@ -0,0 +1 @@
+# Relation
diff --git a/Anytype.20240802.082116.32/relations-target-object-types.md b/Anytype.20240802.082116.32/relations-target-object-types.md
new file mode 100644
index 0000000..cdb581c
--- /dev/null
+++ b/Anytype.20240802.082116.32/relations-target-object-types.md
@@ -0,0 +1 @@
+# Relation's target object types
diff --git a/Anytype.20240802.082116.32/released-year.md b/Anytype.20240802.082116.32/released-year.md
new file mode 100644
index 0000000..52ceb10
--- /dev/null
+++ b/Anytype.20240802.082116.32/released-year.md
@@ -0,0 +1 @@
+# Released year
diff --git a/Anytype.20240802.082116.32/revin-homepage.md b/Anytype.20240802.082116.32/revin-homepage.md
new file mode 100644
index 0000000..d1ba824
--- /dev/null
+++ b/Anytype.20240802.082116.32/revin-homepage.md
@@ -0,0 +1,9 @@
+# Revin Homepage
+- [All Objects](all-objects.md)
+- `[Rust 集](rust.md)` [01002-Rust](01002-rust.md)
+- [Python 集](python_x.md) [01001-Python](01001-python.md)
+- [bookmark20030312](rnbookmark20030312.md)
+- [All Objects Rust 集 Python 集](all-objects-rust-ji-python-ji.md)
+-
+
+
diff --git a/Anytype.20240802.082116.32/revinzhi-shi-ku.md b/Anytype.20240802.082116.32/revinzhi-shi-ku.md
new file mode 100644
index 0000000..e69de29
diff --git a/Anytype.20240802.082116.32/revinzhi-shi-ku_k.md b/Anytype.20240802.082116.32/revinzhi-shi-ku_k.md
new file mode 100644
index 0000000..5e9256e
--- /dev/null
+++ b/Anytype.20240802.082116.32/revinzhi-shi-ku_k.md
@@ -0,0 +1,2 @@
+# Revin知识库
+
diff --git a/Anytype.20240802.082116.32/revinzhi-shi-ku_p.md b/Anytype.20240802.082116.32/revinzhi-shi-ku_p.md
new file mode 100644
index 0000000..1d0b984
--- /dev/null
+++ b/Anytype.20240802.082116.32/revinzhi-shi-ku_p.md
@@ -0,0 +1 @@
+# Revin知识库
diff --git a/Anytype.20240802.082116.32/revision.md b/Anytype.20240802.082116.32/revision.md
new file mode 100644
index 0000000..7bb0bb5
--- /dev/null
+++ b/Anytype.20240802.082116.32/revision.md
@@ -0,0 +1 @@
+# Revision
diff --git a/Anytype.20240802.082116.32/rn-col.md b/Anytype.20240802.082116.32/rn-col.md
new file mode 100644
index 0000000..e5538db
--- /dev/null
+++ b/Anytype.20240802.082116.32/rn-col.md
@@ -0,0 +1 @@
+# RN\|Col
diff --git a/Anytype.20240802.082116.32/rn-col_f.md b/Anytype.20240802.082116.32/rn-col_f.md
new file mode 100644
index 0000000..cbe7e8d
--- /dev/null
+++ b/Anytype.20240802.082116.32/rn-col_f.md
@@ -0,0 +1 @@
+# RN\|Col
diff --git a/Anytype.20240802.082116.32/rn-col_z.md b/Anytype.20240802.082116.32/rn-col_z.md
new file mode 100644
index 0000000..e5538db
--- /dev/null
+++ b/Anytype.20240802.082116.32/rn-col_z.md
@@ -0,0 +1 @@
+# RN\|Col
diff --git a/Anytype.20240802.082116.32/rnbookmark20030312.md b/Anytype.20240802.082116.32/rnbookmark20030312.md
new file mode 100644
index 0000000..7975e3c
--- /dev/null
+++ b/Anytype.20240802.082116.32/rnbookmark20030312.md
@@ -0,0 +1,93 @@
+# RNBookmark20030312
+
+
+
+- [iTab](https://go.itab.link/)
+- [Flowus](https://flowus.cn/)
+- [Hipc123](https://www.hipc123.com/)
+- [Kod文件](http://47.107.80.236:8680/)
+- [中科大配置软件源 >](https://mirrors.ustc.edu.cn/help/)
+- [ 清华大学开源软件镜像站>](https://mirrors4.tuna.tsinghua.edu.cn/)
+ ---
+
+# 常用工具
+- [无影云电脑](https://wuying.aliyun.com/appList)
+- [My GITEE](https://gitee.com/ryan6981/)
+- [My Gitee](https://github.com/ryan6981)
+- [Flowus](https://flowus.cn/)
+- [My Craft](https://www.craft.do/)
+- [My Notion](https://www.notion.so/product/ai)
+ ---
+- [TL-SSH/Web版](https://www.terminal.icu/a/home/)
+- [Lightly/Web版](https://lightly.teamcode.com)
+- [阿里Devstudio](https://ide.aliyun.com/)
+- [阿里无影5125830490](https://wuying.aliyun.com/polymerization)
+ ---
+- [Rust-ExpIDE](https://www.rustexplorer.com/b)
+- [KOTLIN代码在线](https://play.kotlinlang.org)
+- [DartPAD代码在线](https://www.69py.xyz/dart-test.html)
+- [在线python运行](https://tool.lu/coderunner/)
+- [程序员盒子](https://www.coderutil.com/)
+ ---
+
+# 常用WEB页
+- [iTab](https://go.itab.link/)
+- [Hipc123](https://www.hipc123.com/)
+- [Yandex](https://yandex.com/)
+- [Bing](https://www.bing.com/)
+ ---
+- [多搜搜](http://duososo.com/)
+- [热盘搜](http://www.repanso.com/)
+- [小白盘](https://www.xiaobaipan.com)
+- [设计导航](http://hao.shejidaren.com/)
+- [搜图导航](https://www.91sotu.com/)
+- [在线PS](https://www.uupoop.com)
+- [设计师导航](https://hao.uisdc.com/)
+ ---
+- [风变编程](https://www.pypypy.cn)
+- [脚本之家](https://www.jb51.net/)
+- [编程导航](https://www.code-nav.cn)
+- [国内主要镜像](http://www.69py.xyz/?p=378)
+- [Tool在线工具箱](https://tooltt.com/)
+ ---
+- [DartPAD](https://dartpad.cn/)
+- [Kotlinlang](https://play.kotlinlang.org)
+- [Python Tip](http://www.pythontip.com/coding/run)
+- [Coderunner](https://tool.lu/coderunner/)
+- [Macflow](https://macflow.net/)
+- [LemonQQ](https://lemon.qq.com/lab/)
+ ---
+- [Nextcloud](http://wp.69py.xyz)
+- [Aliyun-Wuying](https://wuying.aliyun.com/polymerization)
+- [Ryan-Gitee](https://gitee.com/ryan6981)
+- [Aliyundrive](https://www.aliyundrive.com/)
+- [Win11 blueedge ](https://win11.blueedge.me/)
+- [微信网页传文件](https://filehelper.weixin.qq.com/?utm_source=appinn.com)
+ ---
+
+## 国内常用镜像地址
+### - 1. 华为云镜像源 https://mirrors.huaweicloud.com/home
+### - 2. 清华源 https://mirrors.tuna.tsinghua.edu.cn/
+### - 3. 阿里云镜像源 https://developer.aliyun.com/mirror/
+### - 4. 中科大镜像源 https://mirrors.ustc.edu.cn/
+### - 5. 网易开源镜像站 https://mirrors.163.com/
+### - 6. 腾讯云镜像 https://mirrors.cloud.tencent.com/
+ ---
+### - 3.1 清华镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
+### - 3.2 中科大镜像 https://pypi.mirrors.ustc.edu.cn/simple
+### - 3.3 豆瓣镜像 pip install -i http://pypi.douban.com/simple/
+### - 3.3 阿里镜像 pip install -i https://mirrors.aliyun.com/pypi/simple/
+### - 3.4 华中科大镜像 pip install -i http://pypi.hustunique.com/
+### - 3.5 山东理工大学镜像 pip install -i http://pypi.hustunique.com/
+### - 3.6 搜狐镜像 pip install -i http://mirrors.sohu.com/Python/
+### - 3.7 百度镜像 pip install -i https://mirror.baidu.com/pypi/simple
+ ---
+## 大模型
+### HF-Mirror https://hf-mirror.com/
+### Modelscope https://modelscope.cn/models
+```
+### Ollama https://ollama.com/download
+ https://github.com/ollama/ollama
+ https://github.com/open-webui/open-webui
+
+```
diff --git a/Anytype.20240802.082116.32/rnlist.md b/Anytype.20240802.082116.32/rnlist.md
new file mode 100644
index 0000000..2902d27
--- /dev/null
+++ b/Anytype.20240802.082116.32/rnlist.md
@@ -0,0 +1,590 @@
+# RNlist
+
+```
+## 行事历
+# 模块/包和库
+
+
+```
+# Py示例随记
+```
+
+
+
+#nicegui界面库
+from nicegui import ui
+ui.label('开始学习nicegui')
+ui.run()
+
+
+#简易版行事历
+class Supercal():
+
+ number = 0
+
+ def __init__(self, date, item, content, status):
+
+ self.date = date
+
+ self.item = item
+
+ self.content = content
+
+ self.status = status
+
+ Supercal.number += 1
+
+ def show(self):
+
+
+
+ print("Date:{}.Item:{}.Content:{}.Status:{}".format(self.date,self.item,self.content,self.status))
+
+# 创建多个Supercal对象并存储在列表中
+print('行事历息如下:')
+print('*'*72)
+super_events = [
+
+ Supercal('10月5日', '设计', '交一个设计', '紧急'),
+
+ Supercal('10月8日', '私事', '广州火车站接爸妈', '重要'),
+
+ Supercal('10月12日', '联系', '提前联系林总了解扫描情况', '正常'),
+
+ Supercal('10月15日', '出差', '计划到云浮扫描', '正常')
+
+]
+
+# 遍历列表并调用每个对象的show()方法
+
+for event in super_events:
+
+ event.show()
+
+ print() # 添加空行分隔不同的事件信息
+
+
+
+#另一种写法
+
+class List:
+ def __init__(self, date, item, content, status):
+ self.date = date
+ self.item = item
+ self.content = content
+ self.status = status
+
+ def Supercal(self):
+ print("{}\t{}\t{}\t{}".format(self.date, self.item, self.content, self.status))
+
+print("日期\t事项\t内容\t等级")
+
+person = [List(20231018, '设计', '后天交设计', 'AAA'), List(20231011, '出差', '计划去云浮扫描', 'BBB')]
+for p in person:
+ p.Supercal()
+
+
+
+#数据库版行事历
+import random
+import shelve
+import datetime
+import time
+import itertools
+
+# 定义一个生成唯一序列号的函数
+def generate_sequence_number():
+ return random.randint(1, 1000)
+
+# 定义录入功能函数
+def insert_data():
+ with shelve.open('my_supercal') as db:
+ dateup=[]
+
+ DATE_FORMAT = "%Y-%m-%d"
+ supercal_name = input("请输入行事历名称:")
+ if supercal_name == 'q':
+ return
+ supercal_date = input("请输入日期(默认为当前日期):") or time.strftime(
+ "%Y-%m-%d", time.localtime())
+
+ # 生成唯一的序列号
+ sequence_number = str(generate_sequence_number())
+
+ # 将数据存储在字典中
+ supercal_content = input("请输入行事内容")
+ supercal_grade = input("等级默认 AAA ")
+ if supercal_grade=="":
+ supercal_grade=='AAA'
+
+ date= {'sequence_number': sequence_number, 'date': supercal_date, 'supercal_name': supercal_name,'supercal_content': supercal_content, 'supercal_grade': supercal_grade}
+
+ dateup.append(date)
+ #print(dateup)
+ if 'cal' in db:
+ db['cal']+=dateup
+ else:
+ db['cal']=dateup
+
+
+# 定义查询功能函数
+def query_data(sequence_number):
+ with shelve.open('my_supercal') as db:
+ mydate = db['cal']
+ print("序号\t\t", "日期\t\t", "事项\t\t", "内容\t\t\t\t", "等级\t\t")
+ for i, item in enumerate(mydate):
+ if item['sequence_number']==str(sequence_number):
+ values=item.values()
+ for value in values:
+ print(value,end=' ')
+
+ #else:
+ # print("未找到相关记录")
+
+
+# 定义删除功能函数
+def delete_data(sequence_number):
+ with shelve.open('my_supercal') as db:
+ mydate = db['cal']
+ for i, item in enumerate(mydate):
+ if item['sequence_number']==str(sequence_number):
+ mydate.pop(i)
+ db['cal']=mydate
+ #print(mydate)
+ print(f"已成功删除序列号为{sequence_number}的行事历记录。")
+
+
+#清空所有数据
+def delete_all_date():
+ with shelve.open('my_supercal') as db:
+ #获取要清空的表名
+ table_name = 'cal'
+ #删除表中的所有数据
+ if table_name in db:
+ del db[table_name]
+ print("File Clear out successfully")
+
+
+
+
+
+# 定义显示所有数据的函数
+def show_all_data():
+ with shelve.open('my_supercal') as db:
+ list1= db.get('cal', [])
+ #print(list1)
+ print()
+ print("-----行事历信息界面-----")
+ print()
+ print("序号\t\t", "日期\t\t", "事项\t\t", "内容\t\t\t\t", "等级\t\t")
+ for item in list1:
+ print("%s\t\t%s\t\t%s\t\t\t\t%s\t\t\t%s\t\t" % (
+ item["sequence_number"], item["date"], item["supercal_name"], item["supercal_content"], item["supercal_grade"]))
+
+
+# 定义菜单函数
+def menu():
+ print("欢迎使用行事历系统,希望你有缘为精神家园找到一片栖息地!")
+ while True:
+ print("-------------------------------")
+ print(" 行事历系统 V3.0")
+ print(" ")
+ print(" 1. 写入行事历 ")
+ print(" 2. 查询行事历 ")
+ print(" 3. 删除行事历 ")
+ print(" 4. 展示所Cal ")
+ print(" 5. 清空行事历 ")
+ print(" 6. 退出 系统 ")
+ choice = int(input("请输入你的选择:"))
+ if choice == 1:
+ insert_data()
+ elif choice == 2:
+ query_data(int(input("请输入要查询的行事历序列号:")))
+ elif choice == 3:
+ delete_data(int(input("请输入要删除的行事历序列号:")))
+ elif choice == 4:
+ show_all_data()
+ elif choice == 5:
+ delete_all_date()
+ elif choice == 6:
+ print("感谢使用!")
+ exit()
+
+# 主程序
+while True:
+ menu()
+
+
+
+
+
+
+# 一文带你分清python模块、包和库
+Python宝典 2023-02-24 09:00 发表于安徽
+一、模块
+
+Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
+
+模块能定义函数,类和变量,模块也能包含可执行的代码。
+
+1.1 导入模块
+1.1.1 导入模块的方式
+
+import 模块名
+from 模块名 import 功能名
+from 模块名 import *
+import 模块名 as 别名
+from 模块名 import 功能名 as 别名
+1.2 导入方式详解
+import 语法:
+
+## 1. 导⼊模块
+import 模块名
+import 模块名1, 模块名2...
+
+## 2. 调⽤功能
+模块名.功能名()
+体验:
+
+import math
+print(math.sqrt(9)) # 3.0
+from..import..
+
+语法:
+
+from 模块名 import 功能1, 功能2, 功能3...
+体验:
+
+from math import sqrt
+print(sqrt(9))
+from .. import *
+语法
+
+from 模块名 import *
+体验:
+
+from math import *
+print(sqrt(9))
+as定义别名
+
+语法
+
+## 模块定义别名
+import 模块名 as 别名
+
+## 功能定义别名
+from 模块名 import 功能 as 别名
+体验
+
+## 模块别名
+import time as tt
+
+tt.sleep(2)
+print('hello')
+
+## 功能别名
+from time import sleep as sl
+sl(2)
+print('hello')
+1.2 制作模块
+在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说定义模块名必须要符合标识符命名规则。
+
+1.2.1 定义模块
+
+新建一个Python文件,命名为 my_module1.py ,并定义 testA 函数。
+
+def testA(a, b):
+ print(a + b)
+1.2.2 测试模块
+
+在实际开发中,当一个开发员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发员会在py文件中添加一些测试信息.,例如,在 my_module1.py 文件中添加测试代码。
+
+def testA(a, b):
+ print(a + b)
+
+testA(1, 1) 12345
+此时,无论是当前文件,还是其他已经导入了该模块的⽂件,在运行的时候都会自动执行 testA 函数的调用。
+
+解决办法如下:
+
+def testA(a, b):
+ print(a + b)
+## 只在当前⽂件中调⽤该函数,其他导⼊的⽂件内不符合该条件,则不执⾏testA函数调⽤
+if __name__ == '__main__':
+ testA(1, 1)
+1.2.3 调用模块
+
+import my_module1
+my_module1.testA(1, 1)
+1.2.4 注意事项
+
+如果使用 from .. import .. 或 from .. import * 导入多个模块的时候,且模块内有同名功能。当调 ⽤这个同名功能的时候,调用到的是后导入的模块的功能。
+
+体验:
+
+## 模块1代码
+def my_test(a, b):
+ print(a + b)
+## 模块2代码
+def my_test(a, b):
+ print(a - b)
+
+## 导⼊模块和调⽤功能代码
+from my_module1 import my_test
+from my_module2 import my_test
+
+## my_test函数是模块2中的函数
+my_test(1, 1)
+1.3 模块的定位顺序
+当导入一个模块,Python解析器对模块位置的搜索顺序是:
+
+1. 当前目录
+
+2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
+
+3. 如果都找不到,Python会查看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
+
+模块搜索路径存储在system模块的sys.path变量中。变量包含当前目录,PYTHONPATH和由安装过 程决定的默认目录。
+
+注意:⾃⼰的⽂件名不要和已有模块名重复,否则导致模块功能用法使用,使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功 能。
+1.4 __all__
+
+如果一个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。
+
+my_module1模块代码:
+
+__all__ = ['testA']
+
+def testA():
+ print('testA')
+
+
+def testB():
+ print('testB')
+导入模块的文件代码:
+
+from my_module1 import *
+testA()
+testB()
+图片
+
+
+二、库
+严格来说,Python中没有库(library)的概念,模块(module)和包(package)才是Python语法中有的概念。这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块的集合,只是一个通俗的说法。平时说的库既可以是一个模块,也可以是一个包。
+
+包和模块之间的关系,如下图:
+
+图片
+
+一个包里面可以包含很多的模块。模块是一个包含有组织的代码片段,一个.py文件对应一个模块,文件名就是模块名(去除掉后缀.py)。
+
+
+
+三、包
+包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字 为 __init__.py 文件,那么这个文件夹就称之为包。
+
+3.1 制作包
+[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。
+
+注意:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入。
+
+3.1.1 快速体验
+
+1. 新建包 mypackage
+
+2. 新建包内模块:my_module1 和 my_module2
+
+3. 模块内代码如下
+
+## my_module1
+print(1)
+
+
+def info_print1():
+ print('my_module1')
+
+
+## my_module2
+print(2)
+
+
+def info_print2():
+ print('my_module2')
+3.2 导入包
+3.2.1 方法一:
+
+import 包名.模块名
+
+包名.模块名.⽬标
+3.2.2 快速体验
+
+import my_package.my_module1
+
+my_package.my_module1.info_print1()
+3.2.3 方法二
+
+注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
+
+from 包名 import *
+模块名.⽬标
+3.2.4 快速体验
+
+from my_package import *
+my_module1.info_print1()
+
+
+
+ # pip install Pillow 放大图片先安装这个库
+
+# 无损放大JPG源代码:
+
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+import cv2
+from PIL import Image
+import time
+import shutil
+import os
+
+
+
+DATA = input('请输入要放大的图片名称(JPG文件名称必须使用数字或英文):')
+Multiple = int(input('请输入要放大的图片的倍数(必须大于1):'))
+DATA_file = input('请输入要图片要保存的图片名称:')
+print('开始放大....')
+os.mkdir('DATA') # 新建
+#读取图片 要放大的图片
+src = cv2.imread(DATA)
+# 用来读取原图片的像素RGB颜色值 先读取图片文件
+IMG = Image.open(DATA)
+#获取图像大小 获取图像的大写XY也是颠倒过来的
+y, x = src.shape[:2]
+
+# 临时装饰器
+List_elements = []
+for YY in range(y): # 获取图片的Y轴有多少像素 也相当于长度
+ '''意思:循环读取图片的每一个像素点的RGB值 并以列表的形式存储起来'''
+ if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
+ List_elements = []
+ for XX in range(x): # 获取图片的X轴有多少像素 也相当于宽度
+ # IMG.getpixel((a, aa)) 用来获取图片某位置的RGB像素值 提示:获取的值 对应 BGR 是RGB反过来的
+ List_elements = List_elements + [list(IMG.getpixel((XX, YY)))] # 读取某坐标的像素值并将元组为列表进行存储
+ NAME = open(f"DATA/{YY}", 'w') # 存储
+ NAME.write(str(List_elements)) # 将列表转为字符串保存
+ NAME.close()
+
+time.sleep(2) # 延迟一下 ,防止文件加载过慢读取错误
+
+# 图像缩放 要将原图进行翻倍放大 然后在原图的基础上进行绘图
+result = cv2.resize(src, (x*Multiple,y*Multiple))
+
+for RGB_DATA_Y in range(y): # 循环所有文件 Y有多少像素 就有多少个RGB颜色文件
+ '''循环读取刚刚存储的RGB颜色文件 并循环进行绘制 以倍数进行绘图 确保无损放大'''
+ NAME_ = eval(open(f'DATA/{RGB_DATA_Y}', 'r', encoding='utf-8').read()) # 读取文件并转为列表
+ for RGB_DATA_X in range(len(NAME_)): # 获取 文件内有多少个子列表
+ '''
+ 因为通过getpixel 获取出来的颜色是反过来的 RGB 也就是 BGR
+ 在颜色文件内的数值也是反过来的,所以在这里读取的时候要将其颠倒一下,反向转换一下
+ '''
+ _DATA = NAME_[RGB_DATA_X]
+ _DATA.reverse()
+
+ '''
+ 当前这个模块是核心模块 主要是用来读取并绘制出原图的倍数
+ 原理:
+ result[1,1] = [255,255,255] 填充 图片的第一个像素为白色 [255,255,255] 是RGB的白色颜色数值
+ result[0:2,0:4] = [255,255,255] 填充图片 X轴从0像素到2像素为白色 Y轴从0像素到4像素为白色
+ '''
+ try:
+ result[RGB_DATA_Y*Multiple:RGB_DATA_Y*Multiple+Multiple,RGB_DATA_X*Multiple:RGB_DATA_X*Multiple+Multiple] = _DATA
+ except:pass
+# 写入保存图像
+cv2.imwrite(DATA_file, result)
+print('完成....')
+try:
+ shutil.rmtree("DATA") # 删除文件夹和文件
+except:pass
+————————————————
+版权声明:本文为CSDN博主「小木_.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
+原文链接:https://blog.csdn.net/weixin_46625757/article/details/126622097
+
+
+
+
+# 无损放大PNG源代码:
+
+#!/usr/bin/python
+# -*- coding:utf-8 -*-
+import cv2
+from PIL import Image
+import time
+import shutil
+import os
+
+
+
+DATA = input('请输入要放大的图片名称(PNG文件名称必须使用数字或英文):')
+Multiple = int(input('请输入要放大的图片的倍数(必须大于1):'))
+DATA_file = input('请输入要图片要保存的图片名称:')
+print('开始放大....')
+os.mkdir('DATA') # 新建
+
+#读取图片 要放大的图片
+src = cv2.imread(DATA)
+# 用来读取原图片的像素RGB颜色值 先读取图片文件
+IMG = Image.open(DATA)
+#获取图像大小 获取图像的大写XY也是颠倒过来的
+y, x = src.shape[:2]
+
+# 模板
+# 图像缩放 要将原图进行翻倍放大 然后在原图的基础上进行绘图
+result = cv2.resize(src, (x*Multiple,y*Multiple))
+# 写入保存图像 - 模板图片不用管
+cv2.imwrite('8UY88767.png', result)
+
+
+
+# 临时装饰器
+List_elements = []
+# 存储文件的个数 后期读取方便,不会错读取
+Number_documents = 0
+
+for YY in range(y): # 获取图片的Y轴有多少像素 也相当于长度
+ '''意思:循环读取图片的每一个像素点的RGBA值 并以列表的形式存储起来'''
+ if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
+ List_elements = []
+ for XX in range(x): # 获取图片的X轴有多少像素 也相当于宽度
+ # IMG.getpixel((a, aa)) 用来获取图片某位置的RGBA像素值
+ List_elements = List_elements + [IMG.getpixel((XX, YY))]*Multiple # 读取某坐标的像素值并将元组为列表进行存储 Multiple是倍数
+ for a in range(Multiple): # Multiple是倍数 如果是2倍 则生成两个同样的颜色文件 在后期进行单行输出多次 确保以像素点进行放大
+ NAME = open(f"DATA/{Number_documents}", 'w') # 存储
+ NAME.write(str(List_elements)) # 将列表转为字符串保存
+ NAME.close()
+ Number_documents = Number_documents + 1
+
+time.sleep(1) # 延迟一下 ,防止文件加载过慢读取错误
+
+DATA_ = list() # 定义需要处理的数据列表
+for a in range(Number_documents):
+ NAME = open(f"DATA/{a}", 'r').read() # 读取颜色文件
+ NAME = list(eval(NAME)) # 将颜色文件转换为列表
+ for aa in range(len(NAME)): # 循环读取列表的颜色值
+ DATA_.append(NAME[aa]) # 将颜色值保存到数据列表
+
+# 打开写入模板图片
+IMG_2 = Image.open('8UY88767.png')
+# 转化为RGBA
+RGBA_IMG = IMG_2.convert("RGBA")
+RGBA_IMG.putdata(DATA_) # 写入图片
+RGBA_IMG.save(DATA_file, "PNG") # 保存图片
+print('完成....')
+try:
+ shutil.rmtree("DATA") # 删除文件夹和文件
+except:pass
+try:
+ os.remove("8UY88767.png") # 删除文件
+except:pass
+————————————————
+版权声明:本文为CSDN博主「小木_.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
+原文链接:https://blog.csdn.net/weixin_46625757/article/details/126622097
+```
diff --git a/Anytype.20240802.082116.32/rust.md b/Anytype.20240802.082116.32/rust.md
new file mode 100644
index 0000000..a250eb0
--- /dev/null
+++ b/Anytype.20240802.082116.32/rust.md
@@ -0,0 +1 @@
+# Rust
diff --git a/Anytype.20240802.082116.32/rust_3.md b/Anytype.20240802.082116.32/rust_3.md
new file mode 100644
index 0000000..f050756
--- /dev/null
+++ b/Anytype.20240802.082116.32/rust_3.md
@@ -0,0 +1 @@
+# Rust
diff --git a/Anytype.20240802.082116.32/rust_notes.md b/Anytype.20240802.082116.32/rust_notes.md
new file mode 100644
index 0000000..b964726
--- /dev/null
+++ b/Anytype.20240802.082116.32/rust_notes.md
@@ -0,0 +1,464 @@
+# Rust\_notes
+
+
+
+#Rust学习笔记之基础概念
+##Rust学习笔记之Rust环境配置和入门指南
+##你能所学到的知识点
+```
+在macOS环境中安装Rust 「推荐阅读指数」 ⭐️⭐️⭐️⭐️⭐️
+构建一个Rust应用 「推荐阅读指数」 ⭐️⭐️⭐️
+编译和运行是两个不同的步骤 「推荐阅读指数」 ⭐️⭐️⭐️
+如何使用Cargo构建Rust应用 「推荐阅读指数」 ⭐️⭐️⭐️⭐️⭐️"
+
+```
+###变量与可变性
+```
+在Rust中变量「默认是不可变」的。
+
+```
+当一个变量是不可变的时,一旦它被绑定到某个值上面,这个值就再也无法被改变。
+```
+
+fn main(){
+ let x =7;
+ x = 8;
+}
+
+
+```
+保存并通过命令cargo run来运行代码,会提示如下错误:
+图片这里提示我们cannot assign twice to immutable variable x(不能对不可变量x进行二次赋值)
+变量默认是不可变的,但你可以通过在「声明的变量名称前」添加mut关键字来使其可变。
+```
+fn main() {
+ let mut x =7;
+ println!("x的值是:{}",x);
+ x = 8;
+ println!("x的值是:{}",x);
+}
+
+```
+保存并通过命令cargo run来运行代码,输出结果如下:
+```
+x的值是 7
+x的值是 8
+
+❝
+
+设计一个变量的可变性还需要考量许多因素。
+
+ 当你在使用某些「重型数据结构」时,适当地使用可变性去修改一个实例,可能比赋值和重新返回一个新分配的实例更有效率
+ 当数据结构较为轻量的时候,采用更偏向「函数式」的风格,通过创建新变量来进行赋值,可能会使代码更加易于理解。
+
+❞
+
+```
+###变量和常量之间的不同
+变量的不可变性可能会让你联想到另外一个常见的编程概念:「常量」。
+但是,「常量」和「变量」之间还存在着一些细微的差别
+```
+❝
+
+ 不能用mut关键字来修饰一个常量。
+ 常量「不仅是默认不可变的,它还总是不可变」的
+ 使用const关键字而不是let关键字来声明一个常量
+ 在声明的同时,「必须显示地标注值的类型」
+ 常量可以被声明在任何作用域中,甚至包括全局作用域。
+ 这在一个值需要「被不同部分的代码共同引用」时十分有用
+ 「只能将常量绑定到一个常量表达式上」,而无法将一个函数的返回值或其他需要在运行时计算的值绑定在常量上。
+
+❞
+
+```
+下面是声明常量的例子,数值100被绑定到了常量MAX\_AGE上。在Rust中,约定俗成地使用「下划线分隔的全大写字母来命令一个常量」
+```
+fn main() {
+ const MAX_AGE:u32 = 100;
+}
+
+
+```
+遮蔽
+在Rust中,一个「新的声明变量可以覆盖掉旧的同名变量」,我们把这一个现象描述为:「第一个变量被第二个变量遮蔽了」。这意味着随后使用这个名称时,它指向的将会是第二个变量。
+```
+fn main() {
+ let x =5;
+
+ let x = x + 1;
+
+ let x = x * 2;
+
+ println!("x的值为:{}",x)
+}
+
+```
+```
+这段程序首先将x绑定到值为5上。
+随后它又通过重复let x =语句遮蔽了第一个x变量,并将第一个x变量值加上1的运行结果「绑定到新的变量」x上,此时x的值是6。
+第三个let语句同样遮蔽了第二个x变量,并将第二个x变量值乘以2的结果12绑定到第三个x变量上。
+
+```
+通过使用let,可以将对这个值执行一系列的「变换操作」,并允许这个变量在操作完成后保持自己的不可变性。
+```
+❝
+
+遮蔽机制与mut的一个区别在于:由于重复使用let关键字会创建出「新的变量」,所以「可以在复用变量名称的同时改变它的类型」。
+❞
+
+```
+```
+fn main() {
+ let spaces:&str = "abc";
+ let spaces:usize= spaces.len();
+}
+
+
+```
+第一个 spaces 变量是一个字符串类型,第二个 spaces 变量是一个数字类型。
+###数据类型
+Rust中「每一个值都有其特定的数据类型」,Rust会根据数据的类型来决定应该如何处理它们。
+我们来介绍两种不同的数据类型子集:标量类型和复合类型。
+```
+❝
+
+Rust是一门「静态类型语言」,这意味着它在「编译程序」的过程中需要知道所有变量的具体类型。
+❞
+
+```
+在大部分情况下,编译器都可以根据我们如何绑定、使用变量的值来「自动推导」出变量的类型。但是,在某些时候,当发生数据类型的转换时候,就需要「显示」地添加一个类型标注。
+下面的test变量是将String类型转换为数值类型。
+let test:u32 = "42".parse().expect("非数值类型")
+###标量类型
+```
+❝
+
+标量类型是「单个值」类型的统称。
+❞
+
+```
+在Rust中内建了4种基础的标量类型:
+```
+整数
+浮点数
+布尔值
+字符
+
+```
+###整数类型
+整数是指那些「没有小数部分的数字」。在Rust中存在如下内建整数类型,每一个长度不同的值都存在「有符号」和「无符号」两种变体。
+长度 有符号 无符号
+```
+8-bit i8 u8
+16-bit i16 u16
+32-bit i32(Rust默认) u32
+64-bit i64 u64
+arch isize usize
+
+```
+每一个整数类型的变体都会标明自身是否存在符号,并且拥有一个明确的大小。「有符号和无符号代表了一个整数类型是否拥有描述负数的能力」。
+换句话说,
+```
+对于「有符号」的整数类型来讲,数值需要一个符号来表示当前是否为正
+ 有符号数是通过「二进制补码」的形式进行存储的
+对于「无符号」的整数来讲,「数值永远为正」,不需要符号
+
+❝
+
+ 对于一个位数为n的有符号整数类型,它可以存储从-(2n-1)到(2n-1-1)范围内的「所有整数」。
+ 而对于无符号整数类型而言,则可以存储从0到(2n-1)范围内的「所有整数」。
+
+❞
+
+```
+除了指明位数的类型,还有isize和usize两种特殊的整数类型,它们的长度取决于程序运行的目标平台。
+```
+在64位架构上,它们就是64位的
+在32位架构上,它们就是32位的
+
+```
+Rust对于整数字面量的「默认推导类型」i32通常就是一个很好的选择:它在大部分情形下都是运算速度最快的那一个。
+```
+❝
+
+当Rust发生整数溢出时候,会执行「二进制补码环绕」。也就是说,「任何超出类型最大值的整数都会被环绕为类型最小值」。
+❞
+
+```
+###浮点数类型
+Rust还提供了两种基础的浮点数类型,「浮点数也就是带小数点的数字」。这两种类型是f32和f64,它们分别占用了32位和64位空间。
+```
+❝
+
+在Rust中,默认会将浮点数字面量的类型推导为f64。
+❞
+
+```
+Rust的浮点数使用了IEEE-754标准来进行表述,f32和f64类型分别对应这标准中的「单精度」和「双精度浮点数」。
+###布尔类型
+Rust的布尔类型只拥有两个可能的值true和false,它「只会占据单个字节的空间大小」。使用bool来表示一个布尔类型。
+```
+fn main(){
+ let t = true;
+
+ let f:bool = false;
+}
+
+```
+###字符类型
+在Rust中,char类型被用于描述语言中最基础的「单个字符」。
+\`\`
+```
+fn main(){
+ let c = 'a';
+}
+
+```
+```
+❝
+
+char类型使用「单引号」指定,字符串使用「双引号」指定。
+❞
+
+```
+在Rust中char类型「占4字节」,是一个Unicode标量值,这意味着它可以表示比ASCII多的字符内容。
+###复合类型
+复合类型可以「将多个不同类型的值组合为一个类型」。在Rust提供了两个「内置」的基础复合类型:元组和数组
+###元组类型
+元组可以将其他「不同类型的多个值」组合进一个复合类型中。元组还拥有一个固定的长度:你「无法在声明结束后增加或减少其中的元素数量」。
+为了创建元组,需要把一系列的值使用「逗号分隔」后放置到一对「圆括号」中。元组「每个位置都有一个类型」,这些类型不需要是相同的。
+```
+fn main(){
+ let tup:(i32,f64,u8) = (500,7.8,1);
+}
+
+```
+由于一个元组也被视为一个「单独的复合元素」,所以这里的变量tup被绑定到了整个元组上。为了从元组中获得单个的值,可以使用「模式匹配」来解构元组
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let (x,y,z) = tup;
+}
+除了解构,还可以通过「索引」并使用点号(.)来访问元组中的值。
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let firstValue = x.0;
+let secondValue = x.1;
+}
+###数组类型
+我们同样可以在数组中存储多个值的集合。与元组不同,「数组中每一个元素都必须是相同类型」。 Rust中「数组拥有固定的长度,一旦声明就再也不能随意更改大小」。
+fn main(){
+let a = [1,2,3,4,5];
+}
+当然,Rust标准库也提供了一个更加灵活的动态数组:它是一个类似于数组的集合结构,但它允许用户自由的调整数组的长度。这个我们后面的章节会有详细介绍。
+为了写出数组的类型,你可以使用一对「方括号」,并在方括号中填写数组内所有元素的类型,「一个分号及数组内元素的数量」。
+fn main(){
+let a:[i32;5] = [1,2,3,4,5];
+}
+另外还有一种更简便的初始化数组的方式。在「方括号中指定元素的值并接着填入一个分号及数组的长度」。
+fn main(){
+let a =[3;5];
+}
+以a命令的数组将会拥有5个元素,而这些元素全部拥有相同的「初始值」3。
+###访问数组的元素
+数组是「一整块分配在栈上的内存组成」,可以通过「索引」来访问一个数组中所有元素。
+fn main(){
+let a =[1,2,3,4,5];
+let frist = a[0];
+let second = a[1];
+}
+###非法的数组元素访问
+存在如下代码
+fn main() {
+let a = [1,2,3,4,5];
+let index = 10;
+let item = a[index];
+}
+使用cargo run运行这段代码,会发现程序顺利的通过「编译」,会在「运行时」因为错误而奔溃退出:
+图片
+实际上,每次通过索引来访问一个元素时,Rust都会检查这个索引是否小于当前数组的长度。假如索引超出了当前数组的长度,Rust就会发生panic。
+函数
+Rust代码使用蛇形命名法 来作为规范函数和变量名称的风格。蛇形命名法「只使用小写的字母进行命名,并以下画线分隔单词」。
+fn main() {
+another\_function()
+}
+fn another\_function(){
+println!("函数调用")
+}
+```
+❝
+
+在Rust中,函数定义以fn关键字开始并紧随函数名称与一对圆括号,还有一对花括号用于标识函数体开始和结尾的地方。
+❞
+
+```
+可以使用函数名加圆括号的方式来调用函数。Rust不关心在何处定义函数,只要这些定义对于「使用区域」是可见的既可。
+函数参数
+还可以在函数声明中定义参数,它们是一种「特殊的变量,并被视作函数签名的一部分」。当函数存在参数时,你需要在「调用函数时为这些变量提供具体的值」。
+fn main() {
+another\_function(5)
+}
+fn another\_function(x:i32){
+println!("传入函数的变量为:{}",x)
+}
+```
+❝
+
+在函数签名中,你「必须显示地声明每个参数的类型」。
+❞
+
+```
+###函数体重的语句和表达式
+函数体由若干语句组成,并可以「以一个表达式作为结尾」。由于Rust是一门「基于表达式」的语言,所以它将语句和表达式区别为两个不同的概念。
+```
+「语句」指那些执行操作但不返回值的指令
+「表达式」是指会进行计算并产生一个值作为结果的指令
+
+```
+使用let关键字创建变量并绑定值时使用的指令是一条「语句」。
+fn main(){
+let y = 6;
+}
+这里的函数定义同样是语句,甚至上面整个例子本身也是一条语句。
+```
+❝
+
+「语句」不会返回值
+❞
+
+```
+因此,在Rust中,不能将一条let语句赋值给另一个变量。
+如下代码会产生「编译时」错误。
+fn main(){
+let x = (let y =6);
+}
+与语句不同,「表达式会计算出某个值来作为结果」。另外,表达式也可以作为语句的一部分。
+```
+调用函数是表达式
+调用宏是表达式
+用创建新作用域的花括号({})同样也是表达式
+
+```
+fn main(){
+let x =5;
+①let y = {②
+let x =3;
+③ x + 1
+};
+}
+表达式②是一个代码块,它会计算出4作为结果。而这个结果会作为let语句①的一部分被绑定到变量y上。
+函数的返回值
+函数可以向调用它的代码返回值。需要在箭头符号(->)的后面声明它的类型。
+```
+❝
+
+在Rust中,「函数的返回值等同于函数体的最后一个表达式」。
+❞
+
+可以使用return关键字并指定一个值来提前从函数中返回
+但大多数函数都「隐式」地返回了最后的表达式
+
+```
+fn five() ->i32{
+5
+}
+fn main() {
+let x = five();
+println!("子函数返回的值为:{}",x)
+}
+如上的代码中,five函数的返回值类型通过-> i32被指定了。five函数中的5就是函数的输出值,这也就是它的返回类型会被声明为i32的原因。
+控制流
+在Rust中用来控制程序执行流的结构主要是if表达式和循环表达式。
+if表达式
+if表达式允许根据「条件执行不同的代码分支」。
+fn main() {
+let number = 3;
+if number <5 {
+println!("满足条件")
+}else{
+println!("不满足条件")
+}
+}
+所有的if表达式都会使用if关键字来开头,并紧随一个「判断条件」。其后的花括号中放置了条件为真时需要执行的代码片段。if表达式中与条件相关联的代码块被称为分支
+```
+❝
+
+条件表达式「必须」产生一个bool类型的值,否则会触发「编译错误」
+❞
+
+```
+在Rust中不会「自动尝试」将非布尔类型的值转换为布尔类型。必须「显示」地在if表达式中提供一个「布尔类型作为条件」。
+在let 语句中使用if
+由于if是一个表达式,所以可以在let语句的「右侧」使用它来生成一个值。
+fn main() {
+let condition = true;
+let number = if condition {
+5
+} else {
+6
+};
+println!("number的值为:{}",number)
+}
+```
+❝
+
+代码块输出的值就是其中「最后一个表达式的值」。另外,数字本身也可以作为一个表达式使用。
+❞
+
+```
+上面的例子中,整个if表达式的值取决于究竟哪一个代码块得到执行。
+```
+❝
+
+「所有」if分支可能返回的值都「必须是一种类型」。
+❞
+
+```
+使用循环重复执行代码
+Rust提供了多种循环工具。一个循环会执行循环体中的代码直到结尾,并紧接着回到开头继续执行。
+Rust提供了3种循环
+```
+loop
+while
+for
+
+```
+使用loop重复执行代码
+可以使用loop关键字来指示Rust反复执行某一块代码,直到「显示」地声明退出为止。
+` fn main() { loop { println!("重复执行") } }`
+运行这段程序时,除非「手动强制退出程序」,否则重复执行字样会被反复输出到屏幕中。
+从loop循环中返回值
+loop循环可以被用来反复尝试一些可能会失败的操作,有时候也需要将操作的结果传递给余下的代码。我们可以「将需要返回的值添加到break表达式后面」,也就是用来终止循环表达式后面。
+\`fn main() {
+let mut counter = 0;
+let result = loop {
+counter +=1;
+```
+ if counter ==10 {
+ break counter *2;
+ }
+
+```
+};
+println!("result的值为:{}",result)
+}\`
+上面的代码中,当counter值为10时候,就会走break语句,返回counter \*2。并将对应的值返回给result。
+while 条件循环
+另外一种常见的循环模式是「在每次执行循环体之前都判断一次条件」,假如条件为真则执行代码片段,假如条件为假或执行过程中碰到break就退出当前循环。
+\`fn main() {
+let mut counter = 3;
+```
+while counter!=0{
+ println!("{}",counter);
+ counter = counter -1;
+}
+
+```
+}\`
+使用for来循环遍历集合
+fn main() {
+let a = [1,2,3,4,5];
+for element in a.iter() {
+println!("当前的值为{}",element)
+}
+}
+for循环的安全性和简洁性使它成为Rust中最为常用的循环结构。
diff --git a/Anytype.20240802.082116.32/rust_x.md b/Anytype.20240802.082116.32/rust_x.md
new file mode 100644
index 0000000..f050756
--- /dev/null
+++ b/Anytype.20240802.082116.32/rust_x.md
@@ -0,0 +1 @@
+# Rust
diff --git a/Anytype.20240802.082116.32/rustban-xing-shi-li.md b/Anytype.20240802.082116.32/rustban-xing-shi-li.md
new file mode 100644
index 0000000..ab55f2c
--- /dev/null
+++ b/Anytype.20240802.082116.32/rustban-xing-shi-li.md
@@ -0,0 +1,160 @@
+# Rust版行事历
+
+```
+use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储日期到行事历项向量的映射
+ let mut calendar: HashMap> = HashMap::new();
+
+ // 添加行事历项
+ let date = "2023-09-05";
+ let entries = calendar.entry(date.to_string()).or_insert_with(Vec::new);
+ entries.push(CalendarEntry {
+ id: 1,
+ matter: "Meeting with client".to_string(),
+ content: "Discuss project details".to_string(),
+ importance: 3,
+ });
+ entries.push(CalendarEntry {
+ id: 2,
+ matter: "Lunch with friends".to_string(),
+ content: "Order pizza".to_string(),
+ importance: 2,
+ });
+ entries.push(CalendarEntry {
+ id: 3,
+ matter: "Gym workout".to_string(),
+ content: "Go for a run".to_string(),
+ importance: 1,
+ });
+
+ // 显示所有行事历
+ for (date, entries) in &calendar {
+ println!("Date: {}", date);
+ for entry in entries {
+ println!("ID: {}", entry.id);
+ println!("Matter: {}", entry.matter);
+ println!("Content: {}", entry.content);
+ println!("Importance: {}", entry.importance);
+ }
+ }
+}
+
+
+
+
+//行事历改进版
+use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ date: String,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储序列号到行事历项的映射
+ let mut calendar: HashMap = HashMap::new(); // 哈希映射
+
+ // 添加行事历项
+ calendar.insert("T0001".to_string(), CalendarEntry {
+ id: 1,
+ date: "2023-09-05".to_string(),
+ matter: "Meeting with client".to_string(),
+ content: "Discuss project details".to_string(),
+ importance: 3,
+ });
+ calendar.insert("T0002".to_string(), CalendarEntry {
+ id: 2,
+ date: "2023-09-05".to_string(),
+ matter: "Lunch with friends".to_string(),
+ content: "Order pizza".to_string(),
+ importance: 2,
+ });
+ calendar.insert("T0003".to_string(), CalendarEntry {
+ id: 3,
+ date: "2023-09-05".to_string(),
+ matter: "Gym workout".to_string(),
+ content: "Go for a run".to_string(),
+ importance: 1,
+ });
+
+ // 显示所有行事历
+ for (serial_number, entry) in &calendar { // 遍历哈希映射中的键值对
+ println!("Serial Number: {}", serial_number);
+ println!("ID: {}", entry.id);
+ println!("Date: {}", entry.date);
+ println!("Matter: {}", entry.matter);
+ println!("Content: {}", entry.content);
+ println!("Importance: {}", entry.importance);
+ }
+}
+
+
+//或则
+
+use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ date: String,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储序列号到行事历项的映射
+ let mut calendar: HashMap = HashMap::new(); // 哈希映射
+
+ // 添加行事历项
+ calendar.insert("T0001".to_string(), CalendarEntry {
+ id: 1,
+ date: "2023-09-05".to_string(),
+ matter: "扫描".to_string(),
+ content: "三天以后到云浮扫描石材".to_string(),
+ importance: 3,
+ });
+ calendar.insert("T0002".to_string(), CalendarEntry {
+ id: 2,
+ date: "2023-09-05".to_string(),
+ matter: "设计".to_string(),
+ content: "做设计彩图".to_string(),
+ importance: 2,
+ });
+ calendar.insert("T0003".to_string(), CalendarEntry {
+ id: 3,
+ date: "2023-09-05".to_string(),
+ matter: "出差".to_string(),
+ content: "具体不切的".to_string(),
+ importance: 1,
+ });
+ println!("ID Serial Numbe 日期 事项 内容 等级");
+ // 显示所有行事历
+ for (serial_number, entry) in &calendar { // 遍历哈希映射中的键值对
+
+ println!("{} {} {} {} {} {}", entry.id , serial_number, entry.date, entry.matter, entry.content, entry.importance);
+
+
+ // println!("Serial Number: {}", serial_number);
+ // println!("ID: {}", entry.id);
+ //println!("日期: {}", entry.date);
+ // println!("事项: {}", entry.matter);
+ //println!("内容: {}", entry.content);
+ //println!("等级: {}", entry.importance);
+ }
+}
+
+
+```
+
diff --git a/Anytype.20240802.082116.32/rustshu-ju-jie-gou-yong-fa.md b/Anytype.20240802.082116.32/rustshu-ju-jie-gou-yong-fa.md
new file mode 100644
index 0000000..5fa6bd9
--- /dev/null
+++ b/Anytype.20240802.082116.32/rustshu-ju-jie-gou-yong-fa.md
@@ -0,0 +1,306 @@
+# Rust数据结构用法
+
+```
+深入理解 Rust 中的容器类型及其应用
+原创 Rust 开发者 Rust开发笔记 2023-12-21 13:37 广东
+Rust 作为一种系统编程语言,提供了丰富的容器类型来处理各种数据结构和算法。这些容器类型不仅支持基本的数据存储和访问,还提供了高效的内存管理和安全性保障。本文将详细介绍 Rust 中的几种主要容器类型,包括它们的用法、特点和适用场景,同时提供具体的代码示例来展示如何在实际编程中使用这些容器。
+
+Vector(Vec)
+Vec 的基本概念
+Vec 是 Rust 中最常用的动态数组实现。
+它可以存储多个同类型的值,并在运行时动态增长。
+示例:创建和使用 Vec
+let mut vec = Vec::new();
+vec.push(1);
+vec.push(2);
+vec.push(3);
+
+// 迭代 Vec
+for i in &vec {
+ println!("{}", i);
+}
+
+// 访问元素
+if let Some(first) = vec.get(0) {
+ println!("第一个元素: {}", first);
+}
+HashMap 和 HashSet
+HashMap 的用法
+HashMap 是一个基于键-值对的集合,适用于快速查找场景。
+use std::collections::HashMap;
+
+let mut map = HashMap::new();
+map.insert("key1", "value1");
+map.insert("key2", "value2");
+
+if let Some(value) = map.get("key1") {
+ println!("找到: {}", value);
+}
+HashSet 的特性
+HashSet 提供了一个无序且唯一的元素集合,常用于快速成员检查和去重。
+use std::collections::HashSet;
+
+let mut set = HashSet::new();
+set.insert(1);
+set.insert(2);
+set.insert(3);
+
+if set.contains(&2) {
+ println!("包含数字 2");
+}
+其他容器类型
+VecDeque
+VecDeque 提供了双端队列的功能,支持高效的元素插入和移除。
+use std::collections::VecDeque;
+
+let mut deque = VecDeque::new();
+deque.push_back(1);
+deque.push_front(2);
+
+if let Some(front) = deque.front() {
+ println!("队首元素: {}", front);
+}
+LinkedList
+LinkedList 提供了链表的实现,适用于频繁的插入和删除操作。
+use std::collections::LinkedList;
+
+let mut list = LinkedList::new();
+list.push_back(1);
+list.push_front(2);
+容器类型的选择指南
+根据不同的使用场景和性能要求选择合适的容器类型。
+对于大部分顺序存储需求,推荐使用 Vec。
+当需要快速查找或去重时,考虑使用 HashMap 或 HashSet。
+对于频繁的元素插入和删除,LinkedList 或 VecDeque 可能是更好的选择。
+容器类型的性能考虑
+理解不同容器类型的内存布局和时间复杂度。
+在性能敏感的应用中,合理选择容器类型以优化性能。
+总结
+Rust 的容器类型为数据存储和处理提供了强大的支持。了解和熟悉这些容器类型对于编写高效和可靠的 Rust 程序至关重要。通过本文的介绍,开发者可以根据不同需求选择最合适的容器类型,以构建高性能的 Rust 应用。
+
+
+
+深入理解 Rust 中的元编程
+原创 Rust 开发者 Rust开发笔记 2023-12-19 07:00 广东
+元编程是编程技术中的一个高级概念,它涉及在编译时生成、修改代码的能力。Rust 语言支持强大的元编程功能,主要通过宏系统实现。本文将深入探讨 Rust 中的元编程概念,包括宏的基础、派生宏、过程宏的应用,以及如何在 Rust 项目中高效利用元编程的特性。
+
+Rust 元编程基础
+元编程的定义
+元编程是指程序能够读取、生成、分析或转换其他程序,甚至在运行时修改自己的能力。
+在 Rust 中,这主要通过宏来实现。
+宏系统概述
+Rust 提供了两种类型的宏:声明宏和过程宏。
+声明宏类似于传统的宏,而过程宏更加强大和灵活。
+声明宏的使用
+创建和应用声明宏
+声明宏允许你写出类似函数的结构,用于生成可重复使用的代码模式。
+示例:声明宏
+macro_rules! say_hello {
+ () => (
+ println!("Hello, world!");
+ )
+}
+
+fn main() {
+ say_hello!();
+}
+过程宏的应用
+过程宏的分类
+过程宏主要分为三类:自定义派生宏、类函数宏和类属性宏。
+自定义派生宏
+用于在结构体或枚举上实现特定的 trait。
+示例:派生宏
+use derive_more::Display;
+
+#[derive(Display)]
+enum Language {
+ Rust,
+ JavaScript,
+ Python,
+}
+
+fn main() {
+ let lang = Language::Rust;
+ println!("{}", lang); // Prints "Rust"
+}
+类函数宏和类属性宏
+类函数宏
+类似于函数调用,这些宏接收标记并产生代码。
+类属性宏
+用于结构体、函数和模块,用于创建或修改属性。
+示例:类函数宏
+use serde_json::json;
+
+fn main() {
+ let name = "John Doe";
+ let age = 30;
+ let json = json!({ "name": name, "age": age });
+ println!("{}", json); // Prints '{"name":"John Doe","age":30}'
+}
+元编程的高级应用
+使用场景
+生成 API 绑定、自动化测试、生成 DSL(域特定语言)等。
+效率和安全性
+元编程可以提高开发效率,减少重复代码,并有助于减少运行时错误。
+元编程的挑战与最佳实践
+可读性和复杂性
+过度使用元编程可能导致代码难以理解和维护。在使用时应保持平衡。
+调试和测试
+宏生成的代码可能难以调试,建议编写详尽的测试来确保正确性。
+总结
+Rust 的元编程提供了强大的编译时代码生成能力,使得开发者可以写出更干净、高效的代码。理解和合理应用 Rust 的宏系统,是提升 Rust 编程技能的关键一步。
+
+
+
+
+
+
+
+Rust 语言中的核心数据结构
+原创 Rust 开发者 Rust开发笔记 2024-01-04 07:01 广东
+Rust 是一种系统编程语言,它专注于速度、内存安全和并发性。其强大的类型系统和所有权模型让它在处理数据结构时表现出卓越的性能和可靠性。在本篇文章中,我们将深入探索 Rust 中的核心数据结构,通过详尽的描述和丰富的示例,来理解它们在实际开发中的应用。
+
+数组(Array)
+Rust 中的数组是一个由相同类型元素组成的固定大小的集合。
+
+fn main() {
+ let arr: [i32; 5] = [1, 2, 3, 4, 5]; // 声明一个i32类型的5个元素的数组
+
+ // 访问数组中的元素
+ println!("第一个元素: {}", arr[0]);
+
+ // 遍历数组元素
+ for i in &arr {
+ println!("{}", i);
+ }
+}
+数组长度在编译时就已经确定,且不可变。如果需要变长数组,我们通常使用 vector。
+
+向量(Vector)
+Vector 类似于数组但它是动态的,可以在运行时增长或缩小。
+
+fn main() {
+ let mut vec = Vec::new(); // 创建一个空的 vector
+
+ // 向 vector 添加元素
+ vec.push(1);
+ vec.push(2);
+ vec.push(3);
+
+ // 移除并返回最后一个元素
+ if let Some(last) = vec.pop() {
+ println!("最后一个元素是: {}", last);
+ }
+
+ // 遍历 vector
+ for i in &vec {
+ println!("{}", i);
+ }
+}
+切片(Slice)
+切片是对数组或 vector 的部分连续引用,它使得可以高效地访问序列的子部分而不需要复制。
+
+fn main() {
+ let arr = [1, 2, 3, 4, 5];
+ let slice: &[i32] = &arr[1..4]; // slice 引用数组中的元素 2, 3 和 4
+
+ for &i in slice {
+ println!("{}", i);
+ }
+}
+切片对于函数参数非常有用,因为它们允许函数处理数组或向量的任何部分。
+
+元组(Tuple)
+元组是一种将多种类型的元素组合到一起的数据结构。
+
+fn main() {
+ let tup: (i32, f64, u8) = (500, 6.4, 1); // 一个包含不同类型元素的元组
+
+ // 解构元组
+ let (x, y, z) = tup;
+
+ println!("元组的第一个元素是: {}", x);
+ println!("元组的第二个元素是: {}", y);
+ println!("元组的第三个元素是: {}", z);
+}
+结构体(Struct)
+结构体用于创建自定义的数据类型。
+
+// 定义一个结构体
+struct User {
+ username: String,
+ email: String,
+ sign_in_count: u64,
+ active: bool,
+}
+
+fn build_user(email: String, username: String) -> User {
+ User {
+ email,
+ username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+
+fn main() {
+ // 创建一个 User 实例
+ let user1 = build_user(String::from("someone@example.com"), String::from("someusername123"));
+
+ // 访问结构体字段
+ println!("用户名: {}", user1.username);
+}
+在 Rust 中,结构体对于组织相关联数据是十分重要的。
+
+枚举(Enum)
+枚举允许定义一个类型,它可以是有限集合中的多个不同值中的一个。
+
+// 定义一个枚举,包括若干个变体
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+
+fn main() {
+ // 创建一个 Write 枚举变体的实例
+ let msg = Message::Write(String::from("hello"));
+
+ // 匹配枚举变体
+ match msg {
+ Message::Write(text) => println!("{}", text),
+ _ => println!("其他消息类型"),
+ }
+}
+在 Rust 中,枚举的 match 表达式确保所有可能的情况都被处理。
+
+Map(HashMap)
+HashMap 存储一组键值对,允许根据键快速检索值。
+
+use std::collections::HashMap;
+
+fn main() {
+ // 创建一个 HashMap
+ let mut scores = HashMap::new();
+
+ // 插入键值对
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ // 通过键检索值
+ let team_name = String::from("Blue");
+ if let Some(score) = scores.get(&team_name) {
+ println!("{} 分数是: {}", team_name, score);
+ }
+}
+HashMap 在存储和快速检索数据时非常有用。
+
+总结
+我们已经探讨了 Rust 中的一些主要数据结构,包括数组、向量、切片、元组、结构体、枚举和哈希映射。这些数据结构为处理不同种类的数据和解决编程问题提供强大的工具,而 Rust 的类型系统和所有权模型让它们既安全又高效。希望本文为理解 Rust 的数据结构和它们的用途提供了有价值的视角。
+
+
+
+
+
+```
diff --git a/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x.md b/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x.md
new file mode 100644
index 0000000..8885e8d
--- /dev/null
+++ b/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x.md
@@ -0,0 +1,460 @@
+#Rust学习笔记之基础概念
+##Rust学习笔记之Rust环境配置和入门指南
+##你能所学到的知识点
+```
+在macOS环境中安装Rust 「推荐阅读指数」 ⭐️⭐️⭐️⭐️⭐️
+构建一个Rust应用 「推荐阅读指数」 ⭐️⭐️⭐️
+编译和运行是两个不同的步骤 「推荐阅读指数」 ⭐️⭐️⭐️
+如何使用Cargo构建Rust应用 「推荐阅读指数」 ⭐️⭐️⭐️⭐️⭐️"
+
+```
+###变量与可变性
+```
+在Rust中变量「默认是不可变」的。
+
+```
+当一个变量是不可变的时,一旦它被绑定到某个值上面,这个值就再也无法被改变。
+```
+
+fn main(){
+ let x =7;
+ x = 8;
+}
+
+
+```
+保存并通过命令cargo run来运行代码,会提示如下错误:
+图片这里提示我们cannot assign twice to immutable variable x(不能对不可变量x进行二次赋值)
+变量默认是不可变的,但你可以通过在「声明的变量名称前」添加mut关键字来使其可变。
+```
+fn main() {
+ let mut x =7;
+ println!("x的值是:{}",x);
+ x = 8;
+ println!("x的值是:{}",x);
+}
+
+```
+保存并通过命令cargo run来运行代码,输出结果如下:
+```
+x的值是 7
+x的值是 8
+
+❝
+
+设计一个变量的可变性还需要考量许多因素。
+
+ 当你在使用某些「重型数据结构」时,适当地使用可变性去修改一个实例,可能比赋值和重新返回一个新分配的实例更有效率
+ 当数据结构较为轻量的时候,采用更偏向「函数式」的风格,通过创建新变量来进行赋值,可能会使代码更加易于理解。
+
+❞
+
+```
+###变量和常量之间的不同
+变量的不可变性可能会让你联想到另外一个常见的编程概念:「常量」。
+但是,「常量」和「变量」之间还存在着一些细微的差别
+```
+❝
+
+ 不能用mut关键字来修饰一个常量。
+ 常量「不仅是默认不可变的,它还总是不可变」的
+ 使用const关键字而不是let关键字来声明一个常量
+ 在声明的同时,「必须显示地标注值的类型」
+ 常量可以被声明在任何作用域中,甚至包括全局作用域。
+ 这在一个值需要「被不同部分的代码共同引用」时十分有用
+ 「只能将常量绑定到一个常量表达式上」,而无法将一个函数的返回值或其他需要在运行时计算的值绑定在常量上。
+
+❞
+
+```
+下面是声明常量的例子,数值100被绑定到了常量MAX\_AGE上。在Rust中,约定俗成地使用「下划线分隔的全大写字母来命令一个常量」
+```
+fn main() {
+ const MAX_AGE:u32 = 100;
+}
+
+
+```
+遮蔽
+在Rust中,一个「新的声明变量可以覆盖掉旧的同名变量」,我们把这一个现象描述为:「第一个变量被第二个变量遮蔽了」。这意味着随后使用这个名称时,它指向的将会是第二个变量。
+```
+fn main() {
+ let x =5;
+
+ let x = x + 1;
+
+ let x = x * 2;
+
+ println!("x的值为:{}",x)
+}
+
+```
+```
+这段程序首先将x绑定到值为5上。
+随后它又通过重复let x =语句遮蔽了第一个x变量,并将第一个x变量值加上1的运行结果「绑定到新的变量」x上,此时x的值是6。
+第三个let语句同样遮蔽了第二个x变量,并将第二个x变量值乘以2的结果12绑定到第三个x变量上。
+
+```
+通过使用let,可以将对这个值执行一系列的「变换操作」,并允许这个变量在操作完成后保持自己的不可变性。
+```
+❝
+
+遮蔽机制与mut的一个区别在于:由于重复使用let关键字会创建出「新的变量」,所以「可以在复用变量名称的同时改变它的类型」。
+❞
+
+```
+```
+fn main() {
+ let spaces:&str = "abc";
+ let spaces:usize= spaces.len();
+}
+
+
+```
+第一个 spaces 变量是一个字符串类型,第二个 spaces 变量是一个数字类型。
+###数据类型
+Rust中「每一个值都有其特定的数据类型」,Rust会根据数据的类型来决定应该如何处理它们。
+我们来介绍两种不同的数据类型子集:标量类型和复合类型。
+```
+❝
+
+Rust是一门「静态类型语言」,这意味着它在「编译程序」的过程中需要知道所有变量的具体类型。
+❞
+
+```
+在大部分情况下,编译器都可以根据我们如何绑定、使用变量的值来「自动推导」出变量的类型。但是,在某些时候,当发生数据类型的转换时候,就需要「显示」地添加一个类型标注。
+下面的test变量是将String类型转换为数值类型。
+let test:u32 = "42".parse().expect("非数值类型")
+###标量类型
+```
+❝
+
+标量类型是「单个值」类型的统称。
+❞
+
+```
+在Rust中内建了4种基础的标量类型:
+```
+整数
+浮点数
+布尔值
+字符
+
+```
+###整数类型
+整数是指那些「没有小数部分的数字」。在Rust中存在如下内建整数类型,每一个长度不同的值都存在「有符号」和「无符号」两种变体。
+长度 有符号 无符号
+```
+8-bit i8 u8
+16-bit i16 u16
+32-bit i32(Rust默认) u32
+64-bit i64 u64
+arch isize usize
+
+```
+每一个整数类型的变体都会标明自身是否存在符号,并且拥有一个明确的大小。「有符号和无符号代表了一个整数类型是否拥有描述负数的能力」。
+换句话说,
+```
+对于「有符号」的整数类型来讲,数值需要一个符号来表示当前是否为正
+ 有符号数是通过「二进制补码」的形式进行存储的
+对于「无符号」的整数来讲,「数值永远为正」,不需要符号
+
+❝
+
+ 对于一个位数为n的有符号整数类型,它可以存储从-(2n-1)到(2n-1-1)范围内的「所有整数」。
+ 而对于无符号整数类型而言,则可以存储从0到(2n-1)范围内的「所有整数」。
+
+❞
+
+```
+除了指明位数的类型,还有isize和usize两种特殊的整数类型,它们的长度取决于程序运行的目标平台。
+```
+在64位架构上,它们就是64位的
+在32位架构上,它们就是32位的
+
+```
+Rust对于整数字面量的「默认推导类型」i32通常就是一个很好的选择:它在大部分情形下都是运算速度最快的那一个。
+```
+❝
+
+当Rust发生整数溢出时候,会执行「二进制补码环绕」。也就是说,「任何超出类型最大值的整数都会被环绕为类型最小值」。
+❞
+
+```
+###浮点数类型
+Rust还提供了两种基础的浮点数类型,「浮点数也就是带小数点的数字」。这两种类型是f32和f64,它们分别占用了32位和64位空间。
+```
+❝
+
+在Rust中,默认会将浮点数字面量的类型推导为f64。
+❞
+
+```
+Rust的浮点数使用了IEEE-754标准来进行表述,f32和f64类型分别对应这标准中的「单精度」和「双精度浮点数」。
+###布尔类型
+Rust的布尔类型只拥有两个可能的值true和false,它「只会占据单个字节的空间大小」。使用bool来表示一个布尔类型。
+```
+fn main(){
+ let t = true;
+
+ let f:bool = false;
+}
+
+```
+###字符类型
+在Rust中,char类型被用于描述语言中最基础的「单个字符」。
+\`\`
+```
+fn main(){
+ let c = 'a';
+}
+
+```
+```
+❝
+
+char类型使用「单引号」指定,字符串使用「双引号」指定。
+❞
+
+```
+在Rust中char类型「占4字节」,是一个Unicode标量值,这意味着它可以表示比ASCII多的字符内容。
+###复合类型
+复合类型可以「将多个不同类型的值组合为一个类型」。在Rust提供了两个「内置」的基础复合类型:元组和数组
+###元组类型
+元组可以将其他「不同类型的多个值」组合进一个复合类型中。元组还拥有一个固定的长度:你「无法在声明结束后增加或减少其中的元素数量」。
+为了创建元组,需要把一系列的值使用「逗号分隔」后放置到一对「圆括号」中。元组「每个位置都有一个类型」,这些类型不需要是相同的。
+```
+fn main(){
+ let tup:(i32,f64,u8) = (500,7.8,1);
+}
+
+```
+由于一个元组也被视为一个「单独的复合元素」,所以这里的变量tup被绑定到了整个元组上。为了从元组中获得单个的值,可以使用「模式匹配」来解构元组
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let (x,y,z) = tup;
+}
+除了解构,还可以通过「索引」并使用点号(.)来访问元组中的值。
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let firstValue = x.0;
+let secondValue = x.1;
+}
+###数组类型
+我们同样可以在数组中存储多个值的集合。与元组不同,「数组中每一个元素都必须是相同类型」。 Rust中「数组拥有固定的长度,一旦声明就再也不能随意更改大小」。
+fn main(){
+let a = [1,2,3,4,5];
+}
+当然,Rust标准库也提供了一个更加灵活的动态数组:它是一个类似于数组的集合结构,但它允许用户自由的调整数组的长度。这个我们后面的章节会有详细介绍。
+为了写出数组的类型,你可以使用一对「方括号」,并在方括号中填写数组内所有元素的类型,「一个分号及数组内元素的数量」。
+fn main(){
+let a:[i32;5] = [1,2,3,4,5];
+}
+另外还有一种更简便的初始化数组的方式。在「方括号中指定元素的值并接着填入一个分号及数组的长度」。
+fn main(){
+let a =[3;5];
+}
+以a命令的数组将会拥有5个元素,而这些元素全部拥有相同的「初始值」3。
+###访问数组的元素
+数组是「一整块分配在栈上的内存组成」,可以通过「索引」来访问一个数组中所有元素。
+fn main(){
+let a =[1,2,3,4,5];
+let frist = a[0];
+let second = a[1];
+}
+###非法的数组元素访问
+存在如下代码
+fn main() {
+let a = [1,2,3,4,5];
+let index = 10;
+let item = a[index];
+}
+使用cargo run运行这段代码,会发现程序顺利的通过「编译」,会在「运行时」因为错误而奔溃退出:
+图片
+实际上,每次通过索引来访问一个元素时,Rust都会检查这个索引是否小于当前数组的长度。假如索引超出了当前数组的长度,Rust就会发生panic。
+函数
+Rust代码使用蛇形命名法 来作为规范函数和变量名称的风格。蛇形命名法「只使用小写的字母进行命名,并以下画线分隔单词」。
+fn main() {
+another\_function()
+}
+fn another\_function(){
+println!("函数调用")
+}
+```
+❝
+
+在Rust中,函数定义以fn关键字开始并紧随函数名称与一对圆括号,还有一对花括号用于标识函数体开始和结尾的地方。
+❞
+
+```
+可以使用函数名加圆括号的方式来调用函数。Rust不关心在何处定义函数,只要这些定义对于「使用区域」是可见的既可。
+函数参数
+还可以在函数声明中定义参数,它们是一种「特殊的变量,并被视作函数签名的一部分」。当函数存在参数时,你需要在「调用函数时为这些变量提供具体的值」。
+fn main() {
+another\_function(5)
+}
+fn another\_function(x:i32){
+println!("传入函数的变量为:{}",x)
+}
+```
+❝
+
+在函数签名中,你「必须显示地声明每个参数的类型」。
+❞
+
+```
+###函数体重的语句和表达式
+函数体由若干语句组成,并可以「以一个表达式作为结尾」。由于Rust是一门「基于表达式」的语言,所以它将语句和表达式区别为两个不同的概念。
+```
+「语句」指那些执行操作但不返回值的指令
+「表达式」是指会进行计算并产生一个值作为结果的指令
+
+```
+使用let关键字创建变量并绑定值时使用的指令是一条「语句」。
+fn main(){
+let y = 6;
+}
+这里的函数定义同样是语句,甚至上面整个例子本身也是一条语句。
+```
+❝
+
+「语句」不会返回值
+❞
+
+```
+因此,在Rust中,不能将一条let语句赋值给另一个变量。
+如下代码会产生「编译时」错误。
+fn main(){
+let x = (let y =6);
+}
+与语句不同,「表达式会计算出某个值来作为结果」。另外,表达式也可以作为语句的一部分。
+```
+调用函数是表达式
+调用宏是表达式
+用创建新作用域的花括号({})同样也是表达式
+
+```
+fn main(){
+let x =5;
+①let y = {②
+let x =3;
+③ x + 1
+};
+}
+表达式②是一个代码块,它会计算出4作为结果。而这个结果会作为let语句①的一部分被绑定到变量y上。
+函数的返回值
+函数可以向调用它的代码返回值。需要在箭头符号(->)的后面声明它的类型。
+```
+❝
+
+在Rust中,「函数的返回值等同于函数体的最后一个表达式」。
+❞
+
+可以使用return关键字并指定一个值来提前从函数中返回
+但大多数函数都「隐式」地返回了最后的表达式
+
+```
+fn five() ->i32{
+5
+}
+fn main() {
+let x = five();
+println!("子函数返回的值为:{}",x)
+}
+如上的代码中,five函数的返回值类型通过-> i32被指定了。five函数中的5就是函数的输出值,这也就是它的返回类型会被声明为i32的原因。
+控制流
+在Rust中用来控制程序执行流的结构主要是if表达式和循环表达式。
+if表达式
+if表达式允许根据「条件执行不同的代码分支」。
+fn main() {
+let number = 3;
+if number <5 {
+println!("满足条件")
+}else{
+println!("不满足条件")
+}
+}
+所有的if表达式都会使用if关键字来开头,并紧随一个「判断条件」。其后的花括号中放置了条件为真时需要执行的代码片段。if表达式中与条件相关联的代码块被称为分支
+```
+❝
+
+条件表达式「必须」产生一个bool类型的值,否则会触发「编译错误」
+❞
+
+```
+在Rust中不会「自动尝试」将非布尔类型的值转换为布尔类型。必须「显示」地在if表达式中提供一个「布尔类型作为条件」。
+在let 语句中使用if
+由于if是一个表达式,所以可以在let语句的「右侧」使用它来生成一个值。
+fn main() {
+let condition = true;
+let number = if condition {
+5
+} else {
+6
+};
+println!("number的值为:{}",number)
+}
+```
+❝
+
+代码块输出的值就是其中「最后一个表达式的值」。另外,数字本身也可以作为一个表达式使用。
+❞
+
+```
+上面的例子中,整个if表达式的值取决于究竟哪一个代码块得到执行。
+```
+❝
+
+「所有」if分支可能返回的值都「必须是一种类型」。
+❞
+
+```
+使用循环重复执行代码
+Rust提供了多种循环工具。一个循环会执行循环体中的代码直到结尾,并紧接着回到开头继续执行。
+Rust提供了3种循环
+```
+loop
+while
+for
+
+```
+使用loop重复执行代码
+可以使用loop关键字来指示Rust反复执行某一块代码,直到「显示」地声明退出为止。
+` fn main() { loop { println!("重复执行") } }`
+运行这段程序时,除非「手动强制退出程序」,否则重复执行字样会被反复输出到屏幕中。
+从loop循环中返回值
+loop循环可以被用来反复尝试一些可能会失败的操作,有时候也需要将操作的结果传递给余下的代码。我们可以「将需要返回的值添加到break表达式后面」,也就是用来终止循环表达式后面。
+\`fn main() {
+let mut counter = 0;
+let result = loop {
+counter +=1;
+```
+ if counter ==10 {
+ break counter *2;
+ }
+
+```
+};
+println!("result的值为:{}",result)
+}\`
+上面的代码中,当counter值为10时候,就会走break语句,返回counter \*2。并将对应的值返回给result。
+while 条件循环
+另外一种常见的循环模式是「在每次执行循环体之前都判断一次条件」,假如条件为真则执行代码片段,假如条件为假或执行过程中碰到break就退出当前循环。
+\`fn main() {
+let mut counter = 3;
+```
+while counter!=0{
+ println!("{}",counter);
+ counter = counter -1;
+}
+
+```
+}\`
+使用for来循环遍历集合
+fn main() {
+let a = [1,2,3,4,5];
+for element in a.iter() {
+println!("当前的值为{}",element)
+}
+}
+for循环的安全性和简洁性使它成为Rust中最为常用的循环结构。
diff --git a/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x_m.md b/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x_m.md
new file mode 100644
index 0000000..9ef7dd3
--- /dev/null
+++ b/Anytype.20240802.082116.32/rustxue-xi-bi-ji-zhi-ji-chu-gai-nian-rustxue-x_m.md
@@ -0,0 +1,287 @@
+#Rust学习笔记之基础概念
+##Rust学习笔记之Rust环境配置和入门指南
+##你能所学到的知识点
+###变量与可变性
+在Rust中变量「默认是不可变」的。
+当一个变量是不可变的时,一旦它被绑定到某个值上面,这个值就再也无法被改变。
+保存并通过命令cargo run来运行代码,会提示如下错误:
+图片这里提示我们cannot assign twice to immutable variable x(不能对不可变量x进行二次赋值)
+变量默认是不可变的,但你可以通过在「声明的变量名称前」添加mut关键字来使其可变。
+保存并通过命令cargo run来运行代码,输出结果如下:
+x的值是 7
+x的值是 8
+❝
+设计一个变量的可变性还需要考量许多因素。
+当你在使用某些「重型数据结构」时,适当地使用可变性去修改一个实例,可能比赋值和重新返回一个新分配的实例更有效率
+当数据结构较为轻量的时候,采用更偏向「函数式」的风格,通过创建新变量来进行赋值,可能会使代码更加易于理解。
+❞
+###变量和常量之间的不同
+变量的不可变性可能会让你联想到另外一个常见的编程概念:「常量」。
+但是,「常量」和「变量」之间还存在着一些细微的差别
+❝
+不能用mut关键字来修饰一个常量。
+常量「不仅是默认不可变的,它还总是不可变」的
+使用const关键字而不是let关键字来声明一个常量
+在声明的同时,「必须显示地标注值的类型」
+常量可以被声明在任何作用域中,甚至包括全局作用域。
+这在一个值需要「被不同部分的代码共同引用」时十分有用
+「只能将常量绑定到一个常量表达式上」,而无法将一个函数的返回值或其他需要在运行时计算的值绑定在常量上。
+❞
+下面是声明常量的例子,数值100被绑定到了常量MAX\_AGE上。在Rust中,约定俗成地使用「下划线分隔的全大写字母来命令一个常量」
+遮蔽
+在Rust中,一个「新的声明变量可以覆盖掉旧的同名变量」,我们把这一个现象描述为:「第一个变量被第二个变量遮蔽了」。这意味着随后使用这个名称时,它指向的将会是第二个变量。
+这段程序首先将x绑定到值为5上。
+随后它又通过重复let x =语句遮蔽了第一个x变量,并将第一个x变量值加上1的运行结果「绑定到新的变量」x上,此时x的值是6。
+第三个let语句同样遮蔽了第二个x变量,并将第二个x变量值乘以2的结果12绑定到第三个x变量上。
+通过使用let,可以将对这个值执行一系列的「变换操作」,并允许这个变量在操作完成后保持自己的不可变性。
+❝
+遮蔽机制与mut的一个区别在于:由于重复使用let关键字会创建出「新的变量」,所以「可以在复用变量名称的同时改变它的类型」。
+❞
+第一个 spaces 变量是一个字符串类型,第二个 spaces 变量是一个数字类型。
+###数据类型
+Rust中「每一个值都有其特定的数据类型」,Rust会根据数据的类型来决定应该如何处理它们。
+我们来介绍两种不同的数据类型子集:标量类型和复合类型。
+❝
+Rust是一门「静态类型语言」,这意味着它在「编译程序」的过程中需要知道所有变量的具体类型。
+❞
+在大部分情况下,编译器都可以根据我们如何绑定、使用变量的值来「自动推导」出变量的类型。但是,在某些时候,当发生数据类型的转换时候,就需要「显示」地添加一个类型标注。
+下面的test变量是将String类型转换为数值类型。
+let test:u32 = "42".parse().expect("非数值类型")
+###标量类型
+❝
+标量类型是「单个值」类型的统称。
+❞
+在Rust中内建了4种基础的标量类型:
+整数
+浮点数
+布尔值
+字符
+###整数类型
+整数是指那些「没有小数部分的数字」。在Rust中存在如下内建整数类型,每一个长度不同的值都存在「有符号」和「无符号」两种变体。
+长度 有符号 无符号
+每一个整数类型的变体都会标明自身是否存在符号,并且拥有一个明确的大小。「有符号和无符号代表了一个整数类型是否拥有描述负数的能力」。
+换句话说,
+对于「有符号」的整数类型来讲,数值需要一个符号来表示当前是否为正
+有符号数是通过「二进制补码」的形式进行存储的
+对于「无符号」的整数来讲,「数值永远为正」,不需要符号
+❝
+对于一个位数为n的有符号整数类型,它可以存储从-(2n-1)到(2n-1-1)范围内的「所有整数」。
+而对于无符号整数类型而言,则可以存储从0到(2n-1)范围内的「所有整数」。
+❞
+除了指明位数的类型,还有isize和usize两种特殊的整数类型,它们的长度取决于程序运行的目标平台。
+在64位架构上,它们就是64位的
+在32位架构上,它们就是32位的
+Rust对于整数字面量的「默认推导类型」i32通常就是一个很好的选择:它在大部分情形下都是运算速度最快的那一个。
+❝
+当Rust发生整数溢出时候,会执行「二进制补码环绕」。也就是说,「任何超出类型最大值的整数都会被环绕为类型最小值」。
+❞
+###浮点数类型
+Rust还提供了两种基础的浮点数类型,「浮点数也就是带小数点的数字」。这两种类型是f32和f64,它们分别占用了32位和64位空间。
+❝
+在Rust中,默认会将浮点数字面量的类型推导为f64。
+❞
+Rust的浮点数使用了IEEE-754标准来进行表述,f32和f64类型分别对应这标准中的「单精度」和「双精度浮点数」。
+###布尔类型
+Rust的布尔类型只拥有两个可能的值true和false,它「只会占据单个字节的空间大小」。使用bool来表示一个布尔类型。
+###字符类型
+在Rust中,char类型被用于描述语言中最基础的「单个字符」。
+\`\`
+❝
+char类型使用「单引号」指定,字符串使用「双引号」指定。
+❞
+在Rust中char类型「占4字节」,是一个Unicode标量值,这意味着它可以表示比ASCII多的字符内容。
+###复合类型
+复合类型可以「将多个不同类型的值组合为一个类型」。在Rust提供了两个「内置」的基础复合类型:元组和数组
+###元组类型
+元组可以将其他「不同类型的多个值」组合进一个复合类型中。元组还拥有一个固定的长度:你「无法在声明结束后增加或减少其中的元素数量」。
+为了创建元组,需要把一系列的值使用「逗号分隔」后放置到一对「圆括号」中。元组「每个位置都有一个类型」,这些类型不需要是相同的。
+由于一个元组也被视为一个「单独的复合元素」,所以这里的变量tup被绑定到了整个元组上。为了从元组中获得单个的值,可以使用「模式匹配」来解构元组
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let (x,y,z) = tup;
+}
+除了解构,还可以通过「索引」并使用点号(.)来访问元组中的值。
+fn main(){
+let tup:(i32,f64,u8) = (500,7.8,1);
+let firstValue = x.0;
+let secondValue = x.1;
+}
+###数组类型
+我们同样可以在数组中存储多个值的集合。与元组不同,「数组中每一个元素都必须是相同类型」。 Rust中「数组拥有固定的长度,一旦声明就再也不能随意更改大小」。
+fn main(){
+let a = [1,2,3,4,5];
+}
+当然,Rust标准库也提供了一个更加灵活的动态数组:它是一个类似于数组的集合结构,但它允许用户自由的调整数组的长度。这个我们后面的章节会有详细介绍。
+为了写出数组的类型,你可以使用一对「方括号」,并在方括号中填写数组内所有元素的类型,「一个分号及数组内元素的数量」。
+fn main(){
+let a:[i32;5] = [1,2,3,4,5];
+}
+另外还有一种更简便的初始化数组的方式。在「方括号中指定元素的值并接着填入一个分号及数组的长度」。
+fn main(){
+let a =[3;5];
+}
+以a命令的数组将会拥有5个元素,而这些元素全部拥有相同的「初始值」3。
+###访问数组的元素
+数组是「一整块分配在栈上的内存组成」,可以通过「索引」来访问一个数组中所有元素。
+fn main(){
+let a =[1,2,3,4,5];
+let frist = a[0];
+let second = a[1];
+}
+###非法的数组元素访问
+存在如下代码
+fn main() {
+let a = [1,2,3,4,5];
+let index = 10;
+let item = a[index];
+}
+使用cargo run运行这段代码,会发现程序顺利的通过「编译」,会在「运行时」因为错误而奔溃退出:
+图片
+实际上,每次通过索引来访问一个元素时,Rust都会检查这个索引是否小于当前数组的长度。假如索引超出了当前数组的长度,Rust就会发生panic。
+函数
+Rust代码使用蛇形命名法 来作为规范函数和变量名称的风格。蛇形命名法「只使用小写的字母进行命名,并以下画线分隔单词」。
+fn main() {
+another\_function()
+}
+fn another\_function(){
+println!("函数调用")
+}
+❝
+在Rust中,函数定义以fn关键字开始并紧随函数名称与一对圆括号,还有一对花括号用于标识函数体开始和结尾的地方。
+❞
+可以使用函数名加圆括号的方式来调用函数。Rust不关心在何处定义函数,只要这些定义对于「使用区域」是可见的既可。
+函数参数
+还可以在函数声明中定义参数,它们是一种「特殊的变量,并被视作函数签名的一部分」。当函数存在参数时,你需要在「调用函数时为这些变量提供具体的值」。
+fn main() {
+another\_function(5)
+}
+fn another\_function(x:i32){
+println!("传入函数的变量为:{}",x)
+}
+❝
+在函数签名中,你「必须显示地声明每个参数的类型」。
+❞
+###函数体重的语句和表达式
+函数体由若干语句组成,并可以「以一个表达式作为结尾」。由于Rust是一门「基于表达式」的语言,所以它将语句和表达式区别为两个不同的概念。
+「语句」指那些执行操作但不返回值的指令
+「表达式」是指会进行计算并产生一个值作为结果的指令
+使用let关键字创建变量并绑定值时使用的指令是一条「语句」。
+fn main(){
+let y = 6;
+}
+这里的函数定义同样是语句,甚至上面整个例子本身也是一条语句。
+❝
+「语句」不会返回值
+❞
+因此,在Rust中,不能将一条let语句赋值给另一个变量。
+如下代码会产生「编译时」错误。
+fn main(){
+let x = (let y =6);
+}
+与语句不同,「表达式会计算出某个值来作为结果」。另外,表达式也可以作为语句的一部分。
+调用函数是表达式
+调用宏是表达式
+用创建新作用域的花括号({})同样也是表达式
+fn main(){
+let x =5;
+①let y = {②
+let x =3;
+③ x + 1
+};
+}
+表达式②是一个代码块,它会计算出4作为结果。而这个结果会作为let语句①的一部分被绑定到变量y上。
+函数的返回值
+函数可以向调用它的代码返回值。需要在箭头符号(->)的后面声明它的类型。
+❝
+在Rust中,「函数的返回值等同于函数体的最后一个表达式」。
+❞
+可以使用return关键字并指定一个值来提前从函数中返回
+但大多数函数都「隐式」地返回了最后的表达式
+fn five() ->i32{
+5
+}
+fn main() {
+let x = five();
+println!("子函数返回的值为:{}",x)
+}
+如上的代码中,five函数的返回值类型通过-> i32被指定了。five函数中的5就是函数的输出值,这也就是它的返回类型会被声明为i32的原因。
+控制流
+在Rust中用来控制程序执行流的结构主要是if表达式和循环表达式。
+if表达式
+if表达式允许根据「条件执行不同的代码分支」。
+fn main() {
+let number = 3;
+if number <5 {
+println!("满足条件")
+}else{
+println!("不满足条件")
+}
+}
+所有的if表达式都会使用if关键字来开头,并紧随一个「判断条件」。其后的花括号中放置了条件为真时需要执行的代码片段。if表达式中与条件相关联的代码块被称为分支
+❝
+条件表达式「必须」产生一个bool类型的值,否则会触发「编译错误」
+❞
+在Rust中不会「自动尝试」将非布尔类型的值转换为布尔类型。必须「显示」地在if表达式中提供一个「布尔类型作为条件」。
+在let 语句中使用if
+由于if是一个表达式,所以可以在let语句的「右侧」使用它来生成一个值。
+fn main() {
+let condition = true;
+let number = if condition {
+5
+} else {
+6
+};
+println!("number的值为:{}",number)
+}
+❝
+代码块输出的值就是其中「最后一个表达式的值」。另外,数字本身也可以作为一个表达式使用。
+❞
+上面的例子中,整个if表达式的值取决于究竟哪一个代码块得到执行。
+❝
+「所有」if分支可能返回的值都「必须是一种类型」。
+❞
+使用循环重复执行代码
+Rust提供了多种循环工具。一个循环会执行循环体中的代码直到结尾,并紧接着回到开头继续执行。
+Rust提供了3种循环
+loop
+while
+for
+使用loop重复执行代码
+可以使用loop关键字来指示Rust反复执行某一块代码,直到「显示」地声明退出为止。
+\`
+fn main() {
+loop {
+println!("重复执行")
+}
+}\`
+运行这段程序时,除非「手动强制退出程序」,否则重复执行字样会被反复输出到屏幕中。
+从loop循环中返回值
+loop循环可以被用来反复尝试一些可能会失败的操作,有时候也需要将操作的结果传递给余下的代码。我们可以「将需要返回的值添加到break表达式后面」,也就是用来终止循环表达式后面。
+\`fn main() {
+let mut counter = 0;
+let result = loop {
+counter +=1;
+if counter ==10 {
+break counter \*2;
+}
+};
+println!("result的值为:{}",result)
+}\`
+上面的代码中,当counter值为10时候,就会走break语句,返回counter \*2。并将对应的值返回给result。
+while 条件循环
+另外一种常见的循环模式是「在每次执行循环体之前都判断一次条件」,假如条件为真则执行代码片段,假如条件为假或执行过程中碰到break就退出当前循环。
+\`fn main() {
+let mut counter = 3;
+while counter!=0{
+println!("{}",counter);
+counter = counter -1;
+}
+}\`
+使用for来循环遍历集合
+fn main() {
+let a = [1,2,3,4,5];
+for element in a.iter() {
+println!("当前的值为{}",element)
+}
+}
+for循环的安全性和简洁性使它成为Rust中最为常用的循环结构。
diff --git a/Anytype.20240802.082116.32/scope.md b/Anytype.20240802.082116.32/scope.md
new file mode 100644
index 0000000..db7040a
--- /dev/null
+++ b/Anytype.20240802.082116.32/scope.md
@@ -0,0 +1 @@
+# Scope
diff --git a/Anytype.20240802.082116.32/segfault.md b/Anytype.20240802.082116.32/segfault.md
new file mode 100644
index 0000000..f57d0e6
--- /dev/null
+++ b/Anytype.20240802.082116.32/segfault.md
@@ -0,0 +1,8 @@
+# Segfault
+
+
+[https://shell.segfault.net/#/login](https://shell.segfault.net/#/login)
+KEY:
+
+adm-xnRWoCUOB7jHJgWNukPKlIQU
+
diff --git a/Anytype.20240802.082116.32/set-of.md b/Anytype.20240802.082116.32/set-of.md
new file mode 100644
index 0000000..79f3687
--- /dev/null
+++ b/Anytype.20240802.082116.32/set-of.md
@@ -0,0 +1 @@
+# Set of
diff --git a/Anytype.20240802.082116.32/set.md b/Anytype.20240802.082116.32/set.md
new file mode 100644
index 0000000..7ccbd87
--- /dev/null
+++ b/Anytype.20240802.082116.32/set.md
@@ -0,0 +1 @@
+# Set
diff --git a/Anytype.20240802.082116.32/shared-spaces-limit.md b/Anytype.20240802.082116.32/shared-spaces-limit.md
new file mode 100644
index 0000000..2bf6aa0
--- /dev/null
+++ b/Anytype.20240802.082116.32/shared-spaces-limit.md
@@ -0,0 +1 @@
+# Shared spaces limit
diff --git a/Anytype.20240802.082116.32/shen-ru-li-jie-rust-zhong-de-rong-qi-lei-xing-.md b/Anytype.20240802.082116.32/shen-ru-li-jie-rust-zhong-de-rong-qi-lei-xing-.md
new file mode 100644
index 0000000..c02f88a
--- /dev/null
+++ b/Anytype.20240802.082116.32/shen-ru-li-jie-rust-zhong-de-rong-qi-lei-xing-.md
@@ -0,0 +1,306 @@
+```
+
+深入理解 Rust 中的容器类型及其应用
+原创 Rust 开发者 Rust开发笔记 2023-12-21 13:37 广东
+Rust 作为一种系统编程语言,提供了丰富的容器类型来处理各种数据结构和算法。这些容器类型不仅支持基本的数据存储和访问,还提供了高效的内存管理和安全性保障。本文将详细介绍 Rust 中的几种主要容器类型,包括它们的用法、特点和适用场景,同时提供具体的代码示例来展示如何在实际编程中使用这些容器。
+
+Vector(Vec)
+Vec 的基本概念
+Vec 是 Rust 中最常用的动态数组实现。
+它可以存储多个同类型的值,并在运行时动态增长。
+示例:创建和使用 Vec
+let mut vec = Vec::new();
+vec.push(1);
+vec.push(2);
+vec.push(3);
+
+// 迭代 Vec
+for i in &vec {
+ println!("{}", i);
+}
+
+// 访问元素
+if let Some(first) = vec.get(0) {
+ println!("第一个元素: {}", first);
+}
+HashMap 和 HashSet
+HashMap 的用法
+HashMap 是一个基于键-值对的集合,适用于快速查找场景。
+use std::collections::HashMap;
+
+let mut map = HashMap::new();
+map.insert("key1", "value1");
+map.insert("key2", "value2");
+
+if let Some(value) = map.get("key1") {
+ println!("找到: {}", value);
+}
+HashSet 的特性
+HashSet 提供了一个无序且唯一的元素集合,常用于快速成员检查和去重。
+use std::collections::HashSet;
+
+let mut set = HashSet::new();
+set.insert(1);
+set.insert(2);
+set.insert(3);
+
+if set.contains(&2) {
+ println!("包含数字 2");
+}
+其他容器类型
+VecDeque
+VecDeque 提供了双端队列的功能,支持高效的元素插入和移除。
+use std::collections::VecDeque;
+
+let mut deque = VecDeque::new();
+deque.push_back(1);
+deque.push_front(2);
+
+if let Some(front) = deque.front() {
+ println!("队首元素: {}", front);
+}
+LinkedList
+LinkedList 提供了链表的实现,适用于频繁的插入和删除操作。
+use std::collections::LinkedList;
+
+let mut list = LinkedList::new();
+list.push_back(1);
+list.push_front(2);
+容器类型的选择指南
+根据不同的使用场景和性能要求选择合适的容器类型。
+对于大部分顺序存储需求,推荐使用 Vec。
+当需要快速查找或去重时,考虑使用 HashMap 或 HashSet。
+对于频繁的元素插入和删除,LinkedList 或 VecDeque 可能是更好的选择。
+容器类型的性能考虑
+理解不同容器类型的内存布局和时间复杂度。
+在性能敏感的应用中,合理选择容器类型以优化性能。
+总结
+Rust 的容器类型为数据存储和处理提供了强大的支持。了解和熟悉这些容器类型对于编写高效和可靠的 Rust 程序至关重要。通过本文的介绍,开发者可以根据不同需求选择最合适的容器类型,以构建高性能的 Rust 应用。
+
+
+
+深入理解 Rust 中的元编程
+原创 Rust 开发者 Rust开发笔记 2023-12-19 07:00 广东
+元编程是编程技术中的一个高级概念,它涉及在编译时生成、修改代码的能力。Rust 语言支持强大的元编程功能,主要通过宏系统实现。本文将深入探讨 Rust 中的元编程概念,包括宏的基础、派生宏、过程宏的应用,以及如何在 Rust 项目中高效利用元编程的特性。
+
+Rust 元编程基础
+元编程的定义
+元编程是指程序能够读取、生成、分析或转换其他程序,甚至在运行时修改自己的能力。
+在 Rust 中,这主要通过宏来实现。
+宏系统概述
+Rust 提供了两种类型的宏:声明宏和过程宏。
+声明宏类似于传统的宏,而过程宏更加强大和灵活。
+声明宏的使用
+创建和应用声明宏
+声明宏允许你写出类似函数的结构,用于生成可重复使用的代码模式。
+示例:声明宏
+macro_rules! say_hello {
+ () => (
+ println!("Hello, world!");
+ )
+}
+
+fn main() {
+ say_hello!();
+}
+过程宏的应用
+过程宏的分类
+过程宏主要分为三类:自定义派生宏、类函数宏和类属性宏。
+自定义派生宏
+用于在结构体或枚举上实现特定的 trait。
+示例:派生宏
+use derive_more::Display;
+
+#[derive(Display)]
+enum Language {
+ Rust,
+ JavaScript,
+ Python,
+}
+
+fn main() {
+ let lang = Language::Rust;
+ println!("{}", lang); // Prints "Rust"
+}
+类函数宏和类属性宏
+类函数宏
+类似于函数调用,这些宏接收标记并产生代码。
+类属性宏
+用于结构体、函数和模块,用于创建或修改属性。
+示例:类函数宏
+use serde_json::json;
+
+fn main() {
+ let name = "John Doe";
+ let age = 30;
+ let json = json!({ "name": name, "age": age });
+ println!("{}", json); // Prints '{"name":"John Doe","age":30}'
+}
+元编程的高级应用
+使用场景
+生成 API 绑定、自动化测试、生成 DSL(域特定语言)等。
+效率和安全性
+元编程可以提高开发效率,减少重复代码,并有助于减少运行时错误。
+元编程的挑战与最佳实践
+可读性和复杂性
+过度使用元编程可能导致代码难以理解和维护。在使用时应保持平衡。
+调试和测试
+宏生成的代码可能难以调试,建议编写详尽的测试来确保正确性。
+总结
+Rust 的元编程提供了强大的编译时代码生成能力,使得开发者可以写出更干净、高效的代码。理解和合理应用 Rust 的宏系统,是提升 Rust 编程技能的关键一步。
+
+
+
+
+
+
+
+Rust 语言中的核心数据结构
+原创 Rust 开发者 Rust开发笔记 2024-01-04 07:01 广东
+Rust 是一种系统编程语言,它专注于速度、内存安全和并发性。其强大的类型系统和所有权模型让它在处理数据结构时表现出卓越的性能和可靠性。在本篇文章中,我们将深入探索 Rust 中的核心数据结构,通过详尽的描述和丰富的示例,来理解它们在实际开发中的应用。
+
+数组(Array)
+Rust 中的数组是一个由相同类型元素组成的固定大小的集合。
+
+fn main() {
+ let arr: [i32; 5] = [1, 2, 3, 4, 5]; // 声明一个i32类型的5个元素的数组
+
+ // 访问数组中的元素
+ println!("第一个元素: {}", arr[0]);
+
+ // 遍历数组元素
+ for i in &arr {
+ println!("{}", i);
+ }
+}
+数组长度在编译时就已经确定,且不可变。如果需要变长数组,我们通常使用 vector。
+
+向量(Vector)
+Vector 类似于数组但它是动态的,可以在运行时增长或缩小。
+
+fn main() {
+ let mut vec = Vec::new(); // 创建一个空的 vector
+
+ // 向 vector 添加元素
+ vec.push(1);
+ vec.push(2);
+ vec.push(3);
+
+ // 移除并返回最后一个元素
+ if let Some(last) = vec.pop() {
+ println!("最后一个元素是: {}", last);
+ }
+
+ // 遍历 vector
+ for i in &vec {
+ println!("{}", i);
+ }
+}
+切片(Slice)
+切片是对数组或 vector 的部分连续引用,它使得可以高效地访问序列的子部分而不需要复制。
+
+fn main() {
+ let arr = [1, 2, 3, 4, 5];
+ let slice: &[i32] = &arr[1..4]; // slice 引用数组中的元素 2, 3 和 4
+
+ for &i in slice {
+ println!("{}", i);
+ }
+}
+切片对于函数参数非常有用,因为它们允许函数处理数组或向量的任何部分。
+
+元组(Tuple)
+元组是一种将多种类型的元素组合到一起的数据结构。
+
+fn main() {
+ let tup: (i32, f64, u8) = (500, 6.4, 1); // 一个包含不同类型元素的元组
+
+ // 解构元组
+ let (x, y, z) = tup;
+
+ println!("元组的第一个元素是: {}", x);
+ println!("元组的第二个元素是: {}", y);
+ println!("元组的第三个元素是: {}", z);
+}
+结构体(Struct)
+结构体用于创建自定义的数据类型。
+
+// 定义一个结构体
+struct User {
+ username: String,
+ email: String,
+ sign_in_count: u64,
+ active: bool,
+}
+
+fn build_user(email: String, username: String) -> User {
+ User {
+ email,
+ username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+
+fn main() {
+ // 创建一个 User 实例
+ let user1 = build_user(String::from("someone@example.com"), String::from("someusername123"));
+
+ // 访问结构体字段
+ println!("用户名: {}", user1.username);
+}
+在 Rust 中,结构体对于组织相关联数据是十分重要的。
+
+枚举(Enum)
+枚举允许定义一个类型,它可以是有限集合中的多个不同值中的一个。
+
+// 定义一个枚举,包括若干个变体
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+
+fn main() {
+ // 创建一个 Write 枚举变体的实例
+ let msg = Message::Write(String::from("hello"));
+
+ // 匹配枚举变体
+ match msg {
+ Message::Write(text) => println!("{}", text),
+ _ => println!("其他消息类型"),
+ }
+}
+在 Rust 中,枚举的 match 表达式确保所有可能的情况都被处理。
+
+Map(HashMap)
+HashMap 存储一组键值对,允许根据键快速检索值。
+
+use std::collections::HashMap;
+
+fn main() {
+ // 创建一个 HashMap
+ let mut scores = HashMap::new();
+
+ // 插入键值对
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ // 通过键检索值
+ let team_name = String::from("Blue");
+ if let Some(score) = scores.get(&team_name) {
+ println!("{} 分数是: {}", team_name, score);
+ }
+}
+HashMap 在存储和快速检索数据时非常有用。
+
+总结
+我们已经探讨了 Rust 中的一些主要数据结构,包括数组、向量、切片、元组、结构体、枚举和哈希映射。这些数据结构为处理不同种类的数据和解决编程问题提供强大的工具,而 Rust 的类型系统和所有权模型让它们既安全又高效。希望本文为理解 Rust 的数据结构和它们的用途提供了有价值的视角。
+
+
+
+
+
+```
+Rust数据结构用法
diff --git a/Anytype.20240802.082116.32/size.md b/Anytype.20240802.082116.32/size.md
new file mode 100644
index 0000000..cb063b9
--- /dev/null
+++ b/Anytype.20240802.082116.32/size.md
@@ -0,0 +1 @@
+# Size
diff --git a/Anytype.20240802.082116.32/smartblock-types.md b/Anytype.20240802.082116.32/smartblock-types.md
new file mode 100644
index 0000000..2db4013
--- /dev/null
+++ b/Anytype.20240802.082116.32/smartblock-types.md
@@ -0,0 +1 @@
+# Smartblock types
diff --git a/Anytype.20240802.082116.32/snippet.md b/Anytype.20240802.082116.32/snippet.md
new file mode 100644
index 0000000..5dfac6e
--- /dev/null
+++ b/Anytype.20240802.082116.32/snippet.md
@@ -0,0 +1 @@
+# Snippet
diff --git a/Anytype.20240802.082116.32/source-file-path.md b/Anytype.20240802.082116.32/source-file-path.md
new file mode 100644
index 0000000..0410b46
--- /dev/null
+++ b/Anytype.20240802.082116.32/source-file-path.md
@@ -0,0 +1 @@
+# Source file path
diff --git a/Anytype.20240802.082116.32/source-object.md b/Anytype.20240802.082116.32/source-object.md
new file mode 100644
index 0000000..3501b11
--- /dev/null
+++ b/Anytype.20240802.082116.32/source-object.md
@@ -0,0 +1 @@
+# Source object
diff --git a/Anytype.20240802.082116.32/source.md b/Anytype.20240802.082116.32/source.md
new file mode 100644
index 0000000..f46cf28
--- /dev/null
+++ b/Anytype.20240802.082116.32/source.md
@@ -0,0 +1 @@
+# Source
diff --git a/Anytype.20240802.082116.32/space-access-type.md b/Anytype.20240802.082116.32/space-access-type.md
new file mode 100644
index 0000000..4d9d00e
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-access-type.md
@@ -0,0 +1 @@
+# Space access type
diff --git a/Anytype.20240802.082116.32/space-accessibility.md b/Anytype.20240802.082116.32/space-accessibility.md
new file mode 100644
index 0000000..d7957d8
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-accessibility.md
@@ -0,0 +1,2 @@
+# Space accessibility
+There are two options of accessibility of workspace - private (0) or public (1)
diff --git a/Anytype.20240802.082116.32/space-dashboard-id.md b/Anytype.20240802.082116.32/space-dashboard-id.md
new file mode 100644
index 0000000..0709eb2
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-dashboard-id.md
@@ -0,0 +1 @@
+# Space Dashboard ID
diff --git a/Anytype.20240802.082116.32/space-id.md b/Anytype.20240802.082116.32/space-id.md
new file mode 100644
index 0000000..9d8ed82
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-id.md
@@ -0,0 +1 @@
+# Space ID
diff --git a/Anytype.20240802.082116.32/space-member-ji.md b/Anytype.20240802.082116.32/space-member-ji.md
new file mode 100644
index 0000000..18accb9
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-member-ji.md
@@ -0,0 +1 @@
+# Space member 集
diff --git a/Anytype.20240802.082116.32/space-member-ji_7.md b/Anytype.20240802.082116.32/space-member-ji_7.md
new file mode 100644
index 0000000..18accb9
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-member-ji_7.md
@@ -0,0 +1 @@
+# Space member 集
diff --git a/Anytype.20240802.082116.32/space-member.md b/Anytype.20240802.082116.32/space-member.md
new file mode 100644
index 0000000..b400861
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-member.md
@@ -0,0 +1 @@
+# Space member
diff --git a/Anytype.20240802.082116.32/space-shareable-status.md b/Anytype.20240802.082116.32/space-shareable-status.md
new file mode 100644
index 0000000..91a0faf
--- /dev/null
+++ b/Anytype.20240802.082116.32/space-shareable-status.md
@@ -0,0 +1 @@
+# Space shareable status
diff --git a/Anytype.20240802.082116.32/space.md b/Anytype.20240802.082116.32/space.md
new file mode 100644
index 0000000..3fb7222
--- /dev/null
+++ b/Anytype.20240802.082116.32/space.md
@@ -0,0 +1 @@
+# Space
diff --git a/Anytype.20240802.082116.32/space_2.md b/Anytype.20240802.082116.32/space_2.md
new file mode 100644
index 0000000..3fb7222
--- /dev/null
+++ b/Anytype.20240802.082116.32/space_2.md
@@ -0,0 +1 @@
+# Space
diff --git a/Anytype.20240802.082116.32/space_j.md b/Anytype.20240802.082116.32/space_j.md
new file mode 100644
index 0000000..3fb7222
--- /dev/null
+++ b/Anytype.20240802.082116.32/space_j.md
@@ -0,0 +1 @@
+# Space
diff --git a/Anytype.20240802.082116.32/stakeholders.md b/Anytype.20240802.082116.32/stakeholders.md
new file mode 100644
index 0000000..1dfd87a
--- /dev/null
+++ b/Anytype.20240802.082116.32/stakeholders.md
@@ -0,0 +1 @@
+# Stakeholders
diff --git a/Anytype.20240802.082116.32/status.md b/Anytype.20240802.082116.32/status.md
new file mode 100644
index 0000000..4a41d91
--- /dev/null
+++ b/Anytype.20240802.082116.32/status.md
@@ -0,0 +1 @@
+# Status
diff --git a/Anytype.20240802.082116.32/sui-ji.md b/Anytype.20240802.082116.32/sui-ji.md
new file mode 100644
index 0000000..59ed7e8
--- /dev/null
+++ b/Anytype.20240802.082116.32/sui-ji.md
@@ -0,0 +1 @@
+# 随记
diff --git a/Anytype.20240802.082116.32/tag.md b/Anytype.20240802.082116.32/tag.md
new file mode 100644
index 0000000..5dc4991
--- /dev/null
+++ b/Anytype.20240802.082116.32/tag.md
@@ -0,0 +1 @@
+# Tag
diff --git a/Anytype.20240802.082116.32/task.md b/Anytype.20240802.082116.32/task.md
new file mode 100644
index 0000000..45eb70e
--- /dev/null
+++ b/Anytype.20240802.082116.32/task.md
@@ -0,0 +1,7 @@
+# Task
+##
+## Details
+ ---
+
+
+
diff --git a/Anytype.20240802.082116.32/task_18.md b/Anytype.20240802.082116.32/task_18.md
new file mode 100644
index 0000000..3c0b3e5
--- /dev/null
+++ b/Anytype.20240802.082116.32/task_18.md
@@ -0,0 +1 @@
+# Task
diff --git a/Anytype.20240802.082116.32/task_j.md b/Anytype.20240802.082116.32/task_j.md
new file mode 100644
index 0000000..baa9e55
--- /dev/null
+++ b/Anytype.20240802.082116.32/task_j.md
@@ -0,0 +1 @@
+# Task
diff --git a/Anytype.20240802.082116.32/task_t.md b/Anytype.20240802.082116.32/task_t.md
new file mode 100644
index 0000000..45eb70e
--- /dev/null
+++ b/Anytype.20240802.082116.32/task_t.md
@@ -0,0 +1,7 @@
+# Task
+##
+## Details
+ ---
+
+
+
diff --git a/Anytype.20240802.082116.32/task_v.md b/Anytype.20240802.082116.32/task_v.md
new file mode 100644
index 0000000..45eb70e
--- /dev/null
+++ b/Anytype.20240802.082116.32/task_v.md
@@ -0,0 +1,7 @@
+# Task
+##
+## Details
+ ---
+
+
+
diff --git a/Anytype.20240802.082116.32/tasks.md b/Anytype.20240802.082116.32/tasks.md
new file mode 100644
index 0000000..2db893c
--- /dev/null
+++ b/Anytype.20240802.082116.32/tasks.md
@@ -0,0 +1,2 @@
+# Tasks
+Tasks collected from everywhere in Anytype
diff --git a/Anytype.20240802.082116.32/tasks_g.md b/Anytype.20240802.082116.32/tasks_g.md
new file mode 100644
index 0000000..0a3fc0b
--- /dev/null
+++ b/Anytype.20240802.082116.32/tasks_g.md
@@ -0,0 +1 @@
+# Tasks
diff --git a/Anytype.20240802.082116.32/temp.md b/Anytype.20240802.082116.32/temp.md
new file mode 100644
index 0000000..76f4bc9
--- /dev/null
+++ b/Anytype.20240802.082116.32/temp.md
@@ -0,0 +1 @@
+# Temp
diff --git a/Anytype.20240802.082116.32/template.md b/Anytype.20240802.082116.32/template.md
new file mode 100644
index 0000000..7f35a4e
--- /dev/null
+++ b/Anytype.20240802.082116.32/template.md
@@ -0,0 +1 @@
+# Template
diff --git a/Anytype.20240802.082116.32/templates-type.md b/Anytype.20240802.082116.32/templates-type.md
new file mode 100644
index 0000000..d5c0c7e
--- /dev/null
+++ b/Anytype.20240802.082116.32/templates-type.md
@@ -0,0 +1 @@
+# Template's Type
diff --git a/Anytype.20240802.082116.32/test-xiao-guo-ru-he.md b/Anytype.20240802.082116.32/test-xiao-guo-ru-he.md
new file mode 100644
index 0000000..f694c5e
--- /dev/null
+++ b/Anytype.20240802.082116.32/test-xiao-guo-ru-he.md
@@ -0,0 +1 @@
+# Test 效果如何
diff --git a/Anytype.20240802.082116.32/the-internet-as-our-nervous-system-from-cloud-.md b/Anytype.20240802.082116.32/the-internet-as-our-nervous-system-from-cloud-.md
new file mode 100644
index 0000000..d980751
--- /dev/null
+++ b/Anytype.20240802.082116.32/the-internet-as-our-nervous-system-from-cloud-.md
@@ -0,0 +1,38 @@
+# The Internet as our Nervous System: from Cloud to Local-first
+## Where it all starts
+Imagine for a moment that you, and all of the people around you, are single neurons. Throughout most of human history, we could only talk to other neurons close to us via 'synapses' of a spoken language.
+With the invention of writing, we discovered the possibility to connect all of these neurons. Our speed of communication was slow and the messages we transmitted were few. Sometimes it took centuries for some transformative ideas like arabic numbers or heliocentrism to travel across the globe. Still, we solitary neurons became globally connected for the first time.
+With the invention of the telegraph, telephone, radio and television, the speed and quality of our connections improved vastly. Our shared network became stronger and more diverse in its messages.
+## The Internet as our superpower
+Then came the Internet - the quintessence of interconnectedness. More than any other time in human history, most of us are connected to the nervous system of humanity. Many of us spend most of our waking hours on the Internet. We can broadcast what we think and feel, communicate with other neurons, and co-create intricate webs of cooperation. We can think of this digital nervous system as our collective superpower.
+The internet is built as a great foundation for this nervous system. It is decentralized by design - no single party controls it.
+## The cloud and its limitations
+The problem is that the modern internet relies strongly on cloud technologies, where client applications communicate with each other only via servers. It is akin to having a server between any two neurons in the nervous system, or each neuron being inside a box that decides if the signal from this neuron can go through.
+In cloud architecture, application developers store keys of the accounts of users on their behalf, so **they are the keepers of keys**. It means that these applications now hold the power to voice down some and promote others, to block and to recommend, to decide which information is shared and distributed on the Internet. Software companies can block people based on their geographic location, based on random algorithms, personal beliefs of their founders or shareholders, and the political agenda of powerful groups they are close to.
+This separateness is not the biggest problem, what is more dangerous is that** in each of these versions of the Internet the neurons can’t talk and express themselves directly to each other.** Servers control our communication with those closest to us: family members, neighbors and local communities.
+The problems with cloud-based architecture don't stop there. Not only do central servers control who can do what, but their control is ubiquitous. Even when texting your family member on the couch next to you, the signal from your device to theirs needs to go to the application server first, and only after that, return to your own living room.
+If that center fails or does not respond, it means that even nearby neurons cannot communicate digitally. For a biological organism, an unresponsive nervous system would mean an instant death. The nervous system of humanity needs an upgrade.
+## A no-one in between nervous system
+There are parts of the internet where server-first architecture is more efficient - massive online games, uber-like networks and other examples. For the role the communication layer plays, we can use a better approach than the cloud.
+If we are to design a nervous system that's resilient and agile, it needs a different wiring - when neurons connect to each other directly. For this we need to give the keys to neurons and wire them differently - on local first principles. This wiring we call a **“no-one in between” communication system**.
+A **no-one in between** wiring is a better foundation for families, communities and associations of creators.
+## How to implement. Technological foundation.
+Two pieces of technology look striking, especially if we imagine the combined power. These technologies come under the obscure names of Public Key Cryptography and CRDTs.
+**Public key cryptography** can protect digital data in a way that is not possible in the world of atoms. Imagine each of us having a vault that no one in the whole world can break into. Not a malicious hacker, not a powerful state, not even if they combined forces. This is not possible in the world of atoms.
+By using public key cryptography, we can generate your very own vault where your data and messages live, and which has two keys: private and public. Knowing your public key, anyone can send encrypted messages but only you - the holder of the private key - can open the vault and see what's inside. All of the computational resources on Earth are not enough to decrypt a single message. Generating such keys does not cost any money and can be done on any computer, without the need to connect to the internet. Vault creation and authorization can be fully independent from anyone. It means each neuron can be digitally independent.
+Once we have our independent vaults from which we control the keys, we can also enable vaults to talk to each other on local-first principles. This is where CRDTs come in.
+In traditional cloud architecture (also known as client-server), all clients need to connect to a server where the master record is kept. This server resolves potential conflicts when clients are working on the same information, especially in real time.
+If we want to change the wiring to local first, we need a way to resolve conflicts independently by all clients, so that the client is not dependent on a server for this. This is not easy as we cannot control which devices are online, which are offline.
+Fortunately, there is a new piece of technology called **CRDTs (conflict-free replicated data types)** that allow reaching the same state irrespective of the order in which changes are received, so each device can resolve conflicts independently - without relying on a single master copy.
+Public key cryptography has been implemented widely. So far mostly in crypto wallets. CRDTs on the other hand is a fresh approach that emerged in computer science in 2011 and has mostly been implemented in experiments and research.
+## The implementation
+That’s why our team at Anytype has been working on combining both approaches into a new local first protocol based on creators’ keys. It is called AnySync and it supports hi-performant and scalable synchronization of objects, discussions, communities and apps that do not depend on a cloud.
+[GitHub - anyproto/any-sync: An open-source protocol designed to create high-performance, local-first, peer-to-peer, end-to-end encrypted applications that facilitate seamless collaboration among multiple users and devices](https://github.com/anyproto/any-sync)
+Anytype is an interface to vaults, described in this article - encrypted, local first and with keys controlled by creators. This means in Anytype there's nobody standing between you and your vault, you and your contacts, or your devices and each other, and that these vaults talk to each on local first principles.
+[anytype — the everything app](https://anytype.io/)
+## The future
+Applying it to the design of the web we aim to create a system where we can do everything offline and in local networks and the connection to the internet is optional. This will help the neuronal groups be more resilient and fast. We invite others to join as co-creators to build a local first version of the Internet together.
+The future will be the one you build.
+1. [Marshall McLuhan. Understanding Media, 1964.](https://designopendata.wordpress.com/wp-content/uploads/2014/05/understanding-media-mcluhan.pdf)
+2. [New Directions in Cryptography, 1976.](https://ee.stanford.edu/~hellman/publications/24.pdf)
+3. [Conflict-free Replicated Data Types (CRDTs), 2011. ](https://pages.lip6.fr/Marc.Shapiro/papers/RR-7687.pdf)
diff --git a/Anytype.20240802.082116.32/thumbnail-image.md b/Anytype.20240802.082116.32/thumbnail-image.md
new file mode 100644
index 0000000..1f1c471
--- /dev/null
+++ b/Anytype.20240802.082116.32/thumbnail-image.md
@@ -0,0 +1 @@
+# Thumbnail image
diff --git a/Anytype.20240802.082116.32/timeframe.md b/Anytype.20240802.082116.32/timeframe.md
new file mode 100644
index 0000000..604ced1
--- /dev/null
+++ b/Anytype.20240802.082116.32/timeframe.md
@@ -0,0 +1 @@
+# Timeframe
diff --git a/Anytype.20240802.082116.32/to-do.md b/Anytype.20240802.082116.32/to-do.md
new file mode 100644
index 0000000..56903fb
--- /dev/null
+++ b/Anytype.20240802.082116.32/to-do.md
@@ -0,0 +1 @@
+# To Do
diff --git a/Anytype.20240802.082116.32/tool.md b/Anytype.20240802.082116.32/tool.md
new file mode 100644
index 0000000..bd116b5
--- /dev/null
+++ b/Anytype.20240802.082116.32/tool.md
@@ -0,0 +1 @@
+# Tool
diff --git a/Anytype.20240802.082116.32/tools.md b/Anytype.20240802.082116.32/tools.md
new file mode 100644
index 0000000..f257b06
--- /dev/null
+++ b/Anytype.20240802.082116.32/tools.md
@@ -0,0 +1 @@
+# Tools
diff --git a/Anytype.20240802.082116.32/track.md b/Anytype.20240802.082116.32/track.md
new file mode 100644
index 0000000..86f765b
--- /dev/null
+++ b/Anytype.20240802.082116.32/track.md
@@ -0,0 +1 @@
+# Track #
diff --git a/Anytype.20240802.082116.32/type.md b/Anytype.20240802.082116.32/type.md
new file mode 100644
index 0000000..392a686
--- /dev/null
+++ b/Anytype.20240802.082116.32/type.md
@@ -0,0 +1 @@
+# Type
diff --git a/Anytype.20240802.082116.32/underlying-file-id.md b/Anytype.20240802.082116.32/underlying-file-id.md
new file mode 100644
index 0000000..1c0c04d
--- /dev/null
+++ b/Anytype.20240802.082116.32/underlying-file-id.md
@@ -0,0 +1 @@
+# Underlying file id
diff --git a/Anytype.20240802.082116.32/unique-object-key.md b/Anytype.20240802.082116.32/unique-object-key.md
new file mode 100644
index 0000000..b97a1eb
--- /dev/null
+++ b/Anytype.20240802.082116.32/unique-object-key.md
@@ -0,0 +1 @@
+# Unique object key
diff --git a/Anytype.20240802.082116.32/url.md b/Anytype.20240802.082116.32/url.md
new file mode 100644
index 0000000..f178bc8
--- /dev/null
+++ b/Anytype.20240802.082116.32/url.md
@@ -0,0 +1,2 @@
+# URL
+Web address, a reference to a web resource that specifies its location on a computer network and a mechanism for retrieving it
diff --git a/Anytype.20240802.082116.32/use-std-collections-hashmap-struct-calendarent.md b/Anytype.20240802.082116.32/use-std-collections-hashmap-struct-calendarent.md
new file mode 100644
index 0000000..76766de
--- /dev/null
+++ b/Anytype.20240802.082116.32/use-std-collections-hashmap-struct-calendarent.md
@@ -0,0 +1,156 @@
+# use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储日期到行事历项向量的映射
+ let mut calendar: HashMap> = HashMap::new();
+
+ // 添加行事历项
+ let date = "2023-09-05";
+ let entries = calendar.entry(date.to\_string()).or\_insert\_with(Vec::new);
+ entries.push(CalendarEntry {
+ id: 1,
+ matter: "Meeting with client".to\_string(),
+ content: "Discuss project details".to\_string(),
+ importance: 3,
+ });
+ entries.push(CalendarEntry {
+ id: 2,
+ matter: "Lunch with friends".to\_string(),
+ content: "Order pizza".to\_string(),
+ importance: 2,
+ });
+ entries.push(CalendarEntry {
+ id: 3,
+ matter: "Gym workout".to\_string(),
+ content: "Go for a run".to\_string(),
+ importance: 1,
+ });
+
+ // 显示所有行事历
+ for (date, entries) in &calendar {
+ println!("Date: {}", date);
+ for entry in entries {
+ println!("ID: {}", entry.id);
+ println!("Matter: {}", entry.matter);
+ println!("Content: {}", entry.content);
+ println!("Importance: {}", entry.importance);
+ }
+ }
+}
+
+
+
+
+//行事历改进版
+use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ date: String,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储序列号到行事历项的映射
+ let mut calendar: HashMap = HashMap::new(); // 哈希映射
+
+ // 添加行事历项
+ calendar.insert("T0001".to\_string(), CalendarEntry {
+ id: 1,
+ date: "2023-09-05".to\_string(),
+ matter: "Meeting with client".to\_string(),
+ content: "Discuss project details".to\_string(),
+ importance: 3,
+ });
+ calendar.insert("T0002".to\_string(), CalendarEntry {
+ id: 2,
+ date: "2023-09-05".to\_string(),
+ matter: "Lunch with friends".to\_string(),
+ content: "Order pizza".to\_string(),
+ importance: 2,
+ });
+ calendar.insert("T0003".to\_string(), CalendarEntry {
+ id: 3,
+ date: "2023-09-05".to\_string(),
+ matter: "Gym workout".to\_string(),
+ content: "Go for a run".to\_string(),
+ importance: 1,
+ });
+
+ // 显示所有行事历
+ for (serial\_number, entry) in &calendar { // 遍历哈希映射中的键值对
+ println!("Serial Number: {}", serial\_number);
+ println!("ID: {}", entry.id);
+ println!("Date: {}", entry.date);
+ println!("Matter: {}", entry.matter);
+ println!("Content: {}", entry.content);
+ println!("Importance: {}", entry.importance);
+ }
+}
+
+
+//或则
+
+use std::collections::HashMap;
+
+struct CalendarEntry {
+ id: usize,
+ date: String,
+ matter: String,
+ content: String,
+ importance: u8,
+}
+
+fn main() {
+ // 存储序列号到行事历项的映射
+ let mut calendar: HashMap = HashMap::new(); // 哈希映射
+
+ // 添加行事历项
+ calendar.insert("T0001".to\_string(), CalendarEntry {
+ id: 1,
+ date: "2023-09-05".to\_string(),
+ matter: "扫描".to\_string(),
+ content: "三天以后到云浮扫描石材".to\_string(),
+ importance: 3,
+ });
+ calendar.insert("T0002".to\_string(), CalendarEntry {
+ id: 2,
+ date: "2023-09-05".to\_string(),
+ matter: "设计".to\_string(),
+ content: "做设计彩图".to\_string(),
+ importance: 2,
+ });
+ calendar.insert("T0003".to\_string(), CalendarEntry {
+ id: 3,
+ date: "2023-09-05".to\_string(),
+ matter: "出差".to\_string(),
+ content: "具体不切的".to\_string(),
+ importance: 1,
+ });
+ println!("ID Serial Numbe 日期 事项 内容 等级");
+ // 显示所有行事历
+ for (serial\_number, entry) in &calendar { // 遍历哈希映射中的键值对
+
+ println!("{} {} {} {} {} {}", entry.id , serial\_number, entry.date, entry.matter, entry.content, entry.importance);
+
+
+ // println!("Serial Number: {}", serial\_number);
+ // println!("ID: {}", entry.id);
+ //println!("日期: {}", entry.date);
+ // println!("事项: {}", entry.matter);
+ //println!("内容: {}", entry.content);
+ //println!("等级: {}", entry.importance);
+ }
+}
+
+
+
diff --git a/Anytype.20240802.082116.32/video.md b/Anytype.20240802.082116.32/video.md
new file mode 100644
index 0000000..e748e4a
--- /dev/null
+++ b/Anytype.20240802.082116.32/video.md
@@ -0,0 +1 @@
+# Video
diff --git a/Anytype.20240802.082116.32/vim-pei-zhi-wen-jian.md b/Anytype.20240802.082116.32/vim-pei-zhi-wen-jian.md
new file mode 100644
index 0000000..5a41c01
--- /dev/null
+++ b/Anytype.20240802.082116.32/vim-pei-zhi-wen-jian.md
@@ -0,0 +1,364 @@
+# VIM 配置文件
+```
+
+
+\`\`\`lua
+'''
+在用户目录下建立 .vimrc文件,拷贝下面vimrc配置信息
+mkdir -p ~/.vim/autoload/
+
+cd ~/.vim/autoload/
+
+git clone https://github.com/junegunn/vim-plug
+
+cp vim-plug/plug.vim ~/.vim/autoload/plug.vim
+
+$ vim #打开vim
+
+:PlugStatus #查看插件状态
+
+:PlugInstall #安装之前在配置文件中声明的插件
+'''
+
+
+
+
+
+
+" | \/ |_ _ \ \ / /_ _| \/ | _ \ / ___|
+" | |\/| | | | | \ \ / / | || |\/| | |_) | |
+" | | | | |_| | \ V / | || | | | _ <| |___
+" |_| |_|\__, | \_/ |___|_| |_|_| \_\\____|
+" |___/
+
+"
+" =.-.\|||||/.-.=
+" =( \\|||// )=
+" //\ /\\
+" //| __ __ |\\
+"_______________ /|| \O\ /O/ ||\ _______________
+"\_________ `-. /|\ " " /|\ .-' _________/
+" \________ \|/|\_`-v-'_/|\|/ ________/
+" \_______ | /|\._:_./|\ | _______/
+" \______ | /|\___/|\ | ______/
+" `-.| |/|||\| |.-'
+" _| | | |_ .ww.
+" / | | | | \ =WWW/
+" | | | | | | =WWW/
+" | | | | | | =WW/
+" | | \ / | | ) )
+" \ \ \ / / /`-.___/ /
+" (...(...)---(...)...)-.__..'
+"
+
+"
+" ____ __ ___
+" / ___| _ __ __ _ ___ ___ \ \ / (_)_ __ ___
+" \___ \| '_ \ / _` |/ __/ _ \____\ \ / /| | '_ ` _ \
+" ___) | |_) | (_| | (_| __/_____\ V / | | | | | | |
+" |____/| .__/ \__,_|\___\___| \_/ |_|_| |_| |_|
+" |_|
+"
+"
+"
+"
+"
+
+
+" 设置书签
+let g:startify_bookmarks = [
+ \ '~/vimwiki/1.txt',
+ \ '~/vimwiki/redme.txt',
+ \ '~/vimwiki/pyt_lx.py',
+ \ '~/vimwiki/pytlen_test.md',
+ \ '~/vimwiki/bookmark20030312.md',
+ \ '~/vimwiki/bookmarksc20231010.md',
+ \]
+
+" 起始页显示的列表长度
+let g:startify_files_number = 20
+
+" 是否自动加载目录下的Session.vim, 很好用
+let g:startify_session_autoload = 1
+
+" 过滤列表,支持正则表达式
+let g:startify_skiplist = [
+ \ '\.vimgolf',
+ \ '^/tmp',
+ \ '/project/.*/documentation',
+ \ ]
+
+"自定义Header和Footer
+let g:startify_custom_header = [
+ \ ' ____ __ ___ ',
+ \ ' / ___| _ __ __ _ ___ ___ \ \ / (_)_ __ ___ ',
+ \ ' \___ \| _ \ / _` |/ __/ _ \____\ \ / /| | _ _ \ ',
+ \ ' ___) | |_) | (_| | (_| __/_____\ V / | | | | | | | ',
+ \ ' |____/| .__/ \__ _|\___\___| \_/ |_|_| |_| |_| ',
+ \ ' |_| ',
+ \ ' ',
+ \]
+
+let g:startify_custom_footer = [
+ \ '+------------------------------+',
+ \ '| Keep an open mind! |',
+ \ '+----------------+-------------+',
+ \]
+
+
+
+
+let g:vimwiki_list = [{'path': '~/vimwiki/',
+ \ 'syntax': 'markdown', 'ext': '.md'}]
+
+
+
+
+autocmd FileType python set omnifunc=pythoncomplete#Complete
+
+filetype plugin on
+set nocompatible
+set t_Co=256
+
+
+
+set background=dark " Setting dark mode
+let g:deus_termcolors=256
+colorscheme evening
+
+
+
+
+set encoding=utf-8
+set langmenu=zh_CN.UTF-8
+" 设置打开文件的编码格式
+set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
+set fileencoding=utf-8
+" 解决菜单乱码
+source $VIMRUNTIME/delmenu.vim
+source $VIMRUNTIME/menu.vim
+" 解决consle输出乱码
+" set termencoding = cp936
+"设置中文提示
+language messages zh_CN.utf-8
+" 设置中文帮助
+set helplang=cn
+" 设置为双字宽显示,否则无法完整显示如:☆
+set ambiwidth=double
+" 总是显示状态栏
+
+
+"关闭警告音
+set vb t_vb=
+
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" keyboard-binding "
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+"Vim 与系统剪切板共享
+set clipboard=unnamed
+" 设置快捷键将选中文本块复制至系统剪贴板
+
+inoremap ( ()i
+inoremap [ []i
+inoremap { {}i
+inoremap " ""i
+set nu "设置显示行号
+set ruler "设置标尺
+set autoindent "设置自动缩进(与上一行的缩进相同)
+set completeopt=preview,menu
+set autowrite
+"set tabstop=2 "设置tab健的长度为2
+set tabstop=4
+set shiftwidth=4
+"set expandtab
+"set wildmenu
+syntax enable
+"syntax on "代码高亮
+colorscheme desert
+
+
+set history=50 " keep 50 lines of command line history
+syntax enable
+set cursorline
+set laststatus=2 "命令行为两行
+set laststatus=2 "永远显示状态栏
+
+set incsearch "开启实时搜索
+set ignorecase "开启大小写不敏感
+
+"设置自己的Leader
+let mapleader=","
+"关于保存退出
+nmap w :w
+nmap q :q!
+"处理复制粘贴
+vnoremap y "+y
+nmap p "+p
+
+nmap J 3k
+nmap K 3j
+nmap H ^
+nmap L $
+
+map :NERDTree
+imap :NERDTreeToggle
+map T :NERDTree
+map s
+map S :w
+map Q :q
+map R :source $MYVIMRC
+inoremap jk " 映射插入模式下的 jk 键为 ESC 键
+inoremap vv " 映射插入模式下的 vv 键为 ESC 键
+
+map :w:!python3 %
+map P :w:!python3 %
+
+map :w:!kotlin %
+map K :w:!kotlin %
+map :w:!dart %
+map D :w:!dart %
+map :w:!julia %
+
+
+filetype on "文件类型检测
+filetype plugin on "不同文件类型加载不同插件
+set nocompatible
+syntax on
+
+
+
+let g:ale_linters = {'python': ['flake8']}
+let g:airline_powerline_fonts =8
+
+
+let g:vimwiki_list = [{'path': '~/vimwiki/',
+ \ 'syntax': 'markdown', 'ext': '.md'}]
+
+let g:vimwiki_list = [{
+ \ 'auto_export': 1,
+ \ 'automatic_nested_syntaxes':1,
+ \ 'path_html': '$HOME/Sync/wiki_html',
+ \ 'path': '$HOME/Sync/wiki',
+ \ 'template_path': '$HOME/Sync/wiki/template/',
+ \ 'syntax': 'markdown',
+ \ 'ext':'.md',
+ \ 'template_default':'markdown',
+ \ 'custom_wiki2html': '$HOME/Sync/wiki2html.sh',
+ \ 'template_ext':'.html'
+\}]
+
+au BufRead,BufNewFile *.md set filetype=vimwiki
+
+let g:taskwiki_sort_orders={"C": "pri-"}
+let g:taskwiki_syntax = 'markdown'
+let g:taskwiki_markdown_syntax='markdown'
+let g:taskwiki_markup_syntax='markdown'
+
+
+""指定插件目录
+call plug#begin('~/.vim/plugged')
+
+""插件允许使用任何有效的git URL
+Plug 'valid git URL'
+
+""插件的简写符号
+Plug 'linuxidc/linux'
+
+""初始化插件系统
+call plug#end()
+
+
+call plug#begin('~/.vim/plugged')
+
+"自动括号匹配插件
+Plug 'jiangmiao/auto-pairs'
+
+"快速对齐补全符号插件
+Plug 'anyakichi/vim-surround'
+
+
+"提供嵌套括号高亮
+Plug 'luochen1990/rainbow'
+
+"语法高亮
+Plug 'sheerun/vim-polyglot'
+
+"Vim配置状态栏
+"Plug 'itchyny/lightline.vim'
+"Plug 'Lokaltog/vim-powerline'
+
+"配色方案插件
+Plug 'theniceboy/vim-deus'
+
+"Markdown 插件
+Plug 'godlygeek/tabular' "必要插件,安装在vim-markdown前面
+Plug 'plasticboy/vim-markdown'
+
+"Vim启动屏幕
+Plug 'mhinz/vim-startify'
+
+"状态栏和标签栏
+Plug 'vim-airline/vim-airline'
+Plug 'vim-airline/vim-airline-themes'
+
+
+"julia代码补全插件
+Plug 'JuliaEditorSupport/julia-vim'
+
+"python语法插件
+Plug 'hdima/python-syntax'
+
+"kotlin插件
+Plug 'udalov/kotlin-vim'
+
+"python依赖插件
+"Plug 'davidhalter/jedi-vim'
+
+"文件搜索
+Plug 'Yggdroot/LeaderF'
+
+Plug 'vimwiki/vimwiki'
+ Plug 'itchyny/lightline.vim'
+
+"目录树插件
+Plug 'preservim/nerdtree'
+
+"The CTRL-P Plugvim ctrl-p补齐功能
+Plug 'kien/ctrlp.vim'
+
+Plug 'tpope/vim-fugitive' " git 工具
+
+" 快速在 markdown 文件中粘贴图片
+Plug 'ferrine/md-img-paste.vim'
+
+" markdown 中自动对齐表格
+Plug 'dhruvasagar/vim-table-mode'
+
+"PDF支持插件
+Plug 'vim-pandoc/vim-pandoc'
+Plug 'vim-scripts/pdf.vim'
+
+
+
+"异步语法检查
+Plug 'W0rp/ale'
+:
+"markdown预览插件
+function! BuildComposer(info)
+ if a:info.status != 'unchanged' || a:info.force
+ if has('nvim')
+ !cargo build --release --locked
+ else
+ !cargo build --release --locked --no-default-features --features json-rpc
+ endif
+ endif
+endfunction
+
+Plug 'euclio/vim-markdown-composer', { 'do': function('BuildComposer') }
+
+
+
+call plug#end()
+
+```
diff --git a/Anytype.20240802.082116.32/where-our-inspiration-comes-from-anytype.md b/Anytype.20240802.082116.32/where-our-inspiration-comes-from-anytype.md
new file mode 100644
index 0000000..ae2ff9d
--- /dev/null
+++ b/Anytype.20240802.082116.32/where-our-inspiration-comes-from-anytype.md
@@ -0,0 +1,2 @@
+# Where our inspiration comes from \| Anytype
+TV series, books, groundbreaking software and historical manuscripts, all converge to drive us to imagine and realize a new web.
diff --git a/Anytype.20240802.082116.32/width.md b/Anytype.20240802.082116.32/width.md
new file mode 100644
index 0000000..3a7c405
--- /dev/null
+++ b/Anytype.20240802.082116.32/width.md
@@ -0,0 +1 @@
+# Width
diff --git a/Anytype.20240802.082116.32/win10_win11yong-jiu-ji-huo-zhe-ge-gong-ju-qing.md b/Anytype.20240802.082116.32/win10_win11yong-jiu-ji-huo-zhe-ge-gong-ju-qing.md
new file mode 100644
index 0000000..293287c
--- /dev/null
+++ b/Anytype.20240802.082116.32/win10_win11yong-jiu-ji-huo-zhe-ge-gong-ju-qing.md
@@ -0,0 +1,13 @@
+# win10\_win11永久激活-这个工具轻
+
+
+```
+win10、win11永久激活-这个工具轻松搞定(5月29日更新) 一 数字权利激活(Digital License Activation) 三 KMS38 四 Win11/10激活 -----------5月29日更新---
+ 在 Windows 8.1/10/11 上,右键单击 Windows 开始菜单并选择 PowerShell 或终端(注意不是 CMD)
+ 复制粘贴以下代码并按回车
+
+
+ irm https://massgrave.dev/get | iex
+
+```
+
diff --git a/Anytype.20240802.082116.32/writers-limit.md b/Anytype.20240802.082116.32/writers-limit.md
new file mode 100644
index 0000000..ecc08a7
--- /dev/null
+++ b/Anytype.20240802.082116.32/writers-limit.md
@@ -0,0 +1 @@
+# Writers limit
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29