SSM项目实战涵盖了Spring、Spring MVC和MyBatis框架的整合,帮助开发者快速构建企业级应用。本文将详细介绍SSM项目的搭建步骤和常用操作,帮助读者掌握SSM框架的核心功能和最佳实践。通过实际案例演示,读者可以了解如何在项目中应用这些技术。整个过程将引导读者从零开始,逐步构建一个完整的SSM项目。
Python 编程基础详解 1. 变量与类型1.1 变量
变量是在程序中用来存储数据的标识符。Python 中的变量不需要显式声明类型,Python 会根据赋值自动推断变量类型。
x = 10
print(x) # 输出:10
y = "Hello, World!"
print(y) # 输出:Hello, World!
1.2 基本类型
Python 中的基本类型包括整型 (int
)、浮点型 (float
)、字符串 (str
) 和布尔型 (bool
)。
# 整型
age = 25
print(age) # 输出:25
print(type(age)) # 输出:<class 'int'>
# 浮点型
pi = 3.14159
print(pi) # 输出:3.14159
print(type(pi)) # 输出:<class 'float'>
# 字符串
name = "Alice"
print(name) # 输出:Alice
print(type(name)) # 输出:<class 'str'>
# 布尔型
is_student = True
print(is_student) # 输出:True
print(type(is_student)) # 输出:<class 'bool'>
1.3 变量赋值
变量可以被重新赋值,Python 的动态类型特性允许变量在赋值时改变其类型。
x = 10
print(x) # 输出:10
print(type(x)) # 输出:<class 'int'>
x = "Hello"
print(x) # 输出:Hello
print(type(x)) # 输出:<class 'str'>
2. 数据结构
2.1 列表
列表是 Python 中最灵活的数据结构之一,它允许存储多种类型的元素。
# 创建列表
fruits = ["apple", "banana", "cherry"]
print(fruits) # 输出:['apple', 'banana', 'cherry']
# 访问列表元素
print(fruits[0]) # 输出:apple
# 修改列表元素
fruits[1] = "orange"
print(fruits) # 输出:['apple', 'orange', 'cherry']
# 添加元素
fruits.append("grape")
print(fruits) # 输出:['apple', 'orange', 'cherry', 'grape']
# 删除元素
del fruits[1]
print(fruits) # 输出:['apple', 'cherry', 'grape']
2.2 元组
元组与列表类似,但元组是不可变的,一旦创建就不能修改。
# 创建元组
point = (10, 20)
print(point) # 输出:(10, 20)
# 访问元素
print(point[0]) # 输出:10
# 元组不可被修改
# point[0] = 15 # 这会引发 TypeError
2.3 字典
字典是以键值对形式存储数据的容器。
# 创建字典
person = {"name": "Alice", "age": 25, "city": "Beijing"}
print(person) # 输出:{'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 访问字典元素
print(person["name"]) # 输出:Alice
# 修改字典元素
person["age"] = 26
print(person) # 输出:{'name': 'Alice', 'age': 26, 'city': 'Beijing'}
# 添加元素
person["job"] = "Engineer"
print(person) # 输出:{'name': 'Alice', 'age': 26, 'city': 'Beijing', 'job': 'Engineer'}
# 删除元素
del person["city"]
print(person) # 输出:{'name': 'Alice', 'age': 26, 'job': 'Engineer'}
2.4 集合
集合是无序且不重复的数据集合。
# 创建集合
numbers = {1, 2, 3, 4, 5}
print(numbers) # 输出:{1, 2, 3, 4, 5}
# 添加元素
numbers.add(6)
print(numbers) # 输出:{1, 2, 3, 4, 5, 6}
# 删除元素
numbers.remove(3)
print(numbers) # 输出:{1, 2, 4, 5, 6}
3. 控制结构
3.1 条件语句
条件语句用于根据条件执行不同的代码块。
age = 22
if age > 18:
print("You are an adult.")
else:
print("You are a minor.")
# 输出:You are an adult.
3.2 循环语句
3.2.1 for 循环
for 循环用于遍历序列(如列表、元组、字符串、字典和集合)。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 输出:
# apple
# banana
# cherry
3.2.2 while 循环
while 循环用于在条件为真时执行代码块。
count = 0
while count < 5:
print(count)
count += 1
# 输出:
# 0
# 1
# 2
# 3
# 4
3.3 跳跃语句
3.3.1 break
break 语句用于终止循环。
numbers = [1, 2, 3, 4, 5, 6]
for number in numbers:
if number == 4:
break
print(number)
# 输出:
# 1
# 2
# 3
3.3.2 continue
continue 语句用于跳过当前循环的剩余部分,并继续下一次循环。
numbers = [1, 2, 3, 4, 5, 6]
for number in numbers:
if number % 2 == 0:
continue
print(number)
# 输出:
# 1
# 3
# 5
4. 函数
函数是可重用的代码块,可用于执行特定任务。
4.1 定义函数
使用 def
关键字定义函数。
def greet(name):
return f"Hello, {name}"
print(greet("Alice")) # 输出:Hello, Alice
4.2 参数与返回值
函数可以接受参数并返回值。
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出:8
4.3 默认参数
定义函数时可指定默认参数值。
def greet(name="Guest"):
return f"Hello, {name}"
print(greet()) # 输出:Hello, Guest
print(greet("Alice")) # 输出:Hello, Alice
4.4 可变参数
使用 *args
和 **kwargs
可以处理可变数量的参数。
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4)) # 输出:10
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="Beijing")
# 输出:
# name: Alice
# age: 25
# city: Beijing
5. 文件操作
Python 提供了丰富的功能来读写文件。
5.1 读取文件
使用 open()
函数打开文件,并使用 with
语句来确保文件在操作完成后被正确关闭。
with open("example.txt", "r") as file:
content = file.read()
print(content)
5.2 写入文件
使用 open()
函数并指定写模式 ("w"
) 来写入文件。
with open("example.txt", "w") as file:
file.write("Hello, World!")
5.3 追加文件
使用 open()
函数并指定追加模式 ("a"
) 来追加内容。
with open("example.txt", "a") as file:
file.write("\nThis is an additional line.")
5.4 文件路径
使用绝对路径或相对路径来指定文件的位置。
with open("/path/to/example.txt", "r") as file:
content = file.read()
print(content)
6. 异常处理
异常处理用于捕获和处理程序执行中的错误。
6.1 捕获异常
使用 try
和 except
语句来捕获异常。
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero.")
# 输出:Cannot divide by zero.
6.2 多个异常
可以捕获多个异常。
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero.")
except TypeError:
print("Type error occurred.")
# 输出:Cannot divide by zero.
6.3 捕获所有异常
使用 Exception
类捕获所有类型的异常。
try:
result = 10 / 0
except Exception as e:
print(f"An error occurred: {e}")
# 输出:An error occurred: division by zero
6.4 finally 语句
finally
语句用于确保代码块在异常发生时也执行。
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero.")
finally:
print("Finally block executed.")
# 输出:
# Cannot divide by zero.
# Finally block executed.
6.5 自定义异常
可以自定义异常类来更精确地处理错误。
class MyCustomError(Exception):
def __init__(self, message):
self.message = message
try:
raise MyCustomError("This is a custom error.")
except MyCustomError as e:
print(e.message)
# 输出:This is a custom error.
7. 模块与包
7.1 导入模块
使用 import
语句导入模块。
import math
print(math.sqrt(16)) # 输出:4.0
7.2 从模块导入特定函数
使用 from
语句从模块中导入特定函数。
from math import sqrt
print(sqrt(25)) # 输出:5.0
7.3 创建自己的模块
创建一个简单的模块文件 my_module.py
。
# my_module.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
导入并使用该模块。
import my_module
print(my_module.add(5, 3)) # 输出:8
print(my_module.subtract(5, 3)) # 输出:2
7.4 包管理
使用 __init__.py
文件将模块组织成包。
# my_package/__init__.py
# 可以为空,也可以包含包初始化代码
创建子模块。
# my_package/module1.py
def module1_function():
return "This is from module1."
# my_package/module2.py
def module2_function():
return "This is from module2."
导入并使用子模块。
from my_package import module1, module2
print(module1.module1_function()) # 输出:This is from module1.
print(module2.module2_function()) # 输出:This is from module2.
8. 面向对象编程
8.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."
person = Person("Alice", 25)
print(person.greet()) # 输出:Hello, my name is Alice and I am 25 years old.
8.2 继承
使用 class
关键字定义类并使用 class
关键字定义子类来继承父类。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement this method.")
class Dog(Animal):
def speak(self):
return f"{self.name} says woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says meow!"
dog = Dog("Buddy")
print(dog.speak()) # 输出:Buddy says woof!
cat = Cat("Whiskers")
print(cat.speak()) # 输出:Whiskers says meow!
8.3 封装
封装是指将数据和操作数据的方法绑定在一起,通常通过私有属性和方法实现。
class BankAccount:
def __init__(self, owner, balance=0):
self._owner = owner
self._balance = balance
def deposit(self, amount):
if amount > 0:
self._balance += amount
print(f"Deposited {amount}. New balance: {self._balance}")
else:
print("Invalid deposit amount.")
def withdraw(self, amount):
if 0 < amount <= self._balance:
self._balance -= amount
print(f"Withdrew {amount}. New balance: {self._balance}")
else:
print("Invalid withdrawal amount or insufficient funds.")
account = BankAccount("Alice", 100)
account.deposit(50) # 输出:Deposited 50. New balance: 150
account.withdraw(75) # 输出:Withdrew 75. New balance: 75
8.4 多态
多态是指子类可以重写父类的方法,实现不同的功能。
class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
shapes = [Rectangle(4, 5), Circle(3)]
for shape in shapes:
print(f"Area: {shape.area()}")
# 输出:
# Area: 20
# Area: 28.26
9. 高级特性
9.1 生成器
生成器是一种特殊的迭代器,使用 yield
关键字生成数据。
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
for number in count_up_to(5):
print(number)
# 输出:
# 1
# 2
# 3
# 4
# 5
9.2 列表推导式
列表推导式是一种简洁的创建列表的方法。
squares = [x**2 for x in range(5)]
print(squares) # 输出:[0, 1, 4, 9, 16]
9.3 命名元组
命名元组是元组的子类,用于存储数据和提供更好的可读性。
from collections import namedtuple
Person = namedtuple("Person", ["name", "age", "city"])
person = Person(name="Alice", age=25, city="Beijing")
print(person) # 输出:Person(name='Alice', age=25, city='Beijing')
print(person.name) # 输出:Alice
9.4 字典推导式
字典推导式是一种简洁的创建字典的方法。
squares = {x: x**2 for x in range(5)}
print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
10. 装饰器
装饰器是一种特殊的函数,用于修改或增强其他函数的行为。
10.1 基本装饰器
基本装饰器用于在函数调用前后执行一些操作。
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# Something is happening before the function is called.
# Hello!
# Something is happening after the function is called.
10.2 带参数的装饰器
装饰器也可以接受参数,以提供更多的灵活性。
def repeat(num_times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num_times=3)
def greet(name):
print(f"Hello, {name}")
greet("Alice")
# 输出:
# Hello, Alice
# Hello, Alice
# Hello, Alice
10.3 类装饰器
类装饰器是一种通过类实现的装饰器。
class MyDecorator:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print("Something is happening before the function is called.")
result = self.func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
@MyDecorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# Something is happening before the function is called.
# Hello!
# Something is happening after the function is called.
11. 装饰器示例:日志记录
装饰器可以用于记录日志。
import logging
logging.basicConfig(filename='app.log', level=logging.INFO)
def log_decorator(func):
def wrapper(*args, **kwargs):
logging.info(f"Calling {func.__name__} with args {args} and kwargs {kwargs}")
result = func(*args, **kwargs)
logging.info(f"{func.__name__} returned {result}")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
result = add(3, 4)
# 输出到 app.log:Calling add with args (3, 4) and kwargs {}
# 输出到 app.log:add returned 7
12. 常见 Python 库
12.1 NumPy
NumPy 是一个用于科学计算的基本库,提供了多维数组对象和各种派生对象(如掩码数组)。
import numpy as np
# 创建数组
arr = np.array([1, 2, 3, 4, 5])
print(arr) # 输出:[1 2 3 4 5]
# 数组运算
print(arr * 2) # 输出:[ 2 4 6 8 10]
12.2 Pandas
Pandas 是一个强大的数据分析库,提供了数据结构和数据分析工具。
import pandas as pd
# 创建DataFrame
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"City": ["Beijing", "Shanghai", "Guangzhou"]
}
df = pd.DataFrame(data)
print(df)
# 输出:
# Name Age City
# 0 Alice 25 Beijing
# 1 Bob 30 Shanghai
# 2 Charlie 35 Guangzhou
12.3 Matplotlib
Matplotlib 是一个用于绘制图表的库。
import matplotlib.pyplot as plt
# 创建图表
plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.title('Sample Plot')
plt.show()
12.4 Requests
Requests 是一个用于发送 HTTP 请求的库。
import requests
# 发送GET请求
response = requests.get("https://api.github.com")
print(response.status_code) # 输出:200
print(response.headers["Content-Type"]) # 输出:application/json; charset=utf-8
13. Python 进阶技巧
13.1 列表推导式和生成器表达式
列表推导式用于快速创建列表,生成器表达式用于创建生成器。
# 列表推导式
squares = [x**2 for x in range(5)]
print(squares) # 输出:[0, 1, 4, 9, 16]
# 生成器表达式
even_squares = (x**2 for x in range(5) if x % 2 == 0)
print(list(even_squares)) # 输出:[0, 4, 16]
13.2 函数注解
函数注解允许为函数参数和返回值提供类型提示。
def add(a: int, b: int) -> int:
return a + b
print(add(2, 3)) # 输出:5
13.3 嵌套函数和闭包
嵌套函数可以访问外层函数的变量,闭包是嵌套函数的特殊形式。
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(10)
print(closure(5)) # 输出:15
13.4 常量与模块
使用 ALL_CAPS
语法定义常量,并通过导入模块使用它们。
# constants.py
MY_CONSTANT = 42
# 使用
import constants
print(constants.MY_CONSTANT) # 输出:42
14. 总结与资源
本章详细介绍了 Python 编程的基础知识,包括变量与类型、数据结构、控制结构、函数、文件操作、异常处理、模块与包、面向对象编程、高级特性、装饰器等。通过学习这些内容,你将具备编写复杂 Python 程序的能力。
推荐学习网站:慕课网 提供了大量的 Python 教程和项目实战,适合不同水平的学习者。
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章