Skip to content

Commit ab9c686

Browse files
committed
upload & move files from my Mac
Upload all files of Basic learning files , up to Module
1 parent ea7d02c commit ab9c686

34 files changed

Lines changed: 2229 additions & 0 deletions

.DS_Store

6 KB
Binary file not shown.

BasicFiles/.vscode/launch.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Python Debugger: Python File",
9+
"type": "debugpy",
10+
"request": "launch",
11+
"program": "${file}"
12+
}
13+
]
14+
}

BasicFiles/.vscode/settings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"python-envs.defaultEnvManager": "ms-python.python:system",
3+
"Codegeex.CompletionDelay": 0.3
4+
}

BasicFiles/AIspeedTest.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import time
2+
import mlx.core as mx
3+
from mlx_lm import load, generate
4+
5+
# 强制用GPU(MLX核心,彻底解决CPU fallback)
6+
mx.set_default_device(mx.gpu)
7+
8+
# 你的模型路径(确认正确)
9+
MODEL = "/Users/yui/.lmstudio/models/Lowkey-Loki/Codestral-22b-v0.1-mlx-3_6bit"
10+
11+
# 加载模型
12+
print("正在加载模型(强制GPU)...")
13+
model, tokenizer = load(MODEL)
14+
15+
# 测试prompt
16+
prompt = "def hello():"
17+
18+
# 生成(极简参数,老版本mlx-lm100%兼容)
19+
start = time.time()
20+
out = generate(model, tokenizer, prompt=prompt, max_tokens=32)
21+
end = time.time()
22+
23+
# 计算速度
24+
tokens = len(tokenizer.encode(out))
25+
speed = tokens / (end - start)
26+
print(f"✅ 真实速度:{speed:.2f} tokens/s")
27+
print(f"生成内容:{out}")

