Python學習圣經:從0到1,精通Python使用

尼恩:LLM大模型學習圣經PDF的起源

在40歲老架構師 尼恩的讀者交流群(50+)中,經常性的指導小伙伴們改造簡歷。

經過尼恩的改造之后,很多小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試機會,拿到了大廠機會。

然而,其中一個成功案例,是一個9年經驗 網易的小伙伴,當時拿到了一個年薪近80W的大模型架構offer,逆漲50%,那是在去年2023年的 5月。

  • 驚天大逆襲:8年小伙20天時間提75W年薪offer,逆漲50%,秘訣在這

不到1年,小伙伴也在團隊站穩了腳跟,成為了名副其實的大模型架構師。

目前,他管理了10人左右的團隊,包括一個2-3人的python算法小分隊,包括一個3-4人Java應用開發小分隊,包括一個2-3人實施運維小分隊。并且他們的產品也收到了豐厚的經濟回報, 他們的AIGC大模型產品,好像已經實施了不下10家的大中型企業客戶。

當然,尼恩更關注的,主要還是他的個人的職業身價。

小伙伴反饋,不到一年,他現在是人才市場的香饃饃。怎么說呢?

他現在職業機會不知道有多少, 而是大部分都是P8+ (年薪200W+)的頂級機會。

回想一下,去年小伙伴來找尼恩的時候, 可謂是 令人唏噓。

當時,小伙伴被網易裁員, 自己折騰 2個月,沒什么好的offer, 才找尼恩求助。

當時,小伙伴其實并沒有做過的大模型架構, 僅僅具備一些 通用架構( JAVA 架構、K8S云原生架構) 能力,而且這些能力還沒有完全成型。

特別說明,他當時 沒有做過大模型的架構,對大模型架構是一片空白。

本來,尼恩是規劃指導小伙做通用架構師的( JAVA 架構、K8S云原生架構),

毫無疑問,大模型架構師更有錢途,所以, 當時候尼恩也是 壯著膽子, 死馬當作活馬指導他改造為 大模型架構師。

回憶起當時決策的出發點,主要有3個:

(1)架構思想和體系,本身和語言無關,和業務也關系不大,都是通的。

(2)小伙伴本身也熟悉一點點深度學習,懂python,懂點深度學習的框架,至少,demo能跑起來。

(3)大模型架構師稀缺,反正面試官也不是太懂 大模型架構。

基于這個3個原因,尼恩大膽的決策,指導他往大模型架構走,先改造簡歷,然后去面試大模型的工程架構師,特別注意,這個小伙伴面的不是大模型算法架構師。

沒想到,由于尼恩的大膽指導, 小伙伴成了。

沒想到,由于尼恩的大膽指導, 小伙伴成了, 而且是大成,實現了真正的逆天改命。

相當于他不到1年時間, 職業身價翻了1倍多,可以拿到年薪 200W的offer了。

既然有一個這么成功的案例,尼恩能想到的,就是希望能幫助更多的社群小伙伴, 成長為大模型架構師,也去逆天改命。

于是,從2024年的4月份開始,尼恩開始寫 《LLM大模型學習圣經》,幫助大家穿透大模型,走向大模型之路。

在這里插入圖片描述

尼恩架構團隊的大模型《LLM大模型學習圣經》是一個系列,初步的規劃包括下面的內容:

  • Python學習圣經:從0到1精通Python,打好AI基礎

  • LLM大模型學習圣經:從0到1吃透Transformer技術底座

  • 《LangChain學習圣經:從0到1精通LLM大模型應用開發的基礎框架》

  • 《LLM大模型學習圣經:從0到1精通RAG架構,基于LLM+RAG構建生產級企業知識庫》

  • 《SpringCloud + Python 混合微服務架構,打造AI分布式業務應用的技術底層》

  • 《LLM大模型學習圣經:從0到1吃透大模型的頂級架構》

本文是第1篇,作者是資深架構師 Andy(負責初稿) +43歲老架構師尼恩(負責升華,帶給大家一種俯視技術,技術自由的高度)。

尼恩架構團隊會持續迭代和更新,后面會有實戰篇,架構篇等等出來。 并且錄制配套視頻。

在尼恩的架構師哲學中,開宗明義:架構和語言無關,架構的思想和模式,本就是想通的。

架構思想和體系,本身和語言無關,和業務也關系不大,都是通的。

所以,尼恩用自己的架構內功,以及20年時間積累的架構洪荒之力,通過《LLM大模型學習圣經》,給大家做一下系統化、體系化的LLM梳理,使得大家內力猛增,成為大模型架構師,然后實現”offer直提”, 逆天改命。

尼恩 《LLM大模型學習圣經》PDF 系列文檔,會延續尼恩的一貫風格,會持續迭代,持續升級。

這個文檔將成為大家 學習大模型的殺手锏, 此文當最新PDF版本,可以來《技術自由圈》公號獲取。

本文目錄

第一部分:基礎入門

第一章:Python簡介

歡迎來到Python編程的世界!Python是一門強大而優雅的編程語言,無論你是編程新手還是有經驗的開發者,都能在Python中找到樂趣和挑戰。

Python以其簡潔易懂的語法和豐富的庫而聞名,廣泛應用于數據分析、人工智能、Web開發、自動化腳本等各個領域。

在本章中,我們將介紹Python的歷史與特點、Python的應用領域以及如何安裝和配置Python環境。

通過這部分內容,你將對Python有一個初步的了解,為接下來的學習打下堅實的基礎。

1.1 Python的歷史與特點

1.1.1 Python的歷史

Python是一種由Guido van Rossum于1989年發明的高級編程語言。最初,Guido van Rossum在荷蘭的國家研究所工作,設計Python的初衷是為了創建一種易于閱讀和編寫的編程語言,并且能夠處理當時主流的ABC語言不能勝任的任務。

Python的第一個正式版本0.9.0于1991年發布,這個版本已經包含了“模塊、異常處理、函數以及核心數據類型”等許多現在仍然重要的功能。
1994年,Python 1.0發布,標志著Python正式進入了主流編程語言的行列。隨著社區的發展和需求的變化,Python不斷更新和完善:

  • Python 2.0:發布于2000年,引入了垃圾回收機制和更完善的Unicode支持。
  • Python 3.0:發布于2008年,對語言進行了大幅度的改進,不完全向后兼容,目的是清理一些歷史遺留問題并提升語言的一致性和可讀性。

目前,Python的最新版本是Python 3.x,已經成為主流的Python版本。
Python 2.x系列已經停止更新,建議新項目和學習都使用Python 3.x。

1.1.2 Python的主要特點

Python因其簡潔、優雅和強大,受到了廣泛的歡迎。以下是Python的主要特點:

  • 簡潔明了:Python的語法設計簡潔明了,代碼可讀性強。一個典型的Python程序通常比同樣功能的C/C++/Java代碼更短。
  • 易學易用:Python的學習曲線相對平緩,非常適合初學者。它提供了大量的文檔和社區支持,幫助新手快速上手。
  • 解釋型語言:Python是一種解釋型語言,代碼在運行時逐行解釋執行,無需編譯。這樣不僅方便調試,還能快速測試和驗證代碼。
  • 動態類型:Python是動態類型語言,變量在使用時才確定類型,無需預先聲明。
  • 跨平臺:Python是一種跨平臺語言,支持在Windows、macOS、Linux等多個操作系統上運行,只需一次編寫即可在多種環境中使用。
  • 豐富的標準庫:Python擁有一個龐大的標準庫,涵蓋了文件I/O、系統調用、網絡編程、Web服務、數據庫接口等各個方面,極大地簡化了開發工作。
  • 強大的社區支持:Python擁有一個活躍且龐大的社區,提供了豐富的第三方庫和工具,使開發者可以方便地擴展Python的功能。

我們可以看到Python是一門經過長期發展和完善的語言,具備了許多現代編程語言的優點,并在多個領域得到了廣泛應用。

1.2 Python的應用領域

Python以其簡潔的語法和強大的功能,廣泛應用于各個領域。以下是Python在一些主要應用領域中的典型使用場景和優勢。

1.2.1 Web開發

Python在Web開發領域非常受歡迎,得益于其豐富的框架和庫,這些工具極大地簡化了Web應用的開發過程。

常用框架和工具
  • Django:一個功能強大且完備的Web框架,適用于快速開發復雜的大型Web應用。Django提供了諸如ORM(對象關系映射)、身份驗證、模板引擎、URL路由等內置功能,極大地減少了開發工作量。
  • Flask:一個輕量級的Web框架,靈活性高,適用于小型項目和原型開發。Flask提供了基本的Web開發功能,并允許開發者根據需要自由選擇和集成第三方庫。
示例代碼

下面是一個使用Flask開發的簡單Web應用示例:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def home():return "Hello, Flask!"if __name__ == '__main__':app.run(debug=True)

保存以上代碼為app.py,然后在命令行中運行:

python app.py

打開瀏覽器,訪問http://127.0.0.1:5000/,你將看到頁面顯示“Hello, Flask!”。

1.2.2 數據分析

Python在數據分析領域同樣表現出色,擁有大量專門用于數據處理和分析的庫,使得數據分析工作更加高效和便捷。

常用庫和工具
  • pandas:一個強大的數據處理和分析庫,提供了高效的數據結構和數據操作功能,尤其適用于結構化數據處理。
  • NumPy:一個科學計算庫,提供了支持多維數組和矩陣運算的大量函數。
  • Matplotlib:一個繪圖庫,用于創建靜態、動態和交互式可視化圖表。
示例代碼

下面是一個使用pandas和Matplotlib進行數據分析和可視化的示例:

import pandas as pd
import matplotlib.pyplot as plt# 創建一個簡單的DataFrame
data = {'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],'Sales': [200, 220, 210, 250, 270]}
df = pd.DataFrame(data)# 打印數據表
print(df)# 繪制銷售趨勢圖
# 使用月份和銷售數據繪制折線圖
plt.plot(df['Month'], df['Sales'])
# 添加 x 軸標簽
plt.xlabel('Month')
# 添加 y 軸標簽
plt.ylabel('Sales')
# 添加圖表標題
plt.title('Monthly Sales')
# 顯示圖表
plt.show()

運行上述代碼,將生成一個顯示月度銷售趨勢的折線圖。
image.png

1.2.3 人工智能與機器學習

Python在人工智能(AI)和機器學習(ML)領域的應用非常廣泛,得益于其豐富的庫和框架,使得開發AI和ML應用變得相對容易。

常用庫和工具
  • TensorFlow:一個由Google開發的開源機器學習框架,用于構建和訓練深度學習模型。
  • PyTorch:一個由Facebook開發的開源深度學習框架,提供了靈活且易于使用的接口。
  • scikit-learn:一個簡單而高效的機器學習庫,包含了大量的分類、回歸、聚類算法,適用于數據挖掘和數據分析。
示例代碼

下面是一個使用scikit-learn進行簡單線性回歸的示例:

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt# 生成數據
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 生成輸入特征X,reshape(-1, 1)將數組轉換成一列
y = np.array([2, 3, 5, 6, 5])  # 生成目標變量y# 創建線性回歸模型并訓練
model = LinearRegression()  # 創建線性回歸模型
model.fit(X, y)  # 使用輸入特征X和目標變量y訓練模型# 預測
y_pred = model.predict(X)  # 使用訓練好的模型預測輸出# 繪制結果
plt.scatter(X, y, color='blue')  # 繪制散點圖,用藍色表示
plt.plot(X, y_pred, color='red')  # 繪制擬合直線,用紅色表示
plt.xlabel('X')  # 設置x軸標簽
plt.ylabel('y')  # 設置y軸標簽
plt.title('Linear Regression Example')  # 設置圖表標題
plt.show()  # 顯示圖表

運行上述代碼,將生成一個展示線性回歸結果的散點圖和回歸線。
image.png

1.2.4 自動化腳本

Python在編寫自動化腳本方面也非常有優勢,其簡潔的語法和強大的庫支持,使得開發自動化腳本變得簡單而高效。

常用庫和工具
  • os:提供了豐富的操作系統功能,如文件和目錄操作。
  • shutil:提供了高級的文件操作功能,如復制和移動文件。
  • requests:用于發送HTTP請求,適用于Web抓取和API調用。
示例代碼

下面是一個使用os和shutil庫進行文件整理的自動化腳本示例:

import os
import shutil# 定義源目錄和目標目錄
source_dir = 'C:/Users/Andy/Downloads'
target_dir = 'C:/Users/Andy/Documents/Sorted'# 創建目標目錄
if not os.path.exists(target_dir):os.makedirs(target_dir)# 遍歷源目錄中的文件
for filename in os.listdir(source_dir):file_path = os.path.join(source_dir, filename)# 判斷是否為文件if os.path.isfile(file_path):# 移動文件到目標目錄shutil.move(file_path, target_dir)print(f'Moved: {filename}')

運行該腳本后,下載目錄中的所有文件將被移動到指定的目標目錄中。

1.2.5 其他應用領域

除了上述領域,Python還在許多其他領域有廣泛的應用,包括但不限于:

  • 網絡爬蟲:通過編寫爬蟲程序抓取網絡數據,常用庫有BeautifulSoup、Scrapy等。
  • 游戲開發:使用Pygame等庫進行簡單的游戲開發。
  • 系統管理:編寫腳本實現系統管理和運維任務。

Python的多功能性和廣泛的應用領域,使其成為許多開發者和工程師的首選編程語言。
在接下來的章節中,我們將詳細介紹如何安裝和配置Python環境,幫助你快速入門Python編程。


1.3 如何安裝Python

在開始編寫Python程序之前,我們需要先安裝Python。在本節中,我們將介紹如何在不同操作系統上安裝Python,包括Windows、macOS和Linux。

1.3.1 Windows系統安裝

  1. 下載Python安裝包
  • 訪問Python官網。
  • 點擊“Downloads”菜單,根據你的操作系統選擇“Download for Windows”。
  • 下載最新的Python安裝包。
  1. 運行安裝包
  • 雙擊下載的安裝包以啟動安裝程序。
  • 在安裝界面,勾選“Add Python to PATH”選項,這將自動配置環境變量,方便在命令行中使用Python。
  • 點擊“Install Now”進行安裝。
  1. 驗證安裝
  • 安裝完成后,打開命令提示符(按Win + R,輸入cmd,按回車)。
  • 在命令提示符中輸入以下命令,驗證Python是否安裝成功:
python --version

如果顯示Python的版本號,說明安裝成功。

1.3.2 macOS系統安裝

macOS通常預裝了Python,但為了使用最新版本的Python,建議手動安裝。

  1. 使用Homebrew安裝Python
  • 如果尚未安裝Homebrew,先打開終端(按Cmd + Space,輸入Terminal,按回車),然后輸入以下命令安裝Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • 安裝Homebrew后,使用以下命令安裝Python:
brew install python
  1. 驗證安裝
  • 在終端中輸入以下命令,驗證Python是否安裝成功:
python3 --version

如果顯示Python的版本號,說明安裝成功。

1.3.3 Linux系統安裝

大多數Linux發行版都預裝了Python,但為了使用最新版本,可以手動安裝。

  1. 更新包管理器
  • 打開終端,輸入以下命令更新包管理器:
sudo apt update
  1. 安裝Python
  • 使用以下命令安裝Python:
sudo apt install python3
  1. 驗證安裝
  • 在終端中輸入以下命令,驗證Python是否安裝成功:
python3 --version

如果顯示Python的版本號,說明安裝成功。

通過以上步驟,你已經成功在Windows、macOS或Linux系統上安裝了Python。接下來,我們將介紹如何配置Python環境,以便更高效地開發Python應用。

1.4 Python環境配置

在安裝了Python之后,我們還需要進行一些配置,以便更高效地進行開發。
這些配置包括Python版本管理、虛擬環境管理以及Anaconda的安裝與配置。
本節將詳細介紹這些概念及其作用,并提供具體的操作步驟。

1.4.1 Python版本管理(pyenv)

1.4.1.1 版本管理的概念和作用

在開發過程中,可能需要使用不同版本的Python來運行不同的項目。例如,一個項目可能需要Python 3.8,而另一個項目可能需要Python 3.9。
這時,管理和切換不同版本的Python就變得非常重要。pyenv是一個用于管理多個Python版本的工具,允許用戶輕松安裝和切換不同版本的Python。

1.4.1.2 安裝和使用pyenv
  1. 安裝pyenv
  • 打開終端,輸入以下命令安裝pyenv
curl https://pyenv.run | bash
  • 按照提示將以下內容添加到你的shell配置文件(如~/.bashrc~/.zshrc):
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
  1. 重啟終端
  • 重啟終端或運行以下命令以應用配置:
source ~/.bashrc  # 或者 source ~/.zshrc
  1. 安裝Python版本
  • 使用pyenv安裝所需的Python版本,例如安裝Python 3.9.7:
pyenv install 3.9.7
  1. 設置全局或局部Python版本
  • 設置全局默認Python版本:
pyenv global 3.9.7
  • 設置局部Python版本(在項目目錄中):
pyenv local 3.8.10
  1. 驗證安裝
  • 輸入以下命令,驗證當前使用的Python版本:
python --version

1.4.2 虛擬環境管理(virtualenv, venv)

1.4.2.1 虛擬環境的概念和作用

虛擬環境是一種隔離的Python環境,每個虛擬環境都有獨立的Python解釋器和包管理工具。

使用虛擬環境可以避免不同項目之間的包沖突,并確保項目依賴的穩定性。
常用的虛擬環境管理工具有virtualenvvenv

1.4.2.2 使用venv創建虛擬環境

venv是Python 3內置的虛擬環境管理工具,使用簡單方便。

  1. 創建虛擬環境
  • 打開終端或命令提示符,輸入以下命令創建一個名為myenv的虛擬環境:
python3 -m venv myenv
  1. 激活虛擬環境
  • 激活虛擬環境:
    • Windows:
myenv\Scripts\activate
  - macOS/Linux:
source myenv/bin/activate
  • 激活后,命令行提示符前會顯示虛擬環境的名稱,如(myenv)
  1. 安裝包
  • 在激活的虛擬環境中使用pip安裝所需的包,例如安裝requests庫:
pip install requests
  1. 退出虛擬環境
  • 使用以下命令退出虛擬環境:
deactivate
1.4.2.3 使用virtualenv創建虛擬環境

virtualenv是一個獨立于Python標準庫的虛擬環境管理工具,適用于需要更多功能和兼容性的情況。

  1. 安裝virtualenv
  • 如果沒有安裝virtualenv,可以使用pip進行安裝:
pip install virtualenv
  1. 創建虛擬環境
  • 使用virtualenv創建虛擬環境:
virtualenv myenv
  1. 激活虛擬環境
  • 激活虛擬環境:
    • Windows:
myenv\Scripts\activate
  - macOS/Linux:
source myenv/bin/activate
  1. 退出虛擬環境
  • 使用以下命令退出虛擬環境:
deactivate

1.4.3 Anaconda的安裝與配置

1.4.3.1 Anaconda的概念和作用

Anaconda是一個開源的Python發行版,專為科學計算、數據分析和機器學習而設計。
它包含了許多常用的科學計算庫和數據處理工具,并提供了一個功能強大的包管理和虛擬環境管理工具conda
Anaconda極大地簡化了科學計算和數據分析的環境配置工作。

1.4.3.2 安裝Anaconda
  1. 下載Anaconda安裝包
  • 訪問Anaconda官網, 國內用戶推薦訪問清華源下載和安裝。anaconda | 鏡像站使用幫助 | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror
  • 根據你的操作系統選擇并下載Anaconda安裝包。
  1. 運行安裝包
  • 雙擊下載的安裝包,按照安裝向導的指示完成安裝。
  1. 驗證安裝
  • 打開終端或命令提示符,輸入以下命令驗證Anaconda是否安裝成功:
conda --version
1.4.3.3 使用conda管理虛擬環境和包
  1. 創建虛擬環境
  • 使用conda創建一個名為myenv的虛擬環境,并指定Python版本:
conda create -n myenv python=3.9
  1. 激活虛擬環境
  • 激活虛擬環境:
conda activate myenv
  1. 安裝包
  • 在激活的虛擬環境中使用conda安裝所需的包,例如安裝numpy庫:
conda install numpy
  1. 退出虛擬環境
  • 使用以下命令退出虛擬環境:
conda deactivate
  1. 管理包和環境
  • 列出已安裝的包:
conda list
  • 列出所有虛擬環境:
conda env list

通過以上步驟,你已經學會了如何使用Python版本管理工具、虛擬環境和Anaconda來配置和管理你的Python開發環境。
這些工具和技術將幫助你更高效地進行Python開發,并確保項目之間的依賴不互相干擾。
接下來,我們將通過IDE開始編寫第一個Python程序。

1.5 IDE選擇和配置

一個好的集成開發環境(IDE)可以極大地提升開發效率和編程體驗。IDE通常提供代碼編輯、調試、運行和版本控制等功能,使開發者可以更專注于編碼本身。
在本節中,我們將介紹幾種常用的Python IDE,包括PyCharm、VS Code和Jupyter Notebook,并講解它們的安裝與基本配置。

1.5.1 PyCharm安裝與基本配置

image.png
PyCharm是由JetBrains開發的一款功能強大的Python IDE,特別適合大型項目和復雜的開發需求。它提供了智能代碼補全、代碼重構、調試工具和版本控制集成等功能。

1.5.1.1 安裝PyCharm
  1. 下載PyCharm
  • 訪問PyCharm官網。
  • 根據你的操作系統下載社區版(Community)或專業版(Professional)。
  1. 安裝PyCharm
  • 雙擊下載的安裝包,按照安裝向導的指示完成安裝。
1.5.1.2 配置Python解釋器
  1. 創建新項目
  • 打開PyCharm,選擇“Create New Project”。
  • 輸入項目名稱和路徑。
  1. 選擇Python解釋器
  • 在“New Project”窗口,選擇“Base Interpreter”。
  • 選擇系統Python解釋器或虛擬環境。
  • 點擊“Create”創建項目。
1.5.1.3 基本配置和使用
  1. 安裝插件
  • 打開“File -> Settings -> Plugins”。
  • 搜索并安裝需要的插件,如Markdown支持插件。
  1. 創建并運行Python文件
  • 右鍵點擊項目目錄,選擇“New -> Python File”,輸入文件名。
  • 編寫Python代碼,例如:
print("Hello, PyCharm!")
  • 右鍵點擊文件,選擇“Run ‘filename’”運行代碼。


1.5.2 VS Code安裝與基本配置

image.png
VS Code(Visual Studio Code)是由微軟開發的一款輕量級且功能強大的代碼編輯器,支持多種編程語言。它通過擴展可以實現豐富的功能,非常適合Python開發。

1.5.2.1 安裝VS Code
  1. 下載VS Code
  • 訪問VS Code官網。
  • 根據你的操作系統下載安裝包。
  1. 安裝VS Code
  • 雙擊下載的安裝包,按照安裝向導的指示完成安裝。
1.5.2.2 安裝Python擴展
  1. 打開VS Code
  • 啟動VS Code。
  1. 安裝Python擴展
  • 點擊左側活動欄中的“Extensions”圖標。
  • 在搜索框中輸入“Python”,找到由Microsoft發布的“Python”擴展并安裝。
1.5.2.3 配置Python解釋器
  1. 打開命令面板
  • Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),打開命令面板。
  1. 選擇Python解釋器
  • 在命令面板中輸入“Python: Select Interpreter”,選擇項目使用的Python解釋器。
1.5.2.4 創建并運行Python文件
  1. 創建新文件
  • 點擊左側活動欄中的“Explorer”圖標,點擊“New File”圖標,創建一個新的Python文件(如hello.py)。
  1. 編寫并運行代碼
  • 在新文件中輸入以下代碼:
print("Hello, VS Code!")
  • 保存文件,右鍵點擊文件選擇“Run Python File in Terminal”運行代碼。

1.5.3 其他常用IDE介紹

1.5.3.1 Jupyter Notebook

Jupyter Notebook是一款廣泛用于數據分析和科學計算的交互式開發工具。它允許用戶在瀏覽器中編寫和運行代碼,并可以實時查看代碼的輸出結果,非常適合數據探索和可視化。

  1. 安裝Jupyter Notebook
  • 使用pip安裝:
pip install notebook
  • 或者使用conda安裝:
conda install -c conda-forge notebook
  1. 啟動Jupyter Notebook
  • 在命令行中輸入以下命令啟動Notebook服務器:
jupyter notebook
  • 瀏覽器會自動打開Jupyter Notebook的主頁。
  1. 創建和運行Notebook
  • 在Jupyter主頁,點擊“New -> Python 3”創建一個新的Notebook。
  • 在單元格中輸入以下代碼并運行:
print("Hello, Jupyter Notebook!")
  • Shift+Enter運行代碼單元格。
1.5.3.2 其他IDE
  • Spyder:Anaconda發行版中自帶的IDE,專為數據科學和機器學習設計,集成了許多科學計算庫。
  • Sublime Text:一款輕量級代碼編輯器,支持多種編程語言,通過安裝插件可以增強Python支持。
  • Atom:由GitHub開發的開源編輯器,通過插件可以支持多種編程語言和功能擴展。

通過上述介紹和配置,你可以選擇和配置適合自己的IDE,提升Python開發的效率和體驗。

在接下來的章節中,我們將開始編寫第一個Python程序,并逐步學習Python的基礎語法和功能。

第2章:Python基礎語法

在本章中,我們將深入學習Python編程語言的基礎語法。這些基礎知識是學習和掌握Python編程的第一步。
通過本章的學習,您將學會編寫簡單的Python程序,理解并使用Python的基本數據類型,掌握變量和常量的定義與使用,了解常見的運算符及其用法,并能編寫包含控制結構的Python程序。
此外,您還將學習如何定義和調用函數,為以后編寫更復雜的Python程序奠定基礎。

2.1 第一個Python程序

編寫和運行第一個Python程序是每個初學者邁向編程世界的第一步。
在這一節中,我們將指導您如何編寫一個稍微復雜的Python程序,該程序將包含變量、數據類型、運算符、控制結構和函數等語法元素。

編寫和運行第一個Python程序

編寫第一個Python程序非常簡單。首先,打開一個文本編輯器(如VS Code、Sublime Text或PyCharm),然后輸入以下代碼:

# 定義一個函數來計算兩個數字的加減乘除并判斷它們的大小關系
def calculate_and_compare(a, b):# 計算和sum_result = a + b# 計算差diff_result = a - b# 計算積prod_result = a * b# 計算商if b != 0:div_result = a / belse:div_result = None# 打印計算結果print(f"{a} + {b} = {sum_result}")print(f"{a} - {b} = {diff_result}")print(f"{a} * {b} = {prod_result}")if div_result is not None:print(f"{a} / {b} = {div_result}")else:print("除數不能為零")# 比較兩個數字的大小if a > b:print(f"{a} 大于 {b}")elif a < b:print(f"{a} 小于 {b}")else:print(f"{a} 等于 {b}")# 從用戶獲取輸入
try:num1 = float(input("請輸入第一個數字: "))num2 = float(input("請輸入第二個數字: "))# 調用函數進行計算和比較calculate_and_compare(num1, num2)
except ValueError:print("請輸入有效的數字")

將文件保存為calculator.py。接下來,打開命令行或終端,導航到保存該文件的目錄,輸入以下命令運行程序:

python calculator.py

如果一切順利,程序將提示您輸入兩個數字,并輸出它們的和、差、積、商,并判斷它們的大小關系。示例如下:

請輸入第一個數字: 8
請輸入第二個數字: 4
8.0 + 4.0 = 12.0
8.0 - 4.0 = 4.0
8.0 * 4.0 = 32.0
8.0 / 4.0 = 2.0
8.0 大于 4.0

通過這個程序,您可以看到Python中如何定義變量和函數,使用不同的數據類型(浮點數),進行各種運算(加、減、乘、除),以及使用控制結構(if-else語句)來進行條件判斷。
這個程序展示了Python編程的基本要素,為后續章節的深入學習打下了基礎。

2.2 數據類型

Python支持多種數據類型,每種類型都有其獨特的特性和用途。
在這一節中,我們將詳細介紹Python中的幾種基本數據類型,包括數字、字符串、列表、元組、字典和集合,并對每種類型的常見操作進行說明。

2.2.1 數字(整數、浮點數、復數)

數字類型是Python中最基本的數據類型之一。Python支持三種不同的數值類型:整數、浮點數和復數。

整數(int)

整數是沒有小數部分的數字,可以是正數、負數或零。

# 整數
a = 10
b = -5
c = 0
print(a, type(a))  # 輸出: 10 <class 'int'>
print(b, type(b))  # 輸出: -5 <class 'int'>
print(c, type(c))  # 輸出: 0 <class 'int'>

常見操作:

# 加法
print(a + b)  # 輸出: 5# 減法
print(a - b)  # 輸出: 15# 乘法
print(a * b)  # 輸出: -50# 除法
print(a / 2)  # 輸出: 5.0# 整除
print(a // 3)  # 輸出: 3# 取余
print(a % 3)  # 輸出: 1# 冪運算
print(a ** 2)  # 輸出: 100
浮點數(float)

浮點數是帶有小數部分的數字。

# 浮點數
d = 3.14
e = -2.71
print(d, type(d))  # 輸出: 3.14 <class 'float'>
print(e, type(e))  # 輸出: -2.71 <class 'float'>

常見操作:

# 加法
print(d + e)  # 輸出: 0.43000000000000016# 減法
print(d - e)  # 輸出: 5.85# 乘法
print(d * e)  # 輸出: -8.5094# 除法
print(d / 2)  # 輸出: 1.57
復數(complex)

復數是帶有實部和虛部的數字。

# 復數
f = 1 + 2j
g = 3 - 4j
print(f, type(f))  # 輸出: (1+2j) <class 'complex'>
print(g, type(g))  # 輸出: (3-4j) <class 'complex'>

常見操作:

# 加法
print(f + g)  # 輸出: (4-2j)# 減法
print(f - g)  # 輸出: (-2+6j)# 乘法
print(f * g)  # 輸出: (11+2j)# 除法
print(f / g)  # 輸出: (-0.2+0.4j)

2.2.2 字符串

字符串用于表示文本,是一系列字符的集合。可以使用單引號或雙引號定義字符串。字符串是不可變的,這意味著一旦創建就不能更改。

# 使用單引號
str1 = 'Hello, Python'
print(str1, type(str1))  # 輸出: Hello, Python <class 'str'># 使用雙引號
str2 = "Hello, World"
print(str2, type(str2))  # 輸出: Hello, World <class 'str'>

常見操作:

# 拼接字符串
greeting = str1 + " " + str2
print(greeting)  # 輸出: Hello, Python Hello, World# 字符串切片
print(greeting[0:5])  # 輸出: Hello# 查找子串
print("Python" in greeting)  # 輸出: True# 獲取長度
print(len(greeting))  # 輸出: 26# 轉換大小寫
print(str1.upper())  # 輸出: HELLO, PYTHON
print(str2.lower())  # 輸出: hello, world# 格式化字符串
name = "Alice"
welcome_message = f"Hello, {name}!"
print(welcome_message)  # 輸出: Hello, Alice!

2.2.3 列表

列表是一種有序的可變序列,可以包含不同類型的元素。列表使用方括號定義,元素之間用逗號分隔。

# 定義一個列表
my_list = [1, 2, 3, 'Python', 3.14]
print(my_list, type(my_list))  # 輸出: [1, 2, 3, 'Python', 3.14] <class 'list'>

常見操作:

# 訪問列表元素
print(my_list[0])  # 輸出: 1# 修改列表元素
my_list[1] = 'Changed'
print(my_list)  # 輸出: [1, 'Changed', 3, 'Python', 3.14]# 添加新元素
my_list.append('New Element')
print(my_list)  # 輸出: [1, 'Changed', 3, 'Python', 3.14, 'New Element']# 刪除元素
my_list.remove('Python')
print(my_list)  # 輸出: [1, 'Changed', 3, 3.14, 'New Element']# 獲取長度
print(len(my_list))  # 輸出: 5# 列表切片
print(my_list[1:4])  # 輸出: ['Changed', 3, 3.14]

2.2.4 元組

元組與列表類似,但元組是不可變的。一旦定義,元組中的元素不能修改。元組使用圓括號定義,元素之間用逗號分隔。

# 定義一個元組
my_tuple = (1, 2, 3, 'Python', 3.14)
print(my_tuple, type(my_tuple))  # 輸出: (1, 2, 3, 'Python', 3.14) <class 'tuple'>

常見操作:

# 訪問元組元素
print(my_tuple[0])  # 輸出: 1# 元組切片
print(my_tuple[1:4])  # 輸出: (2, 3, 'Python')# 獲取長度
print(len(my_tuple))  # 輸出: 5# 元組解包
a, b, c, d, e = my_tuple
print(a, b, c, d, e)  # 輸出: 1 2 3 Python 3.14# 元組的不可變特性
# my_tuple[1] = 'Changed'  # 這行代碼會引發錯誤,因為元組不允許修改

2.2.5 字典

字典是一種鍵值對的集合,使用大括號定義。每個鍵值對由鍵和對應的值組成。鍵是唯一的,通常是字符串或數字,而值可以是任何數據類型。

# 定義一個字典
my_dict = {'name': 'Python', 'version': 3.9}
print(my_dict, type(my_dict))  # 輸出: {'name': 'Python', 'version': 3.9} <class 'dict'>

常見操作:

# 訪問字典元素
print(my_dict['name'])  # 輸出: Python# 修改字典元素
my_dict['version'] = 3.10
print(my_dict)  # 輸出: {'name': 'Python', 'version': 3.10}# 添加新元素
my_dict['creator'] = 'Guido van Rossum'
print(my_dict)  # 輸出: {'name': 'Python', 'version': 3.10, 'creator': 'Guido van Rossum'}# 刪除元素
del my_dict['version']
print(my_dict)  # 輸出: {'name': 'Python', 'creator': 'Guido van Rossum'}# 獲取所有鍵
print(my_dict.keys())  # 輸出: dict_keys(['name', 'creator'])# 獲取所有值
print(my_dict.values())  # 輸出: dict_values(['Python', 'Guido van Rossum'])# 獲取所有鍵值對
print(my_dict.items())  # 輸出: dict_items([('name', 'Python'), ('creator', 'Guido van Rossum')])

2.2.6 集合

集合是一個無序的不重復元素序列,使用大括號或set()函數創建。集合用于去重和集合運算。

# 定義一個集合
my_set = {1, 2, 3, 4, 5}
print(my_set, type(my_set))  # 輸出: {1, 2, 3, 4, 5} <class 'set'># 使用set()函數定義集合
another_set = set([3, 4, 5, 6, 7])
print(another_set, type(another_set))  # 輸出: {3, 4, 5, 6, 7} <class 'set'>

常見操作:

# 添加新元素
my_set.add(6)
print(my_set)  # 輸出: {1, 2, 3, 4, 5, 6}# 集合的去重特性
my_set.add(3)
print(my_set)  # 輸出: {1, 2, 3, 4, 5, 6}# 刪除元素
my_set.remove(4)
print(my_set)  # 輸出: {1, 2, 3, 5, 6}# 集合運算
print(my_set & another_set)  # 交集: {3, 5, 6}
print(my_set | another_set)  # 并集: {1, 2, 3, 5, 6, 7}
print(my_set - another_set)  # 差集: {1, 2}
print(my_set ^ another_set)  # 對稱差集: {1, 2, 7}

通過學習這些基本數據類型及其常見操作,您將能夠處理各種不同類型的數據,并為后續的編程打下堅實的基礎。

2.3 變量與常量

在編程中,變量和常量是兩個重要的概念。
變量用于存儲可以改變的數據,而常量用于存儲在程序運行期間不改變的數據。
在這一節中,我們將介紹變量和常量的定義與使用。

2.3.1 變量的定義與使用

變量是一個用于存儲數據的容器。在Python中,變量不需要顯式聲明,直接賦值即可創建變量。

定義變量

定義變量時,只需要將變量名賦值給一個數據即可:

# 定義變量
x = 10
y = 3.14
name = "Alice"
is_active = True# 輸出變量的值和類型
print(x, type(x))         # 輸出: 10 <class 'int'>
print(y, type(y))         # 輸出: 3.14 <class 'float'>
print(name, type(name))   # 輸出: Alice <class 'str'>
print(is_active, type(is_active)) # 輸出: True <class 'bool'>
使用變量

定義變量后,可以在程序的不同部分使用這些變量。變量可以參與運算、傳遞給函數、用于條件判斷等。

# 變量參與運算
result = x + y
print(result)  # 輸出: 13.14# 變量傳遞給函數
def greet(person):return f"Hello, {person}!"message = greet(name)
print(message)  # 輸出: Hello, Alice!# 變量用于條件判斷
if is_active:print("The user is active.")  # 輸出: The user is active.
else:print("The user is not active.")
變量命名規則

在命名變量時,需要遵守以下規則:

  • 變量名必須以字母或下劃線開頭。
  • 變量名只能包含字母、數字和下劃線。
  • 變量名區分大小寫(例如,myVarmyvar 是不同的變量)。
  • 變量名不要使用Python的保留字(如 andifwhile 等)。
# 合法的變量名
my_var = 10
_my_var = 20
myVar2 = 30# 非法的變量名(會引發語法錯誤)
# 2myVar = 40
# my-var = 50
# my var = 60

2.3.2 常量的定義與約定

常量用于存儲在程序運行期間不改變的數據。在Python中,沒有專門的語法定義常量,通常使用全大寫字母的變量名表示常量,以便區分它們和普通變量。

定義常量

在Python中,常量通常在模塊的頂部定義,并使用全大寫字母命名:

# 定義常量
PI = 3.14159
GRAVITY = 9.81
MAX_CONNECTIONS = 100# 輸出常量的值
print(PI)            # 輸出: 3.14159
print(GRAVITY)       # 輸出: 9.81
print(MAX_CONNECTIONS) # 輸出: 100
使用常量

常量的使用方式與變量相同,但在程序中不應修改常量的值。

# 使用常量計算圓的面積
radius = 5
area = PI * (radius ** 2)
print(f"The area of the circle is: {area}")  # 輸出: The area of the circle is: 78.53975# 使用常量進行條件判斷
if MAX_CONNECTIONS > 50:print("The server can handle many connections.")  # 輸出: The server can handle many connections.
else:print("The server can handle only a few connections.")
常量命名約定

雖然Python沒有嚴格要求,但使用全大寫字母命名常量是一個廣泛接受的約定。這種約定有助于提高代碼的可讀性,讓其他開發者能夠一目了然地識別出哪些值是常量。

# 合理的常量命名
SPEED_OF_LIGHT = 299792458  # 米每秒
PLANCK_CONSTANT = 6.62607015e-34  # 焦耳秒# 不推薦的常量命名(不遵循約定)
# speed_of_light = 299792458
# planckConstant = 6.62607015e-34

通過學習變量和常量的定義與使用,您將能夠更有效地管理程序中的數據,編寫更清晰、更易維護的代碼。

2.4 運算符

運算符是編程語言中用于執行各種操作的符號。

Python支持多種類型的運算符,包括算術運算符、比較運算符、邏輯運算符、賦值運算符和位運算符。

在這一節中,我們將詳細介紹這些運算符的用法及其示例。

2.4.1 算術運算符

算術運算符用于執行基本的數學運算,如加法、減法、乘法、除法等。Python中的算術運算符如下:

運算符描述示例
+加法a + b
-減法a - b
*乘法a * b
/除法a / b
//整除a // b
%取余a % b
**冪運算a ** b

示例:

a = 10
b = 3print(a + b)  # 輸出: 13
print(a - b)  # 輸出: 7
print(a * b)  # 輸出: 30
print(a / b)  # 輸出: 3.3333333333333335
print(a // b) # 輸出: 3
print(a % b)  # 輸出: 1
print(a ** b) # 輸出: 1000

2.4.2 比較運算符

比較運算符用于比較兩個值,并返回布爾值(TrueFalse)。Python中的比較運算符如下:

運算符描述示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于或等于a >= b
<=小于或等于a <= b

示例:

a = 10
b = 3print(a == b)  # 輸出: False
print(a != b)  # 輸出: True
print(a > b)   # 輸出: True
print(a < b)   # 輸出: False
print(a >= b)  # 輸出: True
print(a <= b)  # 輸出: False

2.4.3 邏輯運算符

邏輯運算符用于組合布爾值,并返回布爾值。Python中的邏輯運算符如下:

運算符描述示例
and邏輯與a and b
or邏輯或a or b
not邏輯非not a

示例:

a = True
b = Falseprint(a and b)  # 輸出: False
print(a or b)   # 輸出: True
print(not a)    # 輸出: False

2.4.4 賦值運算符

賦值運算符用于將右邊的值賦給左邊的變量。Python中的賦值運算符如下:

運算符描述示例
=簡單賦值a = b
+=加法賦值a += b
-=減法賦值a -= b
*=乘法賦值a *= b
/=除法賦值a /= b
//=整除賦值a //= b
%=取余賦值a %= b
**=冪賦值a **= b

示例:

a = 10
b = 3a += b  # 等價于 a = a + b
print(a)  # 輸出: 13a -= b  # 等價于 a = a - b
print(a)  # 輸出: 10a *= b  # 等價于 a = a * b
print(a)  # 輸出: 30a /= b  # 等價于 a = a / b
print(a)  # 輸出: 10.0a //= b  # 等價于 a = a // b
print(a)  # 輸出: 3.0a %= b  # 等價于 a = a % b
print(a)  # 輸出: 0.0a **= b  # 等價于 a = a ** b
print(a)  # 輸出: 0.0

2.4.5 位運算符

位運算符用于對整數的二進制位進行操作。Python中的位運算符如下:

運算符描述示例
&按位與a & b
&#124;按位或a &#124; b
^按位異或a ^ b
~按位取反~a
<<左移a << b
>>右移a >> b

示例:

a = 10  # 二進制: 1010
b = 4   # 二進制: 0100print(a & b)  # 輸出: 0  (二進制: 0000)
print(a | b)  # 輸出: 14 (二進制: 1110)
print(a ^ b)  # 輸出: 14 (二進制: 1110)
print(~a)     # 輸出: -11 (二進制: -1011)print(a << 2) # 輸出: 40 (二進制: 101000)
print(a >> 2) # 輸出: 2  (二進制: 0010)

2.4.6 運算符優先級

當一個表達式中出現多個操作符時,求值的順序依賴于優先級規則。Python遵守數學操作符的傳統規則。

運算符描述
**指數(最高優先級)
~、+、-按位翻轉,一元加號和減號(最后兩個的方法名為+@和-@)
*、/、%、//乘、除、取模和取整除
+、-加法、減法
>>、<<右移、左移運算符
&位與
^、|位運算符
<=、<、>、>=比較運算符
<> == !=等于運算符
= %= /= //= -= += *= **=賦值運算符
is is not身份運算符
in in not成員運算符
not or and邏輯運算符

以上常用的運算符優先級從上到下依次降低,運算優先級高的先計算,低的后計算。有括號時會優先運算括號中的內容,所以我們可以利用括號來打破運算優先級的限制。

通過學習這些運算符及其用法,您將能夠執行各種基本和復雜的操作,編寫功能更強大、更靈活的Python程序。

2.5 控制結構

控制結構用于控制程序的執行流程。Python中最常用的控制結構包括條件語句和循環語句。在本節中,我們將詳細介紹條件語句的用法。

2.5.1 條件語句(if, elif, else)

條件語句用于根據一個或多個條件的真假,來執行不同的代碼塊。Python中的條件語句包括ifelif(else if的縮寫)和else

if 語句

if語句用于判斷一個條件是否為真,如果為真,則執行相應的代碼塊。

# if 語句示例
x = 10if x > 5:print("x is greater than 5")  # 輸出: x is greater than 5
if…else 語句

if...else語句用于在條件為假時執行另一個代碼塊。

# if...else 語句示例
x = 3if x > 5:print("x is greater than 5")
else:print("x is less than or equal to 5")  # 輸出: x is less than or equal to 5
if…elif…else 語句

if...elif...else語句用于檢查多個條件,并根據第一個為真的條件執行相應的代碼塊。如果所有條件都為假,則執行else代碼塊。

# if...elif...else 語句示例
x = 7if x > 10:print("x is greater than 10")
elif x > 5:print("x is greater than 5 but less than or equal to 10")  # 輸出: x is greater than 5 but less than or equal to 10
else:print("x is 5 or less")
嵌套條件語句

條件語句可以嵌套使用,即在一個條件語句內部再包含另一個條件語句。

# 嵌套條件語句示例
x = 15if x > 10:print("x is greater than 10")  # 輸出: x is greater than 10if x > 20:print("x is also greater than 20")else:print("x is not greater than 20")  # 輸出: x is not greater than 20
else:print("x is 10 or less")
條件表達式(三元運算符)

Python還支持使用條件表達式(又稱三元運算符)來簡化條件語句。條件表達式允許在一行中編寫簡潔的條件判斷。

# 條件表達式示例
x = 8
result = "greater than 5" if x > 5 else "less than or equal to 5"
print(result)  # 輸出: greater than 5

通過條件語句,程序可以根據不同的條件執行不同的代碼塊,從而實現復雜的邏輯控制。

2.5.2 循環語句(for, while)

循環語句用于重復執行某段代碼,直到滿足某個條件為止。Python中主要有兩種循環語句:for循環和while循環。

for 循環

for循環用于遍歷序列(如列表、元組、字符串)或其他可迭代對象。每次循環時,for語句會將序列中的下一個元素賦值給循環變量,并執行循環體中的代碼。

# for 循環遍歷列表
numbers = [1, 2, 3, 4, 5]for num in numbers:print(num)
# 輸出:
# 1
# 2
# 3
# 4
# 5

使用range()函數生成一系列數字,并使用for循環進行遍歷:

# 使用 range() 生成數字序列
for i in range(5):print(i)
# 輸出:
# 0
# 1
# 2
# 3
# 4# 指定起始和結束點
for i in range(2, 7):print(i)
# 輸出:
# 2
# 3
# 4
# 5
# 6# 指定步長
for i in range(1, 10, 2):print(i)
# 輸出:
# 1
# 3
# 5
# 7
# 9
while 循環

while循環在條件為真時反復執行循環體中的代碼。當條件變為假時,循環終止。

# while 循環示例
count = 0while count < 5:print(count)count += 1
# 輸出:
# 0
# 1
# 2
# 3
# 4
嵌套循環

循環可以嵌套使用,即在一個循環體內再包含一個循環。

# 嵌套 for 循環
for i in range(3):for j in range(2):print(f"i={i}, j={j}")
# 輸出:
# i=0, j=0
# i=0, j=1
# i=1, j=0
# i=1, j=1
# i=2, j=0
# i=2, j=1
# 嵌套 while 循環
i = 0
while i < 3:j = 0while j < 2:print(f"i={i}, j={j}")j += 1i += 1
# 輸出:
# i=0, j=0
# i=0, j=1
# i=1, j=0
# i=1, j=1
# i=2, j=0
# i=2, j=1

2.5.3 循環控制(break, continue, pass)

在循環中,可以使用breakcontinuepass語句來控制循環的執行。

  • break語句用于終止循環,不再執行循環體中的剩余代碼,并立即退出循環。
# break 示例
for i in range(5):if i == 3:breakprint(i)
# 輸出:
# 0
# 1
# 2
  • continue語句用于跳過當前迭代的剩余代碼,直接進入下一次迭代。
# continue 示例
for i in range(5):if i == 3:continueprint(i)
# 輸出:
# 0
# 1
# 2
# 4
  • pass語句用于占位,表示不執行任何操作。通常用于語法上需要語句,但實際不需要執行任何代碼的場合。
# pass 示例
for i in range(5):if i == 3:pass  # 這里可以放置以后需要的代碼print(i)
# 輸出:
# 0
# 1
# 2
# 3
# 4

通過學習forwhile循環以及循環控制語句,您將能夠在程序中實現重復執行某段代碼的功能,提高代碼的效率和靈活性。

2.6 函數基礎

函數是組織代碼的一種重要方式,通過使用函數,我們可以將重復的代碼封裝到一起,以便在需要的時候調用。
函數可以提高代碼的可讀性和可維護性,使程序更易于理解和修改。

Python中的函數定義和調用非常靈活,支持多種參數傳遞方式,并且可以返回多個值。

掌握函數的定義與調用是Python編程中的重要內容之一。

2.6.1 函數的定義與調用

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

函數名應該具有描述性,能夠表明函數的功能。

函數可以有參數,也可以沒有參數。

定義函數時,還可以指定函數的返回值。函數體由縮進的代碼塊組成,通常包含函數的邏輯和實現。

定義一個簡單的函數

下面是一個簡單的函數示例,它打印一個問候語:

def greet():print("Hello, welcome to Python programming!")
調用函數

定義函數后,我們可以通過函數名加括號的方式來調用它:

greet()  # 輸出: Hello, welcome to Python programming!
帶參數的函數

函數可以接受參數,參數可以在函數定義時指定。當函數被調用時,可以將值傳遞給參數。

def greet_user(name):print(f"Hello, {name}, welcome to Python programming!")greet_user("Alice")  # 輸出: Hello, Alice, welcome to Python programming!
帶返回值的函數

函數可以返回一個值,使用return關鍵字實現。當函數執行到return語句時,會將結果返回,并結束函數的執行。

def add(a, b):return a + bresult = add(3, 5)
print(result)  # 輸出: 8

通過這些示例,您可以看到函數的定義與調用在Python中是多么簡潔和強大。
掌握函數的定義和調用將使您能夠編寫更高效、更模塊化的代碼。

2.6.2 函數參數

函數參數是函數定義中非常重要的一部分,它決定了函數如何接收輸入并進行處理。Python支持多種方式來傳遞參數,使得函數的使用更加靈活和強大。我們將分別介紹位置參數、關鍵字參數、默認參數和不定長參數,并展示它們的綜合使用方法。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

2.6.3 函數返回值

在Python中,函數不僅可以執行一系列操作,還可以返回一個或多個值。函數的返回值用于將函數的計算結果傳遞給調用方,這使得函數更加靈活和實用。理解如何定義和使用函數的返回值是編寫高效代碼的關鍵。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

2.6.4 函數文檔字符串

函數文檔字符串(docstring)是一種用于為函數、模塊、類或方法編寫文檔的字符串。
它幫助開發者了解函數的用途、參數和返回值,從而使代碼更加可讀和可維護。
Python強烈推薦使用文檔字符串來為代碼編寫文檔。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第3章:模塊與包

在Python編程中,模塊和包是組織和管理代碼的重要方式。通過將相關功能分組到模塊和包中,我們可以提高代碼的可重用性和可維護性,并且方便地管理和使用外部庫。
在本章中,我們將學習如何使用Python標準庫、如何安裝和使用第三方庫、以及如何創建和使用自定義模塊和包。
此外,我們還會介紹一些常用的第三方庫,以便您在實際項目中能更高效地完成各種任務。

3.1 標準庫的使用

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

3.2 第三方庫的安裝與使用

除了Python的標準庫外,Python的生態系統中還有大量的第三方庫,這些庫由社區開發和維護,提供了各種強大的功能,極大地擴展了Python的應用范圍。
在這一節中,我們將介紹如何使用pip工具來安裝第三方庫,并展示一些常用第三方庫的安裝示例。

3.2.1 pip的使用

pip是Python的包管理工具,用于安裝和管理Python包。
pip非常強大且易于使用,幾乎所有的第三方庫都可以通過pip進行安裝。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

3.2.2 常用第三方庫安裝示例

以下是一些常用第三方庫的安裝示例,這些庫在各種Python項目中都有廣泛的應用。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

3.3 自定義模塊與包

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

3.4 常用第三方庫介紹

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第4章:文件與異常處理

在編程過程中,處理文件和異常是必不可少的技能。
文件操作涉及讀取和寫入文件內容,而異常處理則用于捕獲和處理程序運行中的錯誤。
在本章中,我們將學習如何進行文件讀寫操作,以及如何處理程序中的異常。

4.1 文件讀寫操作

文件操作是程序與外部數據交互的重要方式。

Python提供了一套完整的文件操作接口,可以方便地進行文件的讀寫操作。我們將探討如何讀取文件、寫入文件,以及各種文件模式的使用。

4.1.1 讀文件

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

4.1.2 寫文件

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

4.1.3 文件模式

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

4.2 文件和目錄操作

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

4.3 異常捕獲與處理

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

4.4 日志記錄

在開發和維護軟件時,日志記錄是一個重要的工具。通過日志記錄,開發者可以跟蹤程序的執行過程、記錄重要的事件和錯誤信息,從而更容易發現和解決問題。

Python提供了功能強大的logging模塊,用于靈活地記錄日志信息。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第二部分:高級進階

第5章:面向對象編程

面向對象編程(OOP)是現代編程范式中非常重要的一種,它通過類和對象將數據和行為進行封裝,從而提高代碼的重用性、可擴展性和可維護性。
Python作為一種面向對象的編程語言,提供了強大而靈活的OOP特性。
在本章中,我們將深入學習面向對象編程的核心概念和技術,包括類與對象、封裝、繼承、多態,以及一些高級話題如靜態方法、類方法、抽象類和接口等。

5.1 類與對象

類和對象是面向對象編程的基礎。
在Python中,類是一種定義數據和行為的模板,而對象是類的實例。
通過定義類和創建對象,我們可以組織和管理程序中的復雜數據和邏輯。

5.1.1 類的定義

在Python中,類使用class關鍵字定義。類可以包含屬性(數據)和方法(函數),用于描述對象的狀態和行為。

示例:定義一個簡單的類
class Person:# 初始化方法,用于創建實例時初始化屬性def __init__(self, name, age):self.name = nameself.age = age# 實例方法,用于描述行為def greet(self):return f"Hello, my name is {self.name} and I am {self.age} years old."

在這個示例中,我們定義了一個名為Person的類。__init__方法是一個特殊的方法,在創建實例時自動調用,用于初始化對象的屬性。greet方法是一個實例方法,用于返回問候語。

5.1.2 對象的創建與使用

對象是類的實例,通過調用類的構造函數來創建。我們可以使用對象來訪問屬性和方法。

示例:創建和使用對象
# 創建Person類的實例
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)# 訪問屬性
print(person1.name)  # 輸出: Alice
print(person2.age)   # 輸出: 25# 調用方法
print(person1.greet())  # 輸出: Hello, my name is Alice and I am 30 years old.
print(person2.greet())  # 輸出: Hello, my name is Bob and I am 25 years old.

在這個示例中,我們創建了兩個Person類的實例,并訪問了它們的屬性和方法。

5.1.3 類屬性和實例屬性

類屬性是定義在類級別的屬性,所有實例共享;實例屬性是定義在實例級別的屬性,每個實例有獨立的副本。

示例:類屬性和實例屬性
class Person:species = "Homo sapiens"  # 類屬性def __init__(self, name, age):self.name = name  # 實例屬性self.age = age    # 實例屬性def greet(self):return f"Hello, my name is {self.name} and I am {self.age} years old."# 創建實例
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)# 訪問類屬性
print(Person.species)    # 輸出: Homo sapiens
print(person1.species)   # 輸出: Homo sapiens
print(person2.species)   # 輸出: Homo sapiens# 修改類屬性
Person.species = "Human"
print(person1.species)   # 輸出: Human# 訪問實例屬性
print(person1.name)  # 輸出: Alice
print(person2.age)   # 輸出: 25

在這個示例中,species是一個類屬性,所有Person實例共享。nameage是實例屬性,每個實例有獨立的值。

通過學習類與對象的定義和使用,您可以開始在Python中使用面向對象編程來組織和管理代碼。

5.2 封裝、繼承、多態

面向對象編程的三個重要特性是封裝、繼承和多態。通過理解和應用這些特性,可以構建更具模塊化、可維護性和可擴展性的程序。

5.2.1 封裝的概念

封裝是將數據(屬性)和行為(方法)捆綁在一起,并隱藏對象的內部實現細節,僅對外暴露必要的接口。封裝可以提高代碼的安全性和可維護性,防止外部代碼直接訪問和修改對象的內部狀態。

示例:封裝的實現
class Person:def __init__(self, name, age):self.__name = name  # 私有屬性self.__age = age    # 私有屬性def greet(self):return f"Hello, my name is {self.__name} and I am {self.__age} years old."def get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageelse:raise ValueError("Age must be positive")# 創建實例
person = Person("Alice", 30)# 訪問私有屬性 (通過方法)
print(person.greet())  # 輸出: Hello, my name is Alice and I am 30 years old.# 修改私有屬性 (通過方法)
person.set_age(35)
print(person.get_age())  # 輸出: 35# 直接訪問私有屬性會導致錯誤
# print(person.__age)  # AttributeError: 'Person' object has no attribute '__age'

在這個示例中,__name__age是私有屬性,不能直接從外部訪問。通過定義公有方法get_ageset_age,我們可以間接訪問和修改私有屬性。

5.2.2 繼承的實現

繼承是一個類(子類)繼承另一個類(父類)的屬性和方法,從而實現代碼重用和擴展。

子類可以擴展或重寫父類的方法,增加新的功能。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

5.3 魔法方法與特殊屬性

魔法方法(Magic Methods),也稱為特殊方法,是Python內置的具有特殊用途的函數。這些方法以雙下劃線(__)開頭和結尾,并用于在特定情況下自動調用。特殊屬性是Python對象自帶的一些屬性,也使用雙下劃線包圍,提供有關對象的元數據和行為控制。

5.3.1 常用魔法方法

魔法方法使得Python的類能夠與內置操作進行交互,提供自定義對象的特殊行為。

init

__init__方法是類的初始化方法,在創建實例時自動調用,用于初始化對象的屬性。

class Person:def __init__(self, name, age):self.name = nameself.age = age# 創建實例時會自動調用__init__方法
person = Person("Alice", 30)
print(person.name)  # 輸出: Alice
print(person.age)   # 輸出: 30
str

__str__方法定義了對象的字符串表示,用于print()str()函數。當嘗試以字符串形式打印對象時調用。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"Person(name={self.name}, age={self.age})"person = Person("Alice", 30)
print(person)  # 輸出: Person(name=Alice, age=30)
repr

__repr__方法返回對象的官方字符串表示,用于repr()函數和交互解釋器。當開發者需要一個準確且非歧義的對象表示時調用。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"Person(name='{self.name}', age={self.age})"person = Person("Alice", 30)
print(repr(person))  # 輸出: Person(name='Alice', age=30)

5.3.2 特殊屬性

特殊屬性提供了有關對象的元數據和控制對象行為的機制。

dict

__dict__屬性是一個字典,包含對象的所有可變屬性和它們的值。可以用來查看和修改對象的屬性。

class Person:def __init__(self, name, age):self.name = nameself.age = ageperson = Person("Alice", 30)
print(person.__dict__)  # 輸出: {'name': 'Alice', 'age': 30}# 修改屬性
person.__dict__['age'] = 31
print(person.age)  # 輸出: 31
class

__class__屬性指向對象的類,提供了訪問對象所屬類的方式。

class Person:def __init__(self, name, age):self.name = nameself.age = ageperson = Person("Alice", 30)
print(person.__class__)  # 輸出: <class '__main__.Person'># 檢查對象是否為特定類的實例
print(isinstance(person, Person))  # 輸出: True

5.3.3 綜合示例

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

5.4 類的高級話題

在面向對象編程中,除了基本的類和對象操作外,還有一些高級話題,可以幫助我們創建更強大和靈活的程序。這些包括靜態方法與類方法、抽象類與接口,以及迭代器與生成器。

5.4.1 靜態方法與類方法

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

5.4.3 迭代器與生成器

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第6章:函數式編程

函數式編程是一種編程范式,它強調使用函數來處理數據和進行計算。
與面向對象編程不同,函數式編程主要關注數據的傳遞和轉換,避免使用可變狀態和副作用。
Python支持多種函數式編程特性,包括高階函數、內置函數(如mapfilterreduce)、閉包與裝飾器、以及生成器表達式與列表推導式。
在本章中,我們將探討這些函數式編程的概念和應用。

6.1 高階函數

高階函數是函數式編程的核心概念之一。一個函數如果滿足以下條件之一,就是高階函數:

  1. 接受一個或多個函數作為參數。
  2. 返回一個函數。

6.1.1 定義與使用

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

6.2 內置函數

Python 提供了一些內置函數,用于支持函數式編程。最常用的內置函數包括 mapfilterreduce。這些函數使得對序列進行操作更加簡潔和高效。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

6.3 閉包與裝飾器

閉包和裝飾器是函數式編程中的兩個重要概念,它們在編寫簡潔和高效的代碼方面起著重要作用。

閉包允許函數捕獲和記住其定義時的環境,而裝飾器是用于增強函數功能的強大工具。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

6.4 生成器表達式與列表推導式

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第7章:并發編程

在現代編程中,并發編程是一個重要的技術領域,用于提高程序的效率和響應能力。并發編程可以通過多線程、多進程和異步編程等方式實現,使得程序能夠同時處理多個任務,從而充分利用系統資源。

在本章中,我們將探討并發編程的基礎知識,包括線程與進程、異步編程,以及并發編程的最佳實踐。

7.1 線程與進程

線程和進程是實現并發編程的兩種主要方式。
線程是操作系統能夠進行運算調度的最小單位,而進程是操作系統進行資源分配和調度的基本單位。
Python 提供了 threadingmultiprocessing 模塊,分別用于多線程編程和多進程編程。

7.1.1 threading模塊

`

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

7.1.2 multiprocessing模塊

`

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

7.2 異步編程

在現代編程中,處理I/O密集型任務時,異步編程是一種非常有效的技術。
異步編程允許我們在等待I/O操作完成時,繼續執行其他任務,從而提高程序的效率和響應性。在Python中,asyncio模塊提供了強大的異步編程支持。

7.2.1 asyncio模塊基礎

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

7.2.3 異步編程與多線程編程和多進程編程的區別

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

7.3 并發編程最佳實踐

在編寫高效并發程序時,了解常見問題和優化技巧是至關重要的。并發編程不僅涉及如何讓程序運行得更快,還包括確保程序的正確性和穩定性。本節將介紹并發編程中的常見問題和一些優化技巧。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第8章 網絡編程

網絡編程是現代編程的重要組成部分,它使得計算機能夠通過網絡進行通信和數據交換。

在Python中,網絡編程涵蓋了從低級的套接字編程到高級的Web框架應用。

本章將介紹如何使用Python進行網絡編程,包括套接字編程、HTTP請求處理,以及使用流行的Web框架如Flask和Django進行Web應用開發。

8.1 套接字編程

套接字是網絡編程的基礎,它提供了在網絡上傳輸數據的方法。在Python中,socket模塊提供了用于創建和操作套接字的接口。

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

8.3 Web框架初探

Web框架是用于開發Web應用程序的軟件框架,它提供了一些標準的方式來構建和部署Web應用程序。在Python中,Flask和Django是兩種非常流行的Web框架。本節將介紹這兩種框架的基本使用方法,幫助你快速入門Web開發。

8.3.1 Flask簡介與快速入門

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第三部分:實戰演練

第9章:數據分析項目

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

9.3 數據分析案例

通過前面幾節的學習,我們已經掌握了數據清洗、預處理和可視化的基本技能。

現在,我們將通過幾個實際的數據分析案例,來綜合應用這些技能,進行深入的分析和洞察。

9.3.1 電商用戶行為分析

電商平臺的用戶行為分析是一個常見的實際數據分析任務。

我們將使用一個包含用戶瀏覽、點擊和購買行為的數據集,來分析用戶的行為模式和趨勢。

數據集

假設我們有一個包含電商用戶行為的數據集ecommerce_data.csv,其內容如下:

user_id,timestamp,event_type,product_id,category_id
1,2023-01-01 12:01:00,view,1001,2001
1,2023-01-01 12:03:00,click,1001,2001
1,2023-01-01 12:05:00,add_to_cart,1001,2001
1,2023-01-01 12:10:00,purchase,1001,2001
2,2023-01-01 12:15:00,view,1002,2002
2,2023-01-01 12:17:00,click,1002,2002
2,2023-01-01 12:20:00,view,1003,2003
數據清洗與預處理

首先,我們將使用pandas進行數據的清洗與預處理。

import pandas as pd# 讀取數據
df = pd.read_csv('ecommerce_data.csv')# 查看數據集的前幾行
print(df.head())

輸出結果

   user_id            timestamp   event_type  product_id  category_id
0        1  2023-01-01 12:01:00         view        1001         2001
1        1  2023-01-01 12:03:00        click        1001         2001
2        1  2023-01-01 12:05:00  add_to_cart        1001         2001
3        1  2023-01-01 12:10:00     purchase        1001         2001
4        2  2023-01-01 12:15:00         view        1002         2002
數據清洗與處理

我們需要處理時間戳數據,并提取日期和時間,以便后續分析。

# 將timestamp列轉換為datetime類型
df['timestamp'] = pd.to_datetime(df['timestamp'])# 提取日期和時間
df['date'] = df['timestamp'].dt.date
df['time'] = df['timestamp'].dt.timeprint(df.head())

輸出結果

   user_id           timestamp event_type  product_id  category_id        date      time
0        1 2023-01-01 12:01:00       view        1001         2001  2023-01-01  12:01:00
1        1 2023-01-01 12:03:00      click        1001         2001  2023-01-01  12:03:00
2        1 2023-01-01 12:05:00  add_to_cart        1001         2001  2023-01-01  12:05:00
3        1 2023-01-01 12:10:00   purchase        1001         2001  2023-01-01  12:10:00
4        2 2023-01-01 12:15:00       view        1002         2002  2023-01-01  12:15:00
數據分析

我們可以通過分析用戶的不同事件類型來了解他們的行為模式。

# 按事件類型統計數量
event_counts = df['event_type'].value_counts()
print(event_counts)

輸出結果

view           3
click          2
add_to_cart    1
purchase       1
Name: event_type, dtype: int64

我們還可以按日期分析用戶的行為趨勢。

# 按日期和事件類型統計數量
daily_events = df.groupby(['date', 'event_type']).size().unstack().fillna(0)
print(daily_events)

輸出結果

event_type  add_to_cart  click  purchase  view
date                                         
2023-01-01          1.0    2.0       1.0   3.0
數據可視化

我們使用matplotlib對分析結果進行可視化展示。

import matplotlib.pyplot as plt# 繪制事件類型分布的柱狀圖
event_counts.plot(kind='bar')
plt.title('Event Type Distribution')
plt.xlabel('Event Type')
plt.ylabel('Count')
plt.show()# 繪制每日事件數量的折線圖
daily_events.plot(kind='line')
plt.title('Daily Event Counts')
plt.xlabel('Date')
plt.ylabel('Count')
plt.show()

image.png

9.3.2 其他數據分析示例

示例1:銷售數據分析

假設我們有一個包含銷售數據的數據集sales_data.csv,包括以下字段:datesales_amountproduct_idregion

date,sales_amount,product_id,region
2023-01-01,100,101,North
2023-01-01,150,102,East
2023-01-02,200,101,North
2023-01-02,250,103,South
2023-01-03,300,102,East
2023-01-03,350,104,West
2023-01-04,400,101,North
2023-01-04,450,103,South
2023-01-05,500,104,West
2023-01-05,550,102,East
數據清洗與預處理
import pandas as pd# 讀取數據
sales_df = pd.read_csv('sales_data.csv')# 查看數據集的前幾行
print(sales_df.head())

輸出結果

         date  sales_amount  product_id region
0  2023-01-01           100         101  North
1  2023-01-01           150         102   East
2  2023-01-02           200         101  North
3  2023-01-02           250         103  South
4  2023-01-03           300         102   East
數據分析

按日期統計銷售總額。

# 按日期統計銷售總額
daily_sales = sales_df.groupby('date')['sales_amount'].sum()
print(daily_sales)

輸出結果

date
2023-01-01    250
2023-01-02    450
2023-01-03    650
2023-01-04    850
2023-01-05   1050
Name: sales_amount, dtype: int64
數據可視化

繪制每日銷售總額的折線圖。

import matplotlib.pyplot as plt# 繪制每日銷售總額的折線圖
daily_sales.plot(kind='line')
plt.title('Daily Sales Amount')
plt.xlabel('Date')
plt.ylabel('Sales Amount')
plt.show()
進一步分析

按地區統計銷售總額。

# 按地區統計銷售總額
region_sales = sales_df.groupby('region')['sales_amount'].sum()
print(region_sales)

輸出結果

region
East      1000
North      700
South      700
West       850
Name: sales_amount, dtype: int64

繪制按地區統計銷售總額的柱狀圖。

# 繪制按地區統計銷售總額的柱狀圖
region_sales.plot(kind='bar')
plt.title('Total Sales Amount by Region')
plt.xlabel('Region')
plt.ylabel('Sales Amount')
plt.show()
示例2:天氣數據分析

假設我們有一個包含天氣數據的數據集weather_data.csv,包括以下字段:datetemperaturehumidityweather_condition

date,temperature,humidity,weather_condition
2023-01-01,5,80,Cloudy
2023-01-02,7,78,Sunny
2023-01-03,6,82,Rainy
2023-01-04,10,75,Sunny
2023-01-05,12,70,Sunny
2023-01-06,8,85,Cloudy
2023-01-07,9,88,Rainy
2023-01-08,11,77,Sunny
2023-01-09,13,72,Sunny
2023-01-10,14,68,Sunny
# 讀取數據
weather_df = pd.read_csv('weather_data.csv')# 查看數據集的前幾行
print(weather_df.head())# 按天氣條件統計平均溫度和濕度
weather_stats = weather_df.groupby('weather_condition').agg({'temperature': 'mean', 'humidity': 'mean'})
print(weather_stats)# 繪制天氣條件與平均溫度和濕度的關系圖
weather_stats.plot(kind='bar')
plt.title('Weather Condition vs Temperature and Humidity')
plt.xlabel('Weather Condition')
plt.ylabel('Average Values')
plt.show()

在本節中,我們通過電商用戶行為分析和其他數據分析示例,展示了如何應用數據清洗、預處理和可視化技術,進行深入的分析和洞察。
這些實際案例不僅幫助我們鞏固了前面學到的知識,還提供了寶貴的經驗,指導我們在實際項目中應用數據分析技術。

第10章 Web應用開發

在本章中,我們將介紹如何使用Django開發一個簡單的學生管理系統。

通過這個項目,你將學會如何使用Django創建和管理數據庫模型、編寫視圖、設計URL模式、創建表單和模板,并了解Django的認證和權限系統。以下是本章的詳細章節目錄:

10.1 Django簡介與環境配置

10.1.1 Django簡介

Django是一個高級Python Web框架,旨在快速開發和簡化復雜的數據庫驅動網站的創建。

它強調代碼復用、組件即插即用、快速開發和不重復造輪子原則。

10.1.2 環境配置與安裝

首先,我們需要確保在系統上安裝了Python和pip,然后使用以下命令安裝Django:

pip install django

10.1.3 創建Django項目

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

10.2 創建與管理數據庫模型

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

10.3 編寫視圖和URL配置

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

10.4 創建表單和處理用戶輸入

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

第11章 爬蟲實戰

由于平臺的字數限制, 這里省略了500+字,具體請參見尼恩的穿透AI系列之 《Python學習圣經:從0到1精通Python,打好AI基礎》PDF

說在最后:有問題找老架構取經

毫無疑問,與傳統應用架構師相比, AI架構師更有錢途, 這個代表未來的架構。

前面講到,尼恩指導的那個一個成功案例,是一個9年經驗 網易的小伙伴,拿到了一個年薪近80W的大模型架構offer,逆漲50%,那是在去年2023年的 5月。

  • 驚天大逆襲:8年小伙20天時間提75W年薪offer,逆漲50%,秘訣在這

不到1年,小伙伴也在團隊站穩了腳跟,成為了名副其實的大模型架構師。回想當時,尼恩本來是規劃指導小伙做通用架構師的( JAVA 架構、K8S云原生架構), 當時候為了他的錢途, 尼恩也是 壯著膽子, 死馬當作活馬指導他改造為 大模型架構師。

沒想到,由于尼恩的大膽嘗試, 小伙伴成了, 相當于他不到1年時間, 職業身價翻了1倍多,現在可以拿到年薪 200W的offer了。

應該來說,小伙伴大成,實現了真正的逆天改命。

既然有一個這么成功的案例,尼恩能想到的,就是希望能幫助更多的社群小伙伴, 成長為大模型架構師,也去逆天改命。

技術是相通的,架構也是。

尼恩架構團隊的大模型《LLM大模型學習圣經》是一個系列,初步的規劃包括下面的內容:

  • Python學習圣經:從0到1精通Python,打好AI基礎

  • LLM大模型學習圣經:從0到1吃透Transformer技術底座

  • 《LangChain學習圣經:從0到1精通LLM大模型應用開發的基礎框架》

  • 《LLM大模型學習圣經:從0到1精通RAG架構,基于LLM+RAG構建生產級企業知識庫》

  • 《SpringCloud + Python 混合微服務架構,打造AI分布式業務應用的技術底層》

  • 《LLM大模型學習圣經:從0到1吃透大模型的頂級架構》

本文是第1篇,作者是資深架構師 Andy(負責初稿) +43歲老架構師尼恩(負責升華,帶給大家一種俯視技術,技術自由的高度)。

尼恩架構團隊會持續迭代和更新,后面會有實戰篇,架構篇等等出來。 并且錄制配套視頻。

在尼恩的架構師哲學中,開宗明義:架構和語言無關,架構的思想和模式,本就是想通的。

架構思想和體系,本身和語言無關,和業務也關系不大,都是通的。

所以,尼恩用自己的架構內功,以及20年時間積累的架構洪荒之力,通過《LLM大模型學習圣經》,給大家做一下系統化、體系化的LLM梳理,使得大家內力猛增,成為大模型架構師,然后實現”offer直提”, 逆天改命。

尼恩 《LLM大模型學習圣經》PDF 系列文檔,會延續尼恩的一貫風格,會持續迭代,持續升級。

這個文檔將成為大家 學習大模型的殺手锏, 此文當最新PDF版本,可以來《技術自由圈》公號獲取。

本文是第3篇,第一作者是Andy,第二作者是尼恩。后面的文章,尼恩團隊會持續迭代和更新。 并且錄制配套視頻。

當然,除了大模型學習圣經,尼恩團隊,持續深耕技術,為大家輸出更多,更深入的技術體系,思想體系

多年來,用深厚的架構功力,把很多復雜的問題做清晰深入的穿透式、起底式的分析,寫了大量的技術圣經:

  • Netty 學習圣經:穿透Netty的內存池和對象池(那個超級難,很多人窮其一生都搞不懂),
  • DDD學習圣經: 穿透 DDD的建模和落地,
  • Caffeine學習圣經:比如Caffeine的底層架構,
  • 比如高性能葵花寶典
  • Thread Local 學習圣經
  • 等等等等。

上面這些學習圣經,大家可以通過《技術自由圈》公眾號,找尼恩獲取。

大家深入閱讀和掌握上面這些學習圣經之后,一定內力猛漲。

所以,尼恩強烈建議大家去看看尼恩的這些核心內容。

另外,如果學好了之后,還是遇到職業難題, 沒有面試機會,怎么辦?

可以找尼恩來幫扶、領路。

尼恩已經指導了大量的就業困難的小伙伴上岸.

前段時間,幫助一個40歲+就業困難小伙伴拿到了一個年薪100W的offer,小伙伴實現了 逆天改命

另外,尼恩也給一線企業提供 《DDD 的架構落地》企業內部培訓,目前給不少企業做過內部的咨詢和培訓,效果非常好。

在這里插入圖片描述

尼恩技術圣經系列PDF

  • 《NIO圣經:一次穿透NIO、Selector、Epoll底層原理》
  • 《Docker圣經:大白話說Docker底層原理,6W字實現Docker自由》
  • 《K8S學習圣經:大白話說K8S底層原理,14W字實現K8S自由》
  • 《SpringCloud Alibaba 學習圣經,10萬字實現SpringCloud 自由》
  • 《大數據HBase學習圣經:一本書實現HBase學習自由》
  • 《大數據Flink學習圣經:一本書實現大數據Flink自由》
  • 《響應式圣經:10W字,實現Spring響應式編程自由》
  • 《Go學習圣經:Go語言實現高并發CRUD業務開發》

……完整版尼恩技術圣經PDF集群,請找尼恩領取

《尼恩 架構筆記》《尼恩高并發三部曲》《尼恩Java面試寶典》PDF,請到下面公號【技術自由圈】取↓↓↓

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22352.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【智能體】文心智能體大賽第二季持續進行中,一起在智能體的海洋里發揮你的創意吧

目錄 背景作文小助手AI迅哥問答程序員黃歷助手比賽時間第二期賽題豐厚獎品評選說明獲獎智能體推薦文章 背景 AI應用&#xff08;智能體&#xff09;&#xff0c;持續火熱&#xff0c;一句話就能創建一個有趣、好玩的應用。 可以說一分鐘內就能創建一個有創意的智能體。 看大多…

Linux網絡-自定義協議、序列化和反序列化、網絡計算服務器的實現和Windows端客戶端

文章目錄 前言一、自定義協議傳結構體對象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、計算器服務端&#xff08;線程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客戶端Windows客…

我有點想用JDK17了

大家好呀&#xff0c;我是summo&#xff0c;JDK版本升級的非常快&#xff0c;現在已經到JDK20了。JDK版本雖多&#xff0c;但應用最廣泛的還得是JDK8&#xff0c;正所謂“他發任他發&#xff0c;我用Java8”。 其實我也不太想升級JDK版本&#xff0c;感覺投入高&#xff0c;收…

華為、華三交換機、路由器啟用基于端口的環回檢測功能配置

目的 在進行某些特殊功能測試時&#xff0c;例如初步定位以太網故障時&#xff0c;需要開啟以太網接口環回檢測功能&#xff0c;測試接口功能是否異常。 當以太網接口無故障時&#xff0c;開啟環回檢測功能后接口物理狀態和協議狀態將始終處于Up狀態&#xff1b;如果以太網接口…

Linux環境搭建NextCloud

NextCloud是什么 Nextcloud是一款開源免費的私有云存儲網盤項目&#xff0c;可以讓你快速便捷的搭建一套屬于自己或者團隊的云同步網盤&#xff0c;從而實現跨平臺跨設備文件同步&#xff0c;共享&#xff0c;版本控制&#xff0c;團隊協做等功能。它的客戶端覆蓋windows&#…

使用AdaBoost分類方法實現對Wine數據集分類

目錄 1. 作者介紹2. 什么是AdaBoost&#xff1f;2.1 什么是弱分類器2.2 什么是強分類器2.3 如何自適應增強2.4 如何組合弱分類器成為一個強分類器&#xff1f; 3. 什么是Wine數據集3.1 Wine 數據集3.2 Wine 數據集結構 4. 使用AdaBoost分類方法實現對Wine數據集分類5. 完整代碼…

PLC的編程方式有什么編程:深度探索與實用指南

PLC的編程方式有什么編程&#xff1a;深度探索與實用指南 在現代工業自動化領域&#xff0c;可編程邏輯控制器&#xff08;PLC&#xff09;扮演著至關重要的角色。PLC的編程方式多種多樣&#xff0c;每種方式都有其獨特的優點和適用場景。本文將從四個方面、五個方面、六個方面…

k8s 配置資源管理

一、Secret的資源配置 1.1 Secret配置的相關說明 Secret 是用來保存密碼、token、密鑰等敏感數據的 k8s 資源&#xff0c;這類數據雖然也可以存放在 Pod 或者鏡像中&#xff0c;但是放在 Secret 中是為了更方便的控制如何使用數據&#xff0c;并減少暴露的風險。 有四種類型&a…

日志優化開發效率

日志怎么打&#xff1f; 1.在關鍵節點打日志 (1).請求入口 (2).結果響應 2.可能發生錯誤的節點打日志 3.日志不是越多越好&#xff0c;打日志也會消耗性能 RequestMapping("/add")public Boolean publishBlog(String title, String content, HttpServletRequest req…

react快速開始(四)-之Vite 還是 (Create React App) CRA? 用Vite創建項目

文章目錄 react快速開始(四)-之Vite 還是 (Create React App) CRA? 用Vite創建項目背景Vite 和 (Create React App) CRAVite&#xff1f;Vite 是否支持 TypeScript&#xff1f; 用Vite創建react項目參考 react快速開始(四)-之Vite 還是 (Create React App) CRA? 用Vite創建項…

Java面向對象筆記

多態 一種類型的變量可以引用多種實際類型的對象 如 package ooplearn;public class Test {public static void main(String[] args) {Animal[] animals new Animal[2];animals[0] new Dog();animals[1] new Cat();for (Animal animal : animals){animal.eat();}} }class …

Java面試題-集合

Java面試題-集合 1、什么是集合&#xff1f;2、集合和數組的區別是什么&#xff1f;3、集合有哪些特點&#xff1f;4、常用的集合類有哪些&#xff1f;5、List&#xff0c; Set&#xff0c; Map三者的區別&#xff1f;6、說說集合框架底層數據結構&#xff1f;7、線程安全的集合…

MeshFusion Pro : Ultimate Optimization Tool

MeshFusion Pro是Unity的強大優化工具,它使用一種高效的方法來組合對象,以減少繪制調用并提高FPS。 MeshFusion Pro可用于組合靜態對象以及LODGroups。您還可以創建動態組合對象,其中每個單獨的網格都可以在運行時移動,新的組合網格將自動更新。在保持單個網格自由度的同時…

【數據結構與算法 | 二叉樹篇】力扣101, 104, 111

1. 力扣101 : 對稱二叉樹 (1). 題 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,2,3,4,4,3] 輸出&#xff1a;true示例 2&#xff1a; 輸入&#xff1a;root [1,2,2,null,3,null,3] 輸出&#xff1a;false…

Java1.8語言+ springboot +mysql + Thymeleaf 全套家政上門服務平臺app小程序源碼

Java1.8語言 springboot mysql Thymeleaf 全套家政上門服務平臺app小程序源碼 家政系統是一套可以提供上門家政、上門維修、上門洗車、上門搬家等服務為一體的家政平臺解決方案。它能夠與微信對接、擁有用戶端小程序&#xff0c;并提供師傅端app&#xff0c;可以幫助創業者在…

樹的算法基礎知識

什么是樹&#xff1a; 樹是n&#xff08;n>0&#xff09;個結點的有限集。n0時稱為空樹。在任意一棵非空樹中&#xff1a; 有且僅有一個特定的稱為根的結點當n>1時&#xff0c;其余結點可分為m&#xff08;m>0&#xff09;個互不相交的有限集T1、T2、......、Tm&…

ElasticSearch學習筆記之三:Logstash數據分析

第3章 Logstash數據分析 Logstash使用管道方式進行日志的搜集處理和輸出。有點類似*NIX系統的管道命令 xxx | ccc | ddd&#xff0c;xxx執行完了會執行ccc&#xff0c;然后執行ddd。 在logstash中&#xff0c;包括了三個階段: 輸入input --> 處理filter&#xff08;不是必須…

異或炸彈(easy)(牛客小白月賽95)

題目鏈接: D-異或炸彈&#xff08;easy&#xff09;_牛客小白月賽95 (nowcoder.com) 題目&#xff1a; 題目分析&#xff1a; 一看 還以為是二維差分的題呢 到后來才發現是一維差分問題 這里的距離是 曼哈頓距離 dis abs(x - xi) abs(y - yi) 暴力的做法 就是枚舉 n * n 個…

word-海報制作

1、確定海報的尺寸大小 2、創建主題顏色 設計-顏色-自定義顏色-柑橘rgb值改變著色1-著色6的顏色 3、將文字添加至文本框&#xff0c;更改字體顏色、大小和格式 4、添加背景水印&#xff1a;插入-形狀-文本框 5、組合全部元素 圖片素材網址&#xff1a;

Power BI前端設計:深度探索與實戰技巧

Power BI前端設計&#xff1a;深度探索與實戰技巧 Power BI作為一款強大的商業智能工具&#xff0c;其前端設計對于用戶體驗和數據可視化效果至關重要。本文將深入探討Power BI前端設計的四個關鍵方面、五個實用技巧、六個設計要素以及七個注意事項&#xff0c;助您提升Power …