大家好,我是花姐,今天给大家带来一篇关于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(没有分号,没有大括号)
python
print("Hello, world!")
- 没有分号
;
。 - 没有大括号
{}
,使用缩进。 - 没有
console.log()
,只有print()
。
变量与动态类型
python
name = "花姐" # 直接赋值,没有let/const的束缚
age = 18 # 永远18岁的神秘数字(HR看了都流泪)
- 不需要声明
var
、let
或const
。 - 类型是动态推断的。
Python中的const
如何工作?
Python没有像JavaScript那样的const
,但你可以通过使用全大写的变量名来定义常量。
python
PI = 3.14159 # 约定俗成,常量用大写
然而,这并不强制不可变性。如果你需要真正的不可变性,可以使用dataclass
或frozen 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
python
x = 10
if x > 5:
print("X is large")
elif x == 5:
print("X is five")
else:
print("X is small")
- 条件语句不需要括号()。
- 使用缩进代替{}。
循环(For & While)
python
# 遍历列表
for num in [1, 2, 3]:
print(num)
# While循环
x = 5
while x > 0:
print(x)
x -= 1
for
循环直接遍历列表/数组。while
循环与JavaScript类似。
3. 函数与Lambda表达式
定义函数
python
def greet(name):
return f"Hello, {name}!"
print(greet("花姐"))
def
代替function
。- 没有{},只有缩进。
Lambda(相当于箭头函数)
python
add = lambda x, y: x + y
print(add(5, 10)) # 输出: 15
- 相当于JavaScript的箭头函数:
javascript
const add = (x, y) => x + y;
4. Python集合(列表、字典、集合)
列表(类似数组)
python
nums = [1, 2, 3]
nums.append(4) # 添加元素
nums.remove(2) # 移除元素
print(nums) # 输出: [1, 3, 4]
字典(类似对象)
python
user = {"name": "花姐", "age": 18}
print(user["name"]) # 输出: 花姐
5. Python中的面向对象编程(OOP)
定义类
python
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)
python
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)
python
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包管理
任务
任务 | JavaScript | Python |
---|---|---|
安装包 | npm install axios |
pip install requests |
创建虚拟环境 | nvm use |
python -m venv env |
运行脚本 | node script.js |
python script.py |
- 使用
pip
进行包管理。 - 虚拟环境(
venv
)隔离依赖。
9. Python开发的最佳实践
编写干净、高效、可维护的Python代码对于长期的可扩展性至关重要。以下是每个Python开发者都应遵循的关键最佳实践:
遵循PEP 8(Python风格指南)
Python有一个官方的风格指南,称为PEP 8,它提供了编写Python代码的约定。
- 使用4个空格作为缩进级别(不要使用制表符)。
- 限制行长度为79个字符。
- 使用有意义的变量和函数名称。
- 使用
snake_case
作为变量和函数名称,使用PascalCase
作为类名称。
示例代码
python
# 符合规范的代码
def calculate_area(radius):
return 3.14 * radius ** 2
# 不推荐的代码
def calcArea(r): return 3.14*r**2
使用虚拟环境
Python的虚拟环境隔离了不同项目的依赖关系,防止冲突。
创建虚拟环境
python
python -m venv venv
激活虚拟环境:
-
Windows:
venv\Scripts\activate
-
Mac/Linux:
bash
source venv/bin/activate
停用虚拟环境:
python
deactivate
使用类型提示提高代码可读性
Python是动态类型的,但你可以使用类型提示来提高代码的清晰度。
python
def add(x: int, y: int) -> int:
return x + y
- 这使得代码可读性更强。
- 帮助像
mypy
这样的工具捕获类型错误。
Python中的函数、类注释文档
始终使用文档字符串(""" """
)记录你的函数和类。
python
def greet(name: str) -> str:
"""
返回给定名称的问候消息。
:param name: 要问候的名称。
:return: 问候字符串。
"""
return f"Hello, {name}!"
- 使用三重引号进行多行文档字符串。
- 解释参数、返回值和目的。
10. Python中的注释
Python使用#
进行单行注释,使用三重引号(""" """
)进行文档字符串。
单行注释
python
# 这是一个单行注释
print("Hello, world!") # 行内注释
多行文档字符串
python
"""
这是一个多行文档字符串。
通常用于文档。
"""
print("Hello, world!")
- 仅在必要时使用注释------好的代码应该是自解释的。
- 文档字符串不是注释------它们用于文档,可以通过
help()
访问。
11. 面向Web开发者的的Python导入
以下是一些常见的Python导入:
内置模块
功能 | 导入 |
---|---|
系统操作 | import os |
文件处理 | import pathlib |
环境变量 | import dotenv |
日期和时间 | import datetime |
JSON解析 | import json |
HTTP请求 | import requests |
日志记录 | import logging |
示例用法
python
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
文件
python
pip freeze > requirements.txt
从requirements.txt
安装依赖
python
pip install -r requirements.txt
- 这确保了所有团队成员和部署环境都有相同的包版本。
13. 在Python中编写和运行测试
Python有内置的unittest
测试,但实用pytest
模块更简洁。
使用unittest
的基本测试
python
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
:
python
pip install pytest
示例test_math.py
:
python
def add(x, y):
return x + y
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
运行所有测试:
python
pytest
- 不需要使用类------只需使用
assert
。 - 自动发现名为
test_*.py
的测试文件。
14. 使用Python进行API调用获取数据
Python使用requests
获取数据,类似于JavaScript中的fetch()
。
基本API请求
python
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts")
data = response.json()
print(data)
requests.get()
类似于JavaScript中的fetch(url)
。.json()
在两种语言中的工作方式相同。
发送数据(POST请求)
python
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中的日志记录
日志记录对于调试和监控应用程序至关重要。
基本日志记录
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()
,但支持不同的日志级别。
将日志写入文件
python
logging.basicConfig(filename="app.log", level=logging.DEBUG)
logging.debug("Debugging info")
- 保存日志以供后续分析。
16. 在Python中引发和处理错误
当发生错误时,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
手动触发错误。
记录错误
而不是崩溃,使用日志记录错误并附带回溯:
python
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都让这一切变得简单而强大。🚀