python

11 阅读4分钟

前置准备

1.环境配置 py中管理包工具:pip (python中的npm)

2.必备依赖:

  • pip install openai:安装openai工具库SDK(这个库里面有给openai提供方法定义,网络请求逻辑和数据模型定义,但是没有ai模型本身,所以还需要联网调用远端模型的计算能力!)

3.虚拟环境的理解
python的虚拟环境是什么?为什么需要虚拟环境 因为不同的python项目需要的python版本不同,对应的项目框架django2/3也不同,如果没有虚拟环境就需要来回卸载,这个时候如果有虚拟环境,就起到了【隔离】的作用。例如我们安装openai这个依赖,如果没有使用虚拟环境,那么就是安装到全局,导致所有项目都用一个版本,当一个项目版本不是适配的时候就出现“版本冲突”问题。

4. 怎么保证项目是处在虚拟环境中 且 项目依赖也安装虚拟环境中:【激活虚拟环境】
和npm不同,我们在给项目安装依赖的时候,决定这个依赖安装的地址,并不是安装命定在哪个项目目录下执行,pip安装的依赖地址取决于项目是否激活了虚拟环境。虚拟环境的激活意味着:从现在开始使用的是虚拟环境的python解释器和依赖工具。

5. 虚拟环境的激活步骤:

# 1. 进入项目目录
cd my-project

# 2. 创建虚拟环境(只需做一次)
python -m venv venv 
# 也可以执行:python -m venv my_env,表示创建一个叫my_env的虚拟环境

# 3. 激活虚拟环境
source venv/bin/activate   # Mac/Linux
# 或 .\venv\Scripts\activate  # Windows
#如果虚拟环境名叫my_env,那么激活命令就是: source my_env/bin/activate

# 激活后,终端提示符前面会出现 (venv)
(venv) $ 

4. 依赖包
当你激活虚拟环境后,使用 pip install 下载的包只会安装到当前虚拟环境的目录中,不会影响到系统全局的 Python 环境或其他虚拟环境。 image.png

注意点

  1. 每次进入项目都要激活虚拟环境:source venv/bin/active
  2. pip安装不用每次进入都执行:安装地址虚拟环境文件夹下的 /lib/site-packages

1.python语法

    • 变量声明:变量不需要声明就可以直接赋值;
    • 类型转换:变量初始化时候不需要类型定义 & 后续赋值可以动态类型转换
// java语言
int x = 10;    // 1.变量需要声明 && 2.类型定义 int
x = "hello";   // 编译错误:类型不匹配

// JavaScript
let x = 10;     // 1.变量需要声明  2.不需要类型定义x。 是数字
x = "hello";    // 现在 x 是字符串,允许

# Python
x = 10          # 1.变量不需要声明  2.不需要类型定义x。  x 是整数
x = "hello"     # 现在 x 是字符串,允许

1.1 类型注解

类型注解 就是类似于在变量的定义、函数参数、返回值位置后面加上":数据类型",表明你期望的数据类型。例如:

def bar(x: int) -> int: # 这里期望入参x的类型是int,返回值类型是int

但是类型注解如果不符合类型规定,python解释器是不会抛出type-error类型错误的,因为python是动态类型语言,不会像java那样进行类型检查。 但是虽然解释器不会进行类型检查,但是运行的时候可能会导致程序本身出现错误。

1.2 类型隐式转化

类型的隐式转化通常发生不同数据类型之间的【加减运算】或者【比较运算】中,例如:1+‘2’,1 == true。 在python中加减运算中类型转换不像js中,只针对int和float之间,不存在于跨类型,因此在执行1+‘2’的时候会报错

1.3 class类

类中定义的普通方法,在调用的时候python会自动将类创建的实例传入到这个第一个默认参数中。

1.4 数据结构

  1. 简单数据类型(3个)
  • num: int / float
  • bool: True / False
  • str
  1. 复杂数据类型:
  • list 列表(中括号格式):[3, 2, 1, 4, 3, 2, 1]
  • tuple 元祖(圆括号式的结构,不可变序列): (1, 'string ', [1 ,2])
  • dict 字典(花括号格式,key不允许重复):内部元素 {"a": 1, "b": 2} key-value
  • set 集合(花括号格式,value不允许重复):内部元素:{ 'a', 'b', 1, 2, False } 只存value

juejin.cn/post/717682…

列表推导式

在 Python 列表推导式 [表达式 for 变量 in 可迭代对象] 中,表达式必须写在最前面(即 for 关键字之前)。

[
    f"[{i+1}] {res.get('title', '')}\n{res.get('snippet', '')}"
    for i, res in enumerate(results["organic_results"][:3])
]

# 正确:表达式 x**2 在前面
squares = [x**2 for x in range(5)]      # [0,1,4,9,16]

# 错误:把循环写前面
squares = [for x in range(5) x**2]      # SyntaxError