【AI大模型】Python基础

Python的发展历程

  1. 发明者:

来自罗森的Guido
一个学霸-阿姆斯特丹大学获得数学和计算机科学硕士学位
致力于打造解放程序员的语言

  1. 发展历程


Python应用领域

  • 自动化办公:提升我们的工作效率,解放双手
  • 爬虫:爬取大量数据集
  • 数据分析:数据可视化
  • 大数据:大数据应用,应用推荐
  • 全栈Web项目:产品开发
  • AI:人工智能主开发语言

应用AI,学习Python的重要性

  • Python是机器学习和深度学习领域最受欢迎的语言之一
  • 通过学习Python,你可以使用各种强大的库和工具来构建和训练机器学习模型
  • Python拥有广泛的数据分析库和工具,如Pandas、NumPy、Matplotlib等
  • 使用Python可以方便地对大量数据进行处理、分析和可视化,从而提取有价值的信息并做出决策
  • 可以更快地实现和优化算法,并且代码更容易在不同的平台和环境中移植和部署
  • Python可以通过使用多线程和并行化等技术来处理大规模的数据,这对于大模型训练来说是非常重要的

Python环境的搭建

  1. 下载安装包:https://www.python.org/downloads/
  2. 安装完后,在终端输入python --version,通过查看安装的版本号的来检测是否安装成功。

Python编辑器安装

  1. VSCode安装:https://code.visualstudio.com/
    安装Python插件:
  2. PyCharm安装:https://www.jetbrains.com/pycharm/

pip包管理工具

  • pip是Python的包管理工具,用于安装、卸载、升级和管理Python包
  • pip是Python标准库之外的一个第三方工具,可以从Python Package Index (PyPl)下载和安装各种Python包和依赖项。
  • pip官网地址:https://pypi.org/project/pip/

说明:
pip不用单独安装,是随着python一起安装,查看pip版本号:pip --version
如果发现pip不可用或损坏,则直接执行下面的命令就可以:python -m ensurepip --upgrade

pip常用命令

pip install package_name: 安装指定的Python包或库,将包的文件复制到Python解释器的site-packages目录下。
pip uninstall package_name:卸载指定的Python包或库,从Python解释器的site-packages目录下删除该包的文件。
pip list:列出当前Python环境中已安装的所有包或库的列表。

apple@appleMacBook-Pro ~ % pip list                 
Package            Version
------------------ ---------
aiohttp            3.8.4
aiosignal          1.3.1
async-timeout      4.0.2
attrs              23.1.0
certifi            2022.12.7
charset-normalizer 3.1.0
frozenlist         1.3.3
idna               3.4
multidict          6.0.4
openai             0.27.6
pip                23.3.2
requests           2.29.0
setuptools         56.0.0
tqdm               4.65.0
urllib3            1.26.15
wheel              0.40.0
yarl               1.9.2

pip show package_name: 显示指定包的详细信息,包括包的名称、版本号、安装路径等。
pip search package_name: 在PyPI (Python Package Indlex)上搜索指定的包或库,并显示相关信息。
pip freeze:显示当的Python环境中已安装的所有包的名称和版本号。
pip install -rrequirements-txt:根据requirements.txt文件中列出的依赖项列表,安装指定版本的Python包或库。

pip install package_name[dependencies]:一个包可能依赖于其他包。要安装一个包及其依赖项。

如:假设我们有一个名为"my_math_package"的Python包,它依赖于nurpy和scipy库。我们想要安装这个包,并确保同时安装这两个依赖项。
pip install my_math_package[numpy,scipy]

pip wheel package_name:将指定的Python包或库打包成wheel文件,以便在其他Python环境中使用。
使用pip将名为"numpy'的Python库打包成wheel文件 (Python的分布式的文件格式,替代Python传统的egg文件)。pip wheel numpy

Python工程应用

1. 字符串

  • 普通字符串:使用单引号(')或双引号(")括起来的字符串,例如:'hello',"hello"
  • 原始字符串:原始字符串是一种特殊类型的字符串,在字符串中不会将反斜杠(\)视为转义字符,而是作为普通字符原样输出。
# 1.普通字符串,\n是转义字符会换行
print('hello\nworld!') 
# 2.原始字符串。在Python中,r表示原始字符串(raw string)
print(r'hello\nworld!') // 原始字符串,原样输出
# 3.三引号字符串/文档字符串:使用三个引号(单引号/双引号)括起来的字符串,可以包含多行文本
print('''Hello
World!

Python'''
)

# 4.格式化字符串(使用大写的'F'或者'f'作为字符串的前缀)
for i in range(5):
  print(f'第{i + 1}个数字是{i}')
  • Unicode字符串和字节串
    Unicode字符串通常用于表示包含非ASCII字符的字符串,比如包含中文字符或特殊符号的文本。在Python中,Unicode字符串通常以 u 或 u" 作为前缀,Unicode字符串表示的是字符本身,而不是它们的编码形式。
  • 字节串(用于表示二进制数据)
    字节串(Byte String)是一种特殊的数据类型,用于表示二进制数据。字节串以b或bytes作为前缀,并且包含了一串字符的ASCII码表示。每个字符都是一个字节,因此字节串可以包含多个字节。
# codecs是Python的一个标准库,它提供了对各种字符编码的读取和写入操作的支持。
import codecs # Unicode字符串转译

# Unicode字符串:定义一个包含中文字符的Unicode字符串
text = u'hello,Python!'
# 打印该字符串
print(text)

# 字节串
byte_string = b'Hello, World!'
# 打印字节串
print(byte_string)

# 将字节串转换为字符串(需要解码)
string = byte_string.decode('utf-8')
print(string)

# 将字符串转换为字节串(需要编码)
byte_string = string.encode('utf-8')
print(byte_string)


# 将该字符串写入文件
with codecs.open('output.txt', 'w', encoding='utf-8') as file:
    file.write(text)

length = len('abcde') # 获取字符串长度

在字符串定义方式上的区别

语言 字符串定义方式上的区别
Python 使用单引号('')或双引号("")来表示一个字符串,也可以用三引号来表示一个多行字符串
Java 使用char表示单个字符,String表示一个字符串,常量字符或字符串用双引号""表示
JavaScript 也使用单引号('')或双引号("")来表示一个字符串,同时也可以使用反斜杠(\)来表示一个字符串的续行。
2.Python文档化
# Python文档化:相当于多行注释,使用三个双引号(""")

class Person:
    """
    表示一个人的类

    属性:
    name -- 姓名
    age  -- 年龄

    方法:
    say_hello -- 打印问候语
    """
    def __init__(self, name, age) -> None:
        self.name = name
        self.age = age

    def say_hello(self):
        print('Hello, my name is ' + self.name)

    
    def getInfo(name):
        return '姓名:' + name

    # 变量类型注解(即指定方法参数是字符串类型)
    def getInfo1(name: str):
        return '姓名:' + name
    
    # 函数返回值类型注解(即指定方法返回值是字符串类型)
    def getInf2(name: str) -> str:
        return '姓名:' + name
3.异常处理语句
# Python中的异常处理语句    
try:
    # 要执行的代码
except ExceptionType:
    # 当异常发生时执行的代码
finally:
    # 无论是否发生异常都会执行的代码
4.文件I/O应用
# 写入文件操作
with open('test.txt', 'w') as f:
    f.write('Hello, world!\n')
    f.write('Hello, world!')

# 读取文件操作
with open('test.txt', 'r') as f:
    content = f.read()
    print(content)  # str类型

# 关闭文件(说明:使用了with语句时,会自动处理文件的关闭操作,无需再使用下面代码手动关闭)
# f.close()
5.JSON应用
import json

# dict类型(Python对象)
data = {
    "name": "Tom",
    "age": 25,
    "hobbies": ["阅读", "游泳", "旅游"]
}

# json.dumps() 将字典转换为JSON字符串
json_str = json.dumps(data)
print(json_str)
print(type(json_str)) # 打印值的类型。输出结果:<class 'str'> 表示是字符串类型

# 写入文件操作(写入Python对象)
with open('data.json', 'w') as f:
    # json.dump() 将Python对象写入JSON文件
    json.dump(data, f)

# 读取文件操作
with open('data.json', 'r') as f:
    # 加载JSON文件
    data = json.load(f)
    print(data) # dict类型

Python爬虫

1.什么是爬虫

通俗的讲:就是模拟浏览器抓取数据
科学的讲:通过一定的规则用程序对互联网相关数据解析并存储

2.urllib库
# urllib库:用于操作网页URL,并对网页的内容进行抓取处理
# urllib.request: 打开和读取URL
# urllib.request.urlopen(): 打开一个URL
from urllib.request import urlopen

url = 'http://baidu.com'
con = urlopen(url)
# 读取网页的内容
bytes_data = con.read()
print(bytes_data)
f = open('test.html', 'wb')
f.write(bytes_data)
f.close()

# open(name, mode)方法
# 核心:创建一个file对象 python的I/O;name是要访问的文件名,mode是决定打开的模式
# mode: w表示写入;wb表示以二进制格式写入;
3.requests库
import requests
import json

# 封装百度翻译请求
def baiduFanyi(keyword):
    url = 'https://fanyi.baidu.com/sug'
    params = {
        'kw': keyword
    }
    response = requests.post(url, params)
    res_str = response.text  # 获取JSON字符串
    res_dic = response.json()  # 获取JSON对象(字典)
    print('请求结果:', res_dic)
    # JSON字符串 转 字典
    # res_dic = json.loads(res_str)
    errno = res_dic['errno']
    dataList = res_dic['data']
    if (errno == 0):
        length = len(dataList)
        for i in range(length):
            item = dataList[i]
            value = item['v']
            print('第' + str(i + 1) + '项解释:' + value)
        """
        for item in dataList:
            value = item['v']
            print(value)
        """

# 测试翻译方法
def testBaiduFanyi():
    searchText = input('请输出要翻译的词:')
    baiduFanyi(searchText)

# Python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口(即main函数)。
# __name__ 是内置变量,用于表示当前模块的名字;
# if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。其作用是:
#   1.当python文件直接被运行时,if __name__ == '__main__': 语句下面的代码段将被执行。
#   2.当python文件以模块形式被调用时,if __name__ == '__main__': 语句下面的代码段不会被执行。
if __name__ == "__main__":
    testBaiduFanyi()

  • 运行结果:
请输出要翻译的词:你好
请求结果: {'errno': 0, 'data': [{'k': '你好', 'v': 'hello; hi; How do you do!'}, {'k': '你好吗', 'v': 'How do you do?'}, {'k': '你好,陌生人', 'v': '[电影]Hello Stranger'}], 'logid': 1410962127}
第1项解释:hello; hi; How do you do!
第2项解释:How do you do?
第3项解释:[电影]Hello Stranger

字符串处理

  • 字符串高频处理方法
方法 用途
split() 按照指定的分隔符将字符串分割成一个列表
strip() 删除字符串头尾指定的字符(默认为空格),返回新的字符串
replace() 替换字符串中的指定内容为新的字符串,并返回新的字符串
find() 查找指定内容在字符串中出现的位置(索引号),若未找到则返回-1
lower() 将字符串中的字母全部转换为小写,并返回新的字符串。
upper() 将字符串中的字母全部转换为大写,并返回新的字符串。
index() 查找指定内容在字符串中出现的第一个位置(索引号),若未找到则报错。
capitalize() 将字符串的第一个字母大写,其余字母小写,并返回新的字符串。
title() 将字符串中每个单词的第一个字母大写,其余字母小写,并返回新的字符串。

dotenv的使用

做配置文件的管理,python-dotenv是一个Python库,可以从.env文件(配置文件)中读取环境变量。
作用:可以将敏感信息(如:API秘钥)存储在环境变量中,而不是硬编码在代码中,可以有效保护敏感信息安全。

如何使用 python-dotenv
  1. 安装 python-dotenv 库:终端运行命令 pip install python-dotenv
  2. 创建.env文件:在项目根目录下创建一个名为 .env 的文件,并将环境变量写入该文件中,每个key=value对应一行。
# .env文件的内容
# MySQL数据库
DATABASE_HOST=localhost
DATABASE_NAME=mydatabase
DATABASE_USER=myuser
DATABASE_PASSWORD=mypasswprd

# 私有KEY
SECRET_KEY=mysecretkey

#sk-xxx 使用你自己的 key 替换
OPENAI_API_KEY="sk-xxx"
OPENAI_API_BASE="https://api.fe8.cn/v1"
  1. 将.env文件中的变量加载到系统环境变量中
from dotenv import load_dotenv
import os

# 使用该函数将.env文件中的所有变量读取到系统环境变量中,方便在程序中使用这些变量
load_dotenv()

# 访问环境变量
SECRET_KEY = os.getenv("SECRET_KEY")
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")

FastAPI的使用

FastApi 用于构建API,是一个现代、快速(高性能)的 Python web 框架。
官方地址:https://fastapi.tiangolo.com/

如何使用FastAPI
  1. 安装FastAPI:终端命令 pip install fastapi
  2. 对于生产环境,还需要一个ASGI服务器,如Uvicorn或Hypercorn
    安装Uvicorn,执行命令:pip install "uvicorn[standard]"
  • 新建一个main.py文件,内容如下:
from fastapi import FastAPI

# 创建API实例
app = FastAPI()

# async def是定义异步函数的方法
# 127.0.0.1/
# 跟路由,设置接口的路由
@app.get("/")
# root 是接口方法名称
async def root():
    return {"message": "Hello World"}
  • 项目启动命令(在项目文件目录下,执行下面命令)
    uvicorn main:app --reload

main是文件名(main.py);
app是文件内创建API实例;
--reload 重新启动服务器(仅用于开发)

  • 运行结果:
zhangsan@zhangsan PythonProject % uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['/Users/zhangsan/Workspaces/PythonProject']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [3910] using WatchFiles
INFO:     Started server process [3918]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     127.0.0.1:53511 - "GET / HTTP/1.1" 200 OK
INFO:     127.0.0.1:53511 - "GET /favicon.ico HTTP/1.1" 404 Not Found
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容