Python的发展历程
- 发明者:
来自罗森的Guido
一个学霸-阿姆斯特丹大学获得数学和计算机科学硕士学位
致力于打造解放程序员的语言
-
发展历程
Python应用领域
- 自动化办公:提升我们的工作效率,解放双手
- 爬虫:爬取大量数据集
- 数据分析:数据可视化
- 大数据:大数据应用,应用推荐
- 全栈Web项目:产品开发
- AI:人工智能主开发语言
应用AI,学习Python的重要性
- Python是机器学习和深度学习领域最受欢迎的语言之一
- 通过学习Python,你可以使用各种强大的库和工具来构建和训练机器学习模型
- Python拥有广泛的数据分析库和工具,如Pandas、NumPy、Matplotlib等
- 使用Python可以方便地对大量数据进行处理、分析和可视化,从而提取有价值的信息并做出决策
- 可以更快地实现和优化算法,并且代码更容易在不同的平台和环境中移植和部署
- Python可以通过使用多线程和并行化等技术来处理大规模的数据,这对于大模型训练来说是非常重要的
Python环境的搭建
- 下载安装包:https://www.python.org/downloads/
- 安装完后,在终端输入
python --version
,通过查看安装的版本号的来检测是否安装成功。
Python编辑器安装
- VSCode安装:https://code.visualstudio.com/
安装Python插件:
- 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
- 安装 python-dotenv 库:终端运行命令
pip install python-dotenv
- 创建.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"
- 将.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
- 安装FastAPI:终端命令
pip install fastapi
- 对于生产环境,还需要一个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
-
浏览器输入:http://127.0.0.1:8000 查看返回结果
- 浏览器输入:http://127.0.0.1:8000/docs 查看交互式文档(Swagger)
- 浏览器输入:http://127.0.0.1:8000/redoc 查看API文档