BasicFiles/ArithmeticOperations.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# 为了区别于逻辑运算,算术运算的概念被提出,简而言之就是对数值的运算
2+
# 在之前的学习中已经看到不少算术运算的内容了
3+
# 加法
4+
print(1 + 2) # 输出:3
5+
# 减法
6+
print(5 - 3) # 输出:2
7+
# 乘法
8+
print(4 * 6) # 输出:24
9+
# 除法
10+
print(10 / 2) # 输出:5.0
11+
# 整除(取商的整数部分)
12+
print(10 // 3) # 输出:3
13+
# 取余(取商的余数)
14+
print(10 % 3) # 输出:1
15+
# 幂运算
16+
print(2 ** 3) # 输出:8
17+
18+
# 正常的加法
19+
x = 1 + 2
20+
# 复合赋值运算符
21+
x += 3 # 等同于 x = x + 3
22+
print(x) # 输出:6
23+
# 上述的所有算术运算符都可以使用复合赋值运算符,例如 -=、*=、/= 等等
24+
# 不同于JS和C#,Python没有自增(++)和自减(--)运算符
25+
# 如果需要实现类似的功能需要使用复合赋值运算符
26+
27+
# 工作中对于不想被操作的常量,通常会使用全大写的变量名来表示,例如:
28+
PI = 3.14159
29+
# 虽然在程序语言中没有真正意义上无法修改的变量
30+
# 但是在开发时我们总是约定俗成地认为,全大写的变量是常量,不应该被修改
31+
32+
# 和字符串相同,数值也有一些特殊的函数
33+
print(round(PI)) # 输出:3,round函数用于对数值进行四舍五入
34+
print(abs(-5)) # 输出:5,abs函数用于求数值的绝对值
35+
print(abs(PI)) # 输出:3.14159,abs函数会显示正数本身
36+
# 通过搜索“python 3 built-in functions”可以了解更多关于内置函数的信息
37+
38+
# 对于更加复杂的数学运算,Python提供了一个叫做math的模块
39+
import math
40+
41+
print(math.floor(PI)) # 输出:3,floor函数用于向下取整
42+
print(math.sqrt(16)) # 输出:4.0,sqrt函数用于求平方根
43+
# 通过搜索“python math module”可以了解更多关于math模块的信息

BasicFiles/Arrays.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# 当我们针对大量数据进行操作时,仅仅使用列表和元组的简单函数是无法满足排序等操作的
2+
# 在90%的情况中我们一般会使用列表,实际上Python中的列表是链表形式
3+
# 由于List可以存储各种类型的数据而不出错,所以当处理大量数据时,它的占用会很高
4+
# 于是有了Array,即数组,数组作为仅储存单一类型变量的类,占用连续内存,十分利于计算
5+
# 在一般情况下我们体会不到list和array的区别,但是一旦数据内容超过一个阈值,速度区别会很明显
6+
from array import array
7+
8+
# array函数需要首先确定类型,也就是python中叫typecode的东西,中文叫类型码
9+
# 类型码用来告诉array只能存储哪种类型的数据,常用的有'i'->int,'I'->无符号整数,'f'->float,'d'->double
10+
# float称为单浮点,它占用4字节,double称为双浮点,因为它占用8字节,精度更高
11+
numbers = array("i", [1, 2, 3, 4])
12+
numbers.append(5)
13+
print(numbers)
14+
numbers.pop()
15+
print(numbers)
16+
# numbers[0] = 1.1 # 会报TypeError的错误
17+
numbers.insert(3, 5) # 在索引为3的数前面插入5
18+
print(numbers)

BasicFiles/BasicFunction.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
"""这部分用来进行Function(函数)的练习"""
2+
# 一个函数通过def关键字来定义,后面跟着函数的名字和括号,括号里可以有参数
3+
4+
# pass是一个占位符,表示这个函数还没有实现
5+
# def increment(number, by):
6+
# pass
7+
8+
9+
def increment(number, by):
10+
return number + by
11+
12+
13+
# python的函数实际上可以返回多个值,返回值用逗号分隔开来
14+
def number_source(number, by):
15+
return (number, number+by)
16+
17+
18+
def increment_and_decrement(number, by):
19+
return number + by, number - by
20+
21+
22+
# 这种直接输入参数值的调用称为位置参数,即按函数的位置传参
23+
print(increment(2, 3)) # (2, 5)
24+
# 返回的(2, 5)我们称为一个tuple(元组),它是一个不可变的序列,可以用来存储多个值
25+
# 元组和列表的区别在于,元组是不可变的,而列表是可变的。元组用圆括号表示,列表用方括号表示
26+
# 比如下面这两个number变量,一个是列表,一个是元组,列表可以修改,而元组不可以修改
27+
number = [1, 2, 3] # 这个number是一个列表,可以修改
28+
number = (1, 2, 3) # 这个number是一个元组,不可以修改
29+
# 在输入参数的时候,我们可以使用关键字参数,这样就不需要按照位置来传递参数了
30+
# 下面这三个调用都是一样的,都是传递了number=2和by=3这两个参数,只不过顺序不同而已
31+
print(increment_and_decrement(2, by=3))
32+
# 这种添加了参数名的关键字参数可以更清晰地表达参数的含义
33+
print(increment_and_decrement(number=2, by=3))
34+
print(increment_and_decrement(by=3, number=2))
35+
36+
37+
# 如果在定义函数的时候,给参数指定了默认值,那么在调用函数的时候,如果没有传递这个参数,就会使用默认值
38+
def new_increment(number, by=1):
39+
return number + by
40+
41+
42+
print(new_increment(2)) # 这里没有传递by参数,所以使用默认值1,结果是3
43+
print(new_increment(2, 3)) # 这里传递了by参数,所以使用传递的值3,结果是5
44+
45+
46+
# 在定义函数时,我们一般会对参数进行类型注解,这样可以提高代码的可读性和可维护性,
47+
# 虽然Python是一种动态类型语言,但类型注解可以帮助我们更好地理解函数的输入和输出
48+
# docstring是一个字符串,放在函数的第一行,用来说明函数的功能和参数的含义
49+
# 在定义函数时还需要指定返回值的类型,并对函数进行一段注释,说明函数的功能和参数的含义
50+
# 比如通过-和>形成的→箭头就是用来指定返回值的类型的
51+
def annotated_increment(num: int, by: int) -> tuple[int, int]:
52+
"""这个函数用来对一个数字进行增量和减量的操作
53+
参数:
54+
num (int): 要进行操作的数字
55+
by (int): 增量或减量
56+
返回值:
57+
tuple[int, int]: 包含原始数字和增量后数字的元组
58+
"""
59+
return (num + by, num - by)
60+
61+
62+
# 我们一般在创建函数的时候会想要能传入任何类型的参数,来让函数更通用一些
63+
# 我们可以使用Python的动态类型特性来实现这一点
64+
# *numbers参数允许我们传入任意数量的位置参数,这些参数会被收集到一个元组中
65+
# 函数会在其内部对这个元组进行操作来实现我们想要的功能,比如在这个例子中,我们想要计算所有传入数字的乘积
66+
def multiply(*numbers):
67+
"""这个函数接受任意数量的数字参数,并返回它们的乘积。"""
68+
total = 1
69+
for number in numbers:
70+
total *= number
71+
return total
72+
73+
74+
print(multiply(2, 3)) # 输出: 6
75+
print(multiply(2, 3, 4)) # 输出: 24
76+
77+
78+
# **kwargs参数允许我们传入任意数量的关键字参数,这些参数会被收集到一个字典中
79+
def save_user(**user):
80+
"""这个函数接受任意数量的关键字参数,并将它们作为用户信息保存。"""
81+
print("Saving user:")
82+
for key, value in user.items():
83+
print(f"{key}: {value}")
84+
return user
85+
86+
87+
print(type(save_user)) # 输出: <class 'function'>
88+
89+
user1 = save_user(name="Alice", age=30, email="alice@example.com")
90+
# 输出:
91+
# Saving user:
92+
# name: Alice
93+
# age: 30
94+
# email: alice@example.com
95+
print(type(user1)) # 输出: <class 'dict'>
96+
print(user1) # 输出: {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
97+
98+
# 同其他程序语言的先声明后使用不同,Python的函数中无论在何处声明的变量,都可以在函数的任何地方使用
99+
# 这是因为Python的函数是动态作用域的,即函数中的变量在函数内部都是可见的
100+
# 也就是说Python没有块级作用域,只有函数作用域
101+
def greet(a:bool):
102+
"""这个函数仅作为展示,即使是在if语句中声明的变量,在整个函数中都是可以使用的"""
103+
# 在函数中定义全局变量同名变量是可行的, 但是函数中这样定义的变量实际上只是个局部变量,只是碰巧和全局变量重名了
104+
# 所以在函数中定义的变量不是修改全局变量的值,它是个局部变量,不影响全局变量本身的值
105+
message = "b"
106+
if a == True:
107+
name = "Alice"
108+
else:
109+
name = "Bob"
110+
print(f"Hello, {name}, {message}!")
111+
112+
113+
# 当一个函数被声明到函数外部时,它就是一个全局变量
114+
message = "a"
115+
def greetagain():
116+
"""这个函数用来修改并打印一个全局变量"""
117+
# Python中可以使用global关键字在函数中真正修改全局变量
118+
global message # 声明使用的是全局变量message,这种做法是不被建议的
119+
message = "c" # 此时修改的是全局变量
120+
print(message)
121+
122+
123+
greet(True)
124+
greetagain() # 输出:c(全局变量被修改)

BasicFiles/BasicLearning.py

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
"""这是一个简单的Python程序,用于演示 Python 基础语法"""
2+
import math # 导入 math 模块,提供数学函数和常量
3+
4+
print("Hello World 🐱")
5+
print("*" * 10)
6+
print("Hello World")
7+
8+
course = "Python Programming"
9+
print(course) # 输出字符串
10+
print(len(course)) # 输出字符串的长度
11+
print(course[0]) # 输出字符串的第一个字符
12+
print(course[-1]) # 输出字符串的最后一个字符
13+
print(course[0:3]) # 输出字符串的前三个字符,结束索引不包含在内
14+
print(course[0:]) # 输出字符串的所有字符
15+
print(course[:5]) # 输出字符串的前五个字符
16+
print(course[:]) # 输出字符串的所有字符
17+
18+
# \" 转义字符,表示一个双引号
19+
# \' 转义字符,表示一个单引号
20+
# \\ 转义字符,表示一个反斜杠
21+
# \n 转义字符,表示一个换行符
22+
# \t 转义字符,表示一个制表符吗,实际上就是个空格
23+
course = "Python \nProgramming"
24+
25+
print("*" * 10)
26+
27+
# pylint: disable=invalid-name # 忽略当前文件的命名风格检查
28+
first = "Yui"
29+
last = "Cyber"
30+
full = first + " " + last
31+
full = f"{first} {last}" # 使用 f-string 格式化字符串
32+
full = f"{len(first)} {2 + 2}" # 在 f-string 中使用表达式
33+
print(full) # 输出连接后的字符串
34+
35+
print("*" * 10)
36+
37+
# Everything in Python is an object, including strings. This means we can call methods on strings.
38+
course = "Python Programming"
39+
course.upper() # 将字符串转换为大写
40+
print(course.upper()) # 输出转换后的字符串
41+
print(course) # 输出原字符串,说明字符串是不可变的
42+
course_capital = course.capitalize() # 将字符串的第一个字符转换为大写,其他字符转换为小写
43+
print(course_capital) # 输出转换后的字符串
44+
print(course) # 输出原字符串,说明字符串是不可变的
45+
46+
course.lower() # 将字符串转换为小写
47+
print(course.lower()) # 输出转换后的字符串
48+
print(course.title()) # 将字符串的每个单词的首字母转换为大写
49+
50+
print("*" * 10)
51+
course = " Python Programming "
52+
print(course) # 输出原字符串,包含两端的空格
53+
print(course.strip()) # 去除字符串两端的空格
54+
print(course.lstrip()) # 去除字符串左侧的空格
55+
print(course.rstrip()) # 去除字符串右侧的空格
56+
57+
print(course.find("pro")) # 查找字符串中第一个 "pro" 的索引
58+
print(course.find("Pro")) # 查找字符串中第一个 "Pro" 的索引,区分大小写
59+
print(course.replace("P", "J")) # 将字符串中的 "P" 替换为 "J"
60+
print("Pro" in course) # 检查字符串中是否包含 "Pro"
61+
# Find方法返回子字符串在字符串中第一次出现的位置索引,如果没有找到则返回 -1
62+
# 而 in 操作符返回一个布尔值,表示子字符串是否存在于字符串中
63+
64+
print("swift" not in course) # 检查字符串中是否不包含 "swift"
65+
66+
print("*" * 10)
67+
68+
x = 10 # 这是一个整数对象
69+
x = 1.1 # 这是一个浮点数对象
70+
x = 1 + 2j # 这是一个复数对象
71+
print(type(x)) # 输出变量 x 的类型
72+
print(10 + 3) # 输出整数的加法结果
73+
print(10 - 3) # 输出整数的减法结果
74+
print(10 * 3) # 输出整数的乘法结果
75+
print(10 / 3) # 输出整数的除法结果,结果是一个浮点数
76+
print(10 // 3) # 输出整数的地板除结果,结果是一个整数
77+
print(10 % 3) # 输出整数的模运算结果,结果是一个整数
78+
print(10 ** 3) # 输出整数的幂运算结果,结果是一个整数
79+
80+
x = 10
81+
x += 3 # 等价于 x = x + 3
82+
print(x) # 输出 x 的值
83+
x -= 3 # 等价于 x = x - 3
84+
print(x) # 输出 x 的值
85+
x *= 3 # 等价于 x = x * 3
86+
print(x) # 输出 x 的值
87+
x /= 3 # 等价于 x = x / 3
88+
print(x) # 输出 x 的值
89+
90+
print("*" * 10)
91+
round(2.9) # 将 2.9 四舍五入到最接近的整数
92+
print(round(2.9)) # 输出 3
93+
print(abs(-2.9)) # 输出 -2.9 的绝对值
94+
95+
math.ceil(2.9) # 将 2.9 向上取整到最接近的整数
96+
print(math.ceil(2.9)) # 输出 3
97+
math.floor(2.9) # 将 2.9 向下取整到最接近的整数
98+
print(math.floor(2.9)) # 输出 2
99+
math.sqrt(16) # 计算 16 的平方根
100+
print(math.sqrt(16)) # 输出 4.0
101+
102+
print("*" * 10)
103+
# input() 函数用于从用户输入获取数据,返回一个字符串
104+
# name = input("What is your name? ") # 提示用户输入名字
105+
# print(f"Hi {name}!") # 输出问候语,使用 f-string 格式化字符串
106+
# print("*" * 10)
107+
108+
# 练习:计算圆的面积
109+
# radius = input("请输入圆的半径: ") # 获取用户输入的半径,返回一个字符串
110+
# radius = float(radius) # 将字符串转换为浮点数
111+
# area = math.pi * radius ** 2 # 计算圆的面积,使用 math.pi 常量和幂运算符
112+
# print(f"圆的面积是: {area:.2f}") # 输出圆的面积,保留两位小数
113+
# print("*" * 10)
114+
115+
# Falsy 值:False, None, 0, 0.0, 0j, '', [], (), {}, set()
116+
# Truthy 值:除了 Falsy 值以外的所有值都是 Truthy 值
117+
print(bool("")) # 输出 False,因为空字符串是 Falsy 值
118+
print(bool("False")) # 输出 True,因为非空字符串是 Truthy 值
119+
print(bool(0)) # 输出 False,因为 0 是 Falsy 值
120+
print(bool(0.0)) # 输出 False,因为 0.0 是 Falsy值
121+
print(bool(1)) # 输出 True,因为 1 是 Truthy 值
122+
print(bool([])) # 输出 False,因为空列表是 Falsy 值
123+
print(bool([1, 2, 3])) # 输出 True,因为非空列表是 Truthy 值
124+
print(bool(None)) # 输出 False,因为 None 是 Falsy 值
125+
print(bool(False)) # 输出 False,因为 False 是 Falsy 值
126+
print(bool(True)) # 输出 True,因为 True 是 Truthy 值
127+
128+
# Python中的三元运算符
129+
age = 20
130+
# 根据条件表达式的结果选择 "Eligible" 或 "Not Eligible"
131+
message = "Eligible" if age >= 18 else "Not Eligible"
132+
print(message) # 输出 "Eligible" 因为 age 大于等于 18
133+
134+
# 同逻辑的 if-else 语句
135+
if age >= 18:
136+
message = "Eligible"
137+
else:
138+
message = "Not Eligible"
139+
print(message) # 输出 "Eligible" 因为 age 大于等于 18

0 commit comments

Comments
 (0)