面向Web开发者的Python速成指南,5分钟学会Python

299 阅读7分钟

大家好,我是花姐,今天给大家带来一篇关于Python的速成指南,特别适合那些已经熟悉JavaScript的Web开发者。Python不仅语法简洁,还能让你在Web开发、自动化、数据科学等领域大展拳脚。准备好了吗?让我们开始吧!

简单介绍下Python

Python是一种强大的高级编程语言,广泛应用于Web开发、自动化、数据科学和脚本编写。如果你已经是一名熟悉JavaScript、TypeScript、Node.js以及React或Next.js等框架的全栈Web开发者,学习Python可以为你打开使用Django、Flask和FastAPI进行后端开发的大门,同时还能涉足自动化、数据分析和人工智能领域。本教程将快速带你了解Python,带你了解JavaScript与Python的不同之处。如果你对JavaScript已经很熟悉,你会发现Python的语法更简洁易学。

1. Python语法与基础

Hello World(没有分号,没有大括号)

print("Hello, world!")
  • 没有分号;
  • 没有大括号{},使用缩进。
  • 没有console.log(),只有print()

变量与动态类型

name = "花姐"  # 直接赋值,没有let/const的束缚
age = 18  # 永远18岁的神秘数字(HR看了都流泪)
  • 不需要声明varletconst
  • 类型是动态推断的。

Python中的const如何工作?

Python没有像JavaScript那样的const,但你可以通过使用全大写的变量名来定义常量。

PI = 3.14159  # 约定俗成,常量用大写

然而,这并不强制不可变性。如果你需要真正的不可变性,可以使用dataclassfrozen set

JavaScript vs Python 数据类型对比

JS代码Python代码
let age = 18;age = 18
const name = "花姐";name = "花姐"
let arr = [1, 2, 3];`arr = [1, 2, 3]
let obj = {key: "value"};obj = {"key": "value"}

2. 控制流(循环与条件语句)

If/Else

x = 10

if x > 5:
    print("X is large")
elif x == 5:
    print("X is five")
else:
    print("X is small")
  • 条件语句不需要括号()。
  • 使用缩进代替{}。

循环(For & While)

# 遍历列表
for num in [1, 2, 3]:
    print(num)

# While循环
x = 5
while x > 0:
    print(x)
    x -= 1
  • for循环直接遍历列表/数组。
  • while循环与JavaScript类似。

3. 函数与Lambda表达式

定义函数

def greet(name):
    return f"Hello, {name}!"

print(greet("花姐"))
  • def代替function
  • 没有{},只有缩进。

Lambda(相当于箭头函数)

add = lambda x, y: x + y
print(add(5, 10))  # 输出: 15
  • 相当于JavaScript的箭头函数:
const add = (x, y) => x + y;

4. Python集合(列表、字典、集合)

列表(类似数组)

nums = [1, 2, 3]
nums.append(4)  # 添加元素
nums.remove(2)  # 移除元素
print(nums)  # 输出: [1, 3, 4]

字典(类似对象)

user = {"name": "花姐", "age": 18}
print(user["name"])  # 输出: 花姐

5. Python中的面向对象编程(OOP)

定义类

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, my name is {self.name}"

p = Person("花姐")
print(p.greet())  # 输出: Hello, my name is 花姐
  • __init__是构造函数(类似JavaScript中的constructor())。
  • self类似this

6. Python与数据库

SQLite示例(兼容Django和Flask)

import sqlite3

conn = sqlite3.connect("database.db")
cursor = conn.cursor()

cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
cursor.execute("INSERT INTO users (name) VALUES ('Austin')")
conn.commit()
  • SQLite是内置的,无需安装。

7. Python中的异步编程

Async/Await(类似JavaScript)

import asyncio

async def fetch_data():
    await asyncio.sleep(2)
    return "Data received"

async def main():
    result = await fetch_data()
    print(result)

asyncio.run(main())
  • 使用async/await,类似JavaScript。
  • asyncio是事件循环,相当于Node.js。

8. Python包管理

任务

任务JavaScriptPython
安装包npm install axiospip install requests
创建虚拟环境nvm usepython -m venv env
运行脚本node script.jspython script.py
  • 使用pip进行包管理。
  • 虚拟环境(venv)隔离依赖。

9. Python开发的最佳实践

编写干净、高效、可维护的Python代码对于长期的可扩展性至关重要。以下是每个Python开发者都应遵循的关键最佳实践:

遵循PEP 8(Python风格指南)

Python有一个官方的风格指南,称为PEP 8,它提供了编写Python代码的约定。

  • 使用4个空格作为缩进级别(不要使用制表符)。
  • 限制行长度为79个字符。
  • 使用有意义的变量和函数名称。
  • 使用snake_case作为变量和函数名称,使用PascalCase作为类名称。

示例代码

# 符合规范的代码
def calculate_area(radius):
    return 3.14 * radius ** 2

# 不推荐的代码
def calcArea(r): return 3.14*r**2

使用虚拟环境

Python的虚拟环境隔离了不同项目的依赖关系,防止冲突。

创建虚拟环境

python -m venv venv

激活虚拟环境:

  • Windows:
venv\Scripts\activate
  • Mac/Linux:
source venv/bin/activate

停用虚拟环境:

deactivate

使用类型提示提高代码可读性

Python是动态类型的,但你可以使用类型提示来提高代码的清晰度。

def add(x: int, y: int) -> int:
    return x + y
  • 这使得代码可读性更强。
  • 帮助像mypy这样的工具捕获类型错误。

Python中的函数、类注释文档

始终使用文档字符串(""" """)记录你的函数和类。

def greet(name: str) -> str:
    """
    返回给定名称的问候消息。

    :param name: 要问候的名称。
    :return: 问候字符串。
    """
    return f"Hello, {name}!"
  • 使用三重引号进行多行文档字符串。
  • 解释参数、返回值和目的。

10. Python中的注释

Python使用#进行单行注释,使用三重引号(""" """)进行文档字符串。

单行注释

# 这是一个单行注释
print("Hello, world!")  # 行内注释

多行文档字符串

"""
这是一个多行文档字符串。
通常用于文档。
"""
print("Hello, world!")
  • 仅在必要时使用注释——好的代码应该是自解释的。
  • 文档字符串不是注释——它们用于文档,可以通过help()访问。

11. 面向Web开发者的的Python导入

以下是一些常见的Python导入:

内置模块

功能导入
系统操作import os
文件处理import pathlib
环境变量import dotenv
日期和时间import datetime
JSON解析import json
HTTP请求import requests
日志记录import logging

示例用法

import os
import json
import requests

response = requests.get("https://api.example.com/data")
data = response.json()
print(data)

12. 设置requirements.txt文件

requirements.txt文件类似于Node.js中的package.json——它列出了Python项目的依赖项。

创建requirements.txt文件

pip freeze > requirements.txt

requirements.txt安装依赖

pip install -r requirements.txt
  • 这确保了所有团队成员和部署环境都有相同的包版本。

13. 在Python中编写和运行测试

Python有内置的unittest测试,但实用pytest模块更简洁。

使用unittest的基本测试

import unittest

def add(x, y):
    return x + y

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)

if __name__ == "__main__":
    unittest.main()
  • 使用assertEqual()检查预期结果。

使用pytest进行测试

安装pytest

pip install pytest

示例test_math.py

def add(x, y):
    return x + y

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

运行所有测试:

pytest
  • 不需要使用类——只需使用assert
  • 自动发现名为test_*.py的测试文件。

14. 使用Python进行API调用获取数据

Python使用requests获取数据,类似于JavaScript中的fetch()

基本API请求

import requests

response = requests.get("https://jsonplaceholder.typicode.com/posts")
data = response.json()
print(data)
  • requests.get()类似于JavaScript中的fetch(url)
  • .json()在两种语言中的工作方式相同。

发送数据(POST请求)

payload = {"title": "Hello", "body": "World"}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=payload)

print(response.status_code)  # 201 Created
print(response.json())
  • 使用json=payload而不是data=payload来发送JSON。

15. Python中的日志记录

日志记录对于调试和监控应用程序至关重要。

基本日志记录

import logging

logging.basicConfig(level=logging.INFO)
logging.info("This is an info message")
logging.warning("This is a warning")
logging.error("This is an error")
  • 类似于console.log(),但支持不同的日志级别。

将日志写入文件

logging.basicConfig(filename="app.log", level=logging.DEBUG)
logging.debug("Debugging info")
  • 保存日志以供后续分析。

16. 在Python中引发和处理错误

当发生错误时,Python允许你引发异常或记录错误。

引发异常

def divide(x, y):
    if y == 0:
        raise ValueError("Cannot divide by zero")
    return x / y

print(divide(10, 2))  # 正常
print(divide(10, 0))  # 引发ValueError
  • 使用raise手动触发错误。

记录错误

而不是崩溃,使用日志记录错误并附带回溯:

import logging

logging.basicConfig(filename="error.log", level=logging.ERROR)

try:
    result = 10 / 0
except ZeroDivisionError as e:
    logging.error("An error occurred", exc_info=True)
  • exc_info=True记录完整的错误回溯。

结论

Python对于Web开发者来说是一种非常有用的语言,它扩展了你的技术栈,超越了JavaScript。无论你是使用FastAPI构建API,还是使用Django构建全栈应用,或者进行自动化任务,Python都让这一切变得简单而强大。🚀