前端角度学 AI - 15 分钟入门 Python

前言

本文只是很基础的 python 最精华的语法入门,帮助前端同学使用 python 实现一些 ai 工具。有了这些基础,遇到不会的,问 ai 也能看懂 ai 给的答案,这是这篇文章的目的:结合 javascript,对比 python的基础用法,用最快的速度,上手 python,快速进入到实战,而不是纠结于基础语法!

最后我们会写一个用 python 调用 deepseek 大模型的微型 demo。

承接之前的前端学习 ai 系列文章:

首先需要安装 python,大家可以直接问 ai。 因为我的 macOS 自带了 python,我就没有单独安装了(建议使用版本管理工具,例如 python 管理多版本)。

ai agent 中, python 毕竟是最主流的语言,大家可以熟悉一下基本语法,实在太简单了, 大概花费时间如下:

  • 基本语法:5分钟
  • 控制结果:2分钟
  • 数据结构:5分钟
  • 案例:3分钟

基本语法

变量的定义和命令规则

因为实在太简单了,大家看注释就知道意思

python 复制代码
# 变量的定义
name = "Alice"
age = 25
height = 1.68
is_student = True

# 打印变量值
print(name)
print(age)
print(height)
print(is_student)

name = "张三"
print(name)

# 变量命名规则
# 简单理解跟 javascript 的差不多就行了
# 1. 变量名只能包含字母、数字、下划线
# 2. 变量名不能以数字开头
# 3. 变量名不能是 python 关键字

数据类型

python 复制代码
# 数字类型
num1 = 10 # 整数(int)
num2 = 3.14 # 浮点数 (float)

# 字符串类型 (str)
name = "Alice"
message = 'Hello, world!'

# 布尔类型 (bool)
is_student = True
is_working = Fasle

这里注意:

  • python 中的浮点数跟 javascript 的一致,都是双精度浮点数,占用 8字节,也就是 64 的内存。但同样的问题也有,就是都不精确,也就是会出现 0.1 + 0.2 不等于 0.3 的问题
  • 然后字符串单引号很双引号是一样的效果,跟 javascript 一致
  • 布尔类型不一样的是 python 中首字母大写。

如何获取数据类型, 使用 type,跟 javascript typeof 操作符类似。

python 复制代码
num1 = 10 # 整数(int)
print(type(num1))

类型转换

跟javascript 中,使用 Number(xx) 转数字,使用 String() 转字符串类似。

python 复制代码
# 将字符串转换为整数
num_str = "123"
num_int = int(num_str)
print(num_int)

# 将整数转为字符串
num_int = 456
num_str = str(num_int)
print(num_str)

# 将浮点数转换为整数(会丢失小数部分)
num_float = 3.14
num_int = int(num_float)
print(num_int)

算数运算符

python 复制代码
# 加法
result = 10 + 5
print(result)

# 减法
result = 10 - 5
print(result)

# 乘法
result = 10 * 5
print(result)

# 除法
result = 10 / 5
print(result)

# 取整除
result = 10 // 3
print(result)

# 取余
result = 10 % 3
print(result)

# 幂计算
result = 2 ** 3
print(result)

跟 javascript 在取整除语法上有区别

  • python 是 10 // 3
  • 在 javascript 对应的是 Math.trunc(10 / 3)

比较运算符

这个没什么好说的,跟 javascript 基本一样,例如

  • 10 == 5, 10 != 5, 10 > 5, 10 >= 5 等等
  • 注意 python 没有 === 和 !==

逻辑运算符

这个区别有点大,我们细细来讲:

逻辑与 (AND)

python 用 and

python 复制代码
# Python
x = 5
y = 10
if x > 0 and y < 20:
    print("两个条件都满足")  # 会执行

javascript

javascript 复制代码
// JavaScript
let x = 5;
let y = 10;
if (x > 0 && y < 20) {
    console.log("两个条件都满足");  // 会执行
}

逻辑或 (OR)

python 用 or

python 复制代码
# Python
name = ""
default_name = "Guest"
display_name = name or default_name
print(display_name)  # 输出: Guest

javascript

javascript 复制代码
// JavaScript
let name = "";
let defaultName = "Guest";
let displayName = name || defaultName;
console.log(displayName);  // 输出: Guest

逻辑非 (NOT)

python 用 not,也就是没有 javascript 的 ! 操作符。

Python 复制代码
# Python
is_logged_in = False
if not is_logged_in:
    print("请先登录")  # 会执行

javascript

JavaScript 复制代码
// JavaScript
let isLoggedIn = false;
if (!isLoggedIn) {
    console.log("请先登录");  // 会执行
}

真假值判断差异

Python 的假值:

  • False
  • None
  • 0 (整数)
  • 0.0 (浮点数)
  • "" (空字符串)
  • [] (空列表)
  • () (空元组)
  • {} (空字典)
  • set() (空集合)

JavaScript 的假值:

  • false
  • 0 (数字)
  • "" (空字符串)
  • null
  • undefined
  • NaN
  • 0n (BigInt)

赋值运算符

跟 javascript 一样,但注意没有 ++, -- 这种运算符。

python 复制代码
# 简单赋值
x = 10

# 加法赋值
x += 5

# 减法赋值
x -= 3

# 乘法赋值
x *= 2

# 除法赋值

x /= 4

输入输出

input 函数获取用户输入

python 复制代码
name = input("请输入你的名字")
print("你好," + name + "!")

print() 函数打印内容

python 复制代码
print("hello word!")

格式化输出,在 python 3.6 版本支持,跟前端的 `` 类似符号类似,python 使用的是 f。

  • javascript 使用的是 ${} 嵌入变量, python 是 {} 嵌入变量
python 复制代码
name = "Charlie"
age = 35
height = 1.75

# 直接嵌入变量
print(f"Hello, {name}!") 
# 输出:Hello, Charlie!

if else 语句

跟 javascript 有区别,但也很简单,请看示例

python 复制代码
score = 75

if score >= 90:
    print("优秀")
elif score >= 70:
    print("良好")
elif score >= 60:
     print("及格")
else:
    print("需努力");
  • 条件 是一个会产生布尔值(TrueFalse)的表达式。
  • 冒号 : 是必须的,表示一个代码块的开始。
  • 缩进 (通常是 4 个空格)是 Python 标识代码块的方式,绝对不能省略或混用

嵌套条件语句

python 复制代码
age = 20
has_license = True

if age >= 18:
    if has_license:
        print("可以开车")
    else:
        print("不能开车")
else:
    print("不能开车");

循环语句

跟 javascript 区别还挺大,没有 javascript 的中括号。

for 循环语法:

python 复制代码
for 变量 in 可迭代对象:
    # 执行的代码块

常用场景与示例:

遍历数组:

python 复制代码
fruits = ["apple", "banana", "cherry"]
for fruit in fruits: 
    `print(fruit)

遍历字符串:

python 复制代码
for char in "Hello":  
    print(char)

遍历 range 。range(n) 生成一个从 0 到 n-1 的整数序列。

python 复制代码
for i in range(5):
    print(i) // 输出:0 1 2 3 4

遍历字典(理解为javascript 的 {} 对象)

python 复制代码
person = {"name": "Alice", "age": 25}
for key in person:
     print(key, person[key])

while 循环语法

bash 复制代码
while 条件:
    # 执行的代码块

基本案例:

python 复制代码
count = 0

while count < 5:
    print(count)
    count += 1

循环控制语句

跟 javascript 一样。

python 复制代码
# break 语句
for i in range(10):
    if i == 5:
        break
    print(i) // 0 1 2 3 4
python 复制代码
# break 语句
for i in range(10):
    if i % 2 == 0:
        continue
    print(i) // 1 3 5 7 9

数据结构

Python 常见的数据结构有四种:

  • 列表 List: python语法:[1, 2, 'a']
    • 相当于 javascript 的数组: [1, 2, 'a']

增加元素:

  • 通过 append 函方法,实现在尾部增加新元素。
    • javascript 是通过 push 方法。
python 复制代码
l = [1,2,3,4]
l.append(5)
print(l)

删除元素:

  • 通过 del 关键字可以删除列表某个位置的元素
    • javascript 是通过 splice 方法
python 复制代码
l = [1,2,3,4]
## 删除首个
del l[0]
## 删除最后一个(也就是倒数第一的意思)
del l[-1]
print(l)

最后一个元素在 python 可以用 -1 表示。

查找元素:

python 复制代码
l = [1,2,3,4]
## 查找首个
print(l[0])
## 查找最后一个
print(l[-1])
## 查找下标是 1 到 下标 2 的元素(不包括 3 所以到 2)
print(l[1:3]) # [2, 3]

修改元素

python 复制代码
l = [1,2,3,4]

l[0] = -1
print(l)

接下来看第二个数据类型:元祖

  • 元祖 Tuple: (1, 2, 'a')
    • 可以理解为就是列表,但是不能改。
    • javascript没有对应的,JS 中通常用数组代替,通过 Object.freeze() 模拟
python 复制代码
t = (1,2,3)

t[0] = 1 # 报错,不能改

但可以循环遍历元祖。

接下来看第三个数据类型:字典

  • 字典 Dict:{'a': 1, 'b': 2}
    • 相当于 javascript 的 Object {a: 1, b: 2}
    • Python 键可以是任意不可变类型;JS 键会自动转为字符串。
    • Python 用 dict['a'];JS 可用 .[]
python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}


print(ab)

字典支持以下操作:

  • 增:通过 [] 可以向字典内增加元素
python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}

ab["Third"] = 3
print(ab)
  • 删:通过 del 可以向字典内删除元素
python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}

del ab["Second"]
print(ab)
  • 查:通过 [] 可以向字典内查询元素
python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}

print(ab["Second"])

还可以通过 in 关键字查找某个键是否在字典中

python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}

print("Second" in ab) // True
  • 改:通过赋值符号 = 可以修改某个位置元素
python 复制代码
# key, 键,比如 First 和 Second 就是键
# value,值,比如 1 和 2 就是值
ab = {
    "First": 1,
    "Second": 2
}

ab["First"] = 3
print(ab) // True
  • 集合:Set:{1, 2, 3}
    • 相当于 javascript 中的 Set, new Set([1, 2, 3]),也就是不存在重复的元素

注意集合是没有顺序,所以不能像列表那样通过下标查找

增加元素:

python 复制代码
s = {1,2,3}
# 增加新的元素到集合中
s.add(6)
print(s)

删除元素:

python 复制代码
s = {1,2,3}
# 增加新的元素到集合中
s.remove(3)
print(s)

查找是否元素在集合中:

python 复制代码
s = {1,2,3}
# 增加新的元素到集合中
print(3 in s)  # True

我们还可以求集合的交集,并集,差集

python 复制代码
s1 = {1,2,3}
s2 = {2,3,4}

print(s1 & s2) # 交集 {2,3}
python 复制代码
s1 = {1,2,3}
s2 = {2,3,4}

print(s1 | s2) # 并集 {1,2,3,4}
python 复制代码
s1 = {1,2,3}
s2 = {2,3,4}

print(s1 ^ s2) # 差集 {1,4}

函数

使用 def 关键字定义,javascript 是使用 function 关键字。

示例:

python 复制代码
def greet(name):
    return f"Hello, {name}"

print(greet('ZhangSan')) # Hello, ZhangSan

注意 python 能返回多个值,我们举例

python 复制代码
def add_and_subtract(x, y):
    return x+y, x-y

sum,diff = add_and_subtract(10, 5)

print(sum, diff) # 15 5

同样 python 有作用域的概念,在函数里的属于局部变量。

匿名函数:Lambda 函数

有点像 javascript 中的箭头函数,是一种语法糖,能够快速定义函数

python 复制代码
add = lambda x, y: x + y # 定义一个传参是 x,y 结果是和的函数

print(add(1,1)) # 2

上面的 lambda 函数相当于

python 复制代码
def add(a, b):
    return a+b

print(add(1,1)) # 2

函数作为参数传递

python 也支持将函数作为参数传给一个函数

python 复制代码
def apply_function(func, value):
    return func(value)

print(apply_function(lambda x: x * x, 5)) # 25

Python 模块介绍

  • 模块是包含代码的文件,以单独命名空间组织逻辑,便于复用与维护
  • 一个 .py 文件就是一个模块,模块名为文件名(不含扩展名)
  • 导入后通过模块命名空间访问其函数、类、变量,避免命名冲突

例如,我们创建一个模块:

python 复制代码
# utils.py
def add(a, b):
    return a + b
PI = 3.14159

使用

python 复制代码
import utils
print(utils.add(1, 2))
print(plus(1, 2))

我们还可以使用模块别名,跟 javascript 类似, 也是 as 关键字

python 复制代码
import utils as util # utils 别名改为 util
print(util.add(1, 2))

还有一种 from ... import 可以导入模块语法如下

python 复制代码
# 导入整个模块(不建议这么做)
from module_name import *

# 导入特定函数/类/变量
from module_name import function_name, ClassName, variable_name

# 导入并重命名
from module_name import original_name as alias_name

示例:

python 复制代码
import math

# 使用时需要前缀
result = math.sqrt(25)
print(math.pi)
print(math.sin(math.radians(90)))
python 复制代码
# 导入多个特定项目
from math import sqrt, pi, sin, cos

print(sqrt(9))      # 3.0
print(pi)           # 3.141592653589793
print(sin(pi/2))    # 1.0

python 内置模块

  • os 模块:文件和目录操作

    • 类似于 node.js 的 fs 模块
  • random 模块:生成随机数

    • javascript 原生只有 Math,random 方法

例如:

python 复制代码
import os
print(os.getcwd()) # 获取当前命令执行的目录
python 复制代码
import random
print(random.randint(1,10)) # 获取包括1到10中的一个随机整数

python 面相对象编程

类与对象

废话不多说,直接上一个 javascript 的类和 python 相同的类,你就明白了

python

python 复制代码
# Python 类定义
class Person:
    # 构造函数
    # self 相当于 javascript 中的 this
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self._private_var = "internal"  # 约定为私有(实际仍可访问)
    
    # 实例方法
    def greet(self):
        return f"Hello, I'm {self.name}"
    
    # 类方法
    @classmethod
    def from_birth_year(cls, name, birth_year):
        import datetime
        age = datetime.datetime.now().year - birth_year
        return cls(name, age)
    
    # 静态方法
    @staticmethod
    def is_adult(age):
        return age >= 18
    
    # 属性装饰器
    @property
    def adult(self):
        return self.age >= 18
    
    @adult.setter
    def adult(self, value):
        print("Cannot directly set adult status")

javascript

javascript 复制代码
// JavaScript 类定义
class Person {
    class_attr = "类属性"  # 类属性
  
    // 构造函数
    constructor(name, age) {
        this.name = name;
        this.age = age;
        this._privateVar = "internal";  // 约定为私有
    }
    
    // 实例方法
    greet() {
        return `Hello, I'm ${this.name}`;
    }
    
    // 静态方法
    static fromBirthYear(name, birthYear) {
        const age = new Date().getFullYear() - birthYear;
        return new Person(name, age);
    }
    
    // Getter
    get adult() {
        return this.age >= 18;
    }
    
    // Setter
    set adult(value) {
        console.log("Cannot directly set adult status");
    }
}

如何实例化呢,python 不用 new,就像函数一样调用

python 复制代码
person1 = Person("张三", 30)
person1.greet()

这里需要注意:

  • person1._privateVar 是得不到值 "internal"的,这是 python 内部的一种名称修饰机制,下划线属性或者函数,实例是不能直接访问到的,只能通过 实例名._类名._属性名访问,也就是 person1._Person._privateVar 访问到
  • @classmethod 在 python 中用来定义类方法,这里不能访问 self。 也就是 javascript 中的 this
  • @staticmethod 在 python 中用来静态方法,不能访问实例(self)或者类,跟javascript 一致。
  • 通过@property 装饰器定义 get 方法,通过 @属性名.setter 定义 setter 方法。这个跟javascript 区别还是挺大的。

接下来看下面相对象的 3 个特征,在 python 中如何实现的

第一个是封装:

封装是将数据和操作数据的方法绑定在一起,隐藏内部实现细节,只暴露必要的接口。

对于 python 我们知道如何定义私有属性,共有属性即可

实现一个简单的示例

python 复制代码
class BankAccount:
    def __init__(self, balance):
        self._balance = balance # _balance 是私有属性
    
    def deposit(self, amount):
        self._balance += amount
        
    def withdraw(self, amount):
        if self._balance >= amount:
            selef._balance -= amount
        else:
            print("not enough")
           
    def get_balance(self):
        return self._balance
 
account = BankAccount(100)
account.deposit(50)
print(account.get_balance()) // 150

接着看继承特性

感觉很有 javascript 的既视感。。。。,也是调用父类的构造函数,完成子类的属性和方法的继承。

python 复制代码
# 父类(基类)
class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        print(f"{self.name} 正在吃东西")
    
    def sleep(self):
        print(f"{self.name} 正在睡觉")
    
    def make_sound(self):
        print(f"{self.name} 发出声音")

# 子类(派生类)
class Dog(Animal):  # 继承Animal类
    def __init__(self, name, breed):
        super().__init__(name)  # 调用父类的构造函数
        self.breed = breed  # 子类特有的属性
    
    # 重写父类方法(多态)
    def make_sound(self):
        print(f"{self.name} 汪汪叫!")
    
    # 子类特有的方法
    def fetch(self):
        print(f"{self.name} 正在接飞盘")

# 使用
dog = Dog("旺财", "金毛")
dog.eat()         # 继承自父类
dog.sleep()       # 继承自父类
dog.make_sound()  # 重写的方法
dog.fetch()       # 子类特有的方法
print(f"品种: {dog.breed}")

最后就是多态了,多态允许不同类的对象调用相同的方法时,表现不同的行为。python 通过方法重写来实现多态。

其实这个不用太关心,跟 javascript 类似, 也是通过方法重写来实现多态。实际上多态一般是在有类型的语言里比较适合,比如 typescript 可以实现对传参类型的不同(重载),声明不同的函数类型来实现多态。

python 复制代码
class Animal:
    def make_sound(self):
        pass  # 抽象方法,由子类实现

class Dog(Animal):
    def make_sound(self):
        return "汪汪汪!"

class Cat(Animal):
    def make_sound(self):
        return "喵喵喵!"

class Bird(Animal):
    def make_sound(self):
        return "啾啾啾!"

# 多态:同一接口,不同行为
def animal_sound(animal):
    """这个函数不知道具体的动物类型,只知道它会叫"""
    return animal.make_sound()

# 创建不同的动物对象
animals = [Dog(), Cat(), Bird()]

# 统一调用相同的方法
for animal in animals:
    print(animal_sound(animal))
    
# 输出:
# 汪汪汪!
# 喵喵喵!
# 啾啾啾!

调用 deepSeek 案例

1. 安装必要的库

在命令行/终端中输入:

bash

bash 复制代码
pip install openai

2.申请 apikey

注意,要充值。。。可以自己充值 10 元,对于我们学来说,可以用很久很久了,当然你也可以充值 openai(chatgpt),用法是一模一样的,都兼容 openai 的 api,

创建好后,复制这个 key, 后面要用

3. 最简单的代码(复制粘贴就能用)

python 复制代码
# 文件名:simple_deepseek.py
from openai import OpenAI

# 1. 替换成你的DeepSeek API密钥
# 获取地址:https://platform.deepseek.com/api_keys
api_key = "sk-你的API密钥在这里"

# 2. 连接到DeepSeek
client = OpenAI(
    api_key=api_key,
    base_url="https://api.deepseek.com"
)

# 3. 问一个问题
response = client.chat.completions.create(
    model="deepseek-chat",  # 使用免费模型
    messages=[
        {"role": "user", "content": "你好,用一句话介绍你自己"}
    ]
)

# 4. 打印回答
print("AI回答:", response.choices[0].message.content)

4.运行脚本

bash 复制代码
python3 simple_deepseek.py

以下是我调用的结果:

最后如果你也学习跟前端相关的 ai 知识,还有学习 headless 组件库教程,node.js全栈(next.js, nest.js)欢迎加入我们交流群。

相关推荐
掘金安东尼1 小时前
Astro 十一月更新:新特性与生态亮点(2025)
前端
拉不动的猪1 小时前
判断dom元素是否在可视区域的常规方式
前端·javascript·面试
Java中文社群1 小时前
太顶了!全网最全的600+图片生成玩法!
人工智能
阿里云大数据AI技术1 小时前
EMR AI 助手开启公测:用 AI 重塑大数据运维,更简单、更智能
人工智能
Hilaku1 小时前
如何用隐形字符给公司内部文档加盲水印?(抓内鬼神器🤣)
前端·javascript·面试
言之。1 小时前
AI时代的UI发展
人工智能·ui
guxuehua1 小时前
Monorepo Beta 版本发布问题排查与解决方案
前端
猫头虎-前端技术1 小时前
小白也能做AI产品?我用 MateChat 给学生做了一个会“拍照解题 + 分步教学”的AI智能老师
前端·javascript·vue.js·前端框架·ecmascript·devui·matechat
b***66611 小时前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端