從 C# 到 Python:項目實戰第五天的飛躍

在前面三天的學習中,我們已經掌握了 Python 的基礎語法、數據結構以及一些核心庫的使用。今天,我們將通過三個實戰項目,深入對比 C# 和 Python 在命令行工具開發、Web 應用開發以及數據處理方面的差異,感受 Python 在實際項目中的強大魅力。

一、命令行工具開發:文件批量處理

命令行工具是開發者日常工作中經常用到的工具,無論是文件處理、數據轉換還是系統管理,都離不開命令行工具的身影。下面我們就來對比一下 C# 控制臺應用和 Python 命令行工具在開發文件批量處理工具時的不同。

1.1 C# 控制臺應用實現文件批量處理

在 C# 中,開發文件批量處理工具通常需要借助System.IO命名空間下的一系列類。這些類提供了豐富的文件和目錄操作方法,但在使用過程中,需要注意很多細節,比如異常處理、權限控制等。

除了前面提到的批量重命名功能,我們再來看一個 C# 實現文件批量壓縮的例子。這個例子使用了System.IO.Compression命名空間下的ZipFile類:

 
using System;
using System.IO;
using System.IO.Compression;class FileCompressor
{static void Main(string[] args){string sourceDir = @"C:\files_to_compress";string zipPath = @"C:\compressed_files\archive.zip";try{// 檢查源目錄是否存在if (!Directory.Exists(sourceDir)){Console.WriteLine("源目錄不存在!");return;}// 創建壓縮文件目錄Directory.CreateDirectory(Path.GetDirectoryName(zipPath));// 壓縮文件ZipFile.CreateFromDirectory(sourceDir, zipPath, CompressionLevel.Optimal, true);Console.WriteLine("文件壓縮完成!");}catch (UnauthorizedAccessException ex){Console.WriteLine($"權限不足:{ex.Message}");}catch (IOException ex){Console.WriteLine($"IO錯誤:{ex.Message}");}catch (Exception ex){Console.WriteLine($"發生錯誤:{ex.Message}");}}
}

從這段代碼可以看出,C# 在處理文件操作時,對異常的處理非常嚴格,這雖然增加了代碼的安全性,但也使得代碼變得相對冗長。

1.2 Python 命令行工具實現文件批量處理

Python 在文件處理方面的庫更加豐富和簡潔,os、shutil、glob以及zipfile等庫的組合使用,能夠讓我們用更少的代碼實現更強大的功能。

除了批量重命名和按格式分類文件,我們來實現一個 Python 批量壓縮文件的功能:

import os
import zipfiledef batch_compress_files(source_dir, zip_path):# 檢查源目錄是否存在if not os.path.isdir(source_dir):print("源目錄不存在!")return# 創建壓縮文件目錄os.makedirs(os.path.dirname(zip_path), exist_ok=True)try:with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:# 遍歷源目錄下的所有文件和子目錄for root, dirs, files in os.walk(source_dir):for file in files:file_path = os.path.join(root, file)# 計算相對路徑,保持壓縮包內的目錄結構relative_path = os.path.relpath(file_path, source_dir)zipf.write(file_path, relative_path)print(f"文件已成功壓縮到 {zip_path}")except Exception as e:print(f"壓縮文件時發生錯誤:{e}")if __name__ == "__main__":source_dir = r"C:\files_to_compress"zip_path = r"C:\compressed_files\archive.zip"batch_compress_files(source_dir, zip_path)

這段代碼實現了與 C# 示例相同的功能,但代碼量明顯減少。而且,Python 的zipfile庫提供了更直觀的 API,使得壓縮文件的操作變得非常簡單。

1.3 兩者對比分析

從代碼復雜度來看,Python 的代碼更加簡潔明了,省去了很多 C# 中必須的語法結構和異常處理代碼。這使得開發者能夠更專注于業務邏輯的實現,而不是語言本身的細節。

在開發效率方面,Python 的優勢更加明顯。豐富的第三方庫讓我們能夠快速實現各種功能,不需要從零開始編寫代碼。而且,Python 的交互式解釋器也方便我們進行代碼調試和測試。

在功能拓展性上,C# 和 Python 各有優勢。C# 作為一種強類型語言,在大型項目中具有更好的可維護性和可擴展性。而 Python 的動態類型特性則使得它在快速原型開發和功能迭代方面更加靈活。

二、Web 應用開發:Flask 搭建博客系統

Web 應用開發是當前軟件開發的一個重要領域。C# 的ASP.NET框架是一個功能強大的 Web 開發框架,而 Python 的 Flask 框架則以其輕量級和靈活性受到很多開發者的青睞。下面我們就來看看如何使用 Flask 快速搭建一個博客系統。

2.1 Flask 框架簡介

Flask 是一個基于 Werkzeug 和 Jinja2 的輕量級 Web 應用框架。它的設計理念是 “微框架”,即只提供 Web 開發的核心功能,而將其他功能交給第三方擴展。這種設計使得 Flask 非常靈活,開發者可以根據自己的需求選擇合適的擴展,構建出滿足特定需求的 Web 應用。

與ASP.NET相比,Flask 更加輕量級,學習曲線也更平緩。對于小型項目和快速原型開發來說,Flask 是一個非常不錯的選擇。

2.2 搭建步驟詳解

1.環境搭建與項目初始化

安裝 Flask 及相關依賴:

pip install flask flask-sqlalchemy flask-login flask-wtf

項目目錄結構可以進一步細化:

blog_system/
├── app/
│   ├── __init__.py      # 應用初始化
│   ├── models.py        # 數據模型
│   ├── routes.py        # 路由和視圖函數
│   ├── forms.py         # 表單處理
│   ├── templates/       # 前端模板
│   │   ├── base.html    # 基礎模板
│   │   ├── index.html   # 首頁
│   │   ├── post.html    # 文章詳情頁
│   │   ├── login.html   # 登錄頁
│   │   └── register.html # 注冊頁
│   └── static/          # 靜態資源
│       ├── css/         # 樣式表
│       └── js/          # JavaScript文件
├── config.py            # 配置文件
└── run.py               # 應用啟動入口

2.配置文件(config.py

import osclass Config:SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard-to-guess-string'SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///blog.db'SQLALCHEMY_TRACK_MODIFICATIONS = False

3.應用初始化(app/init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import Configdb = SQLAlchemy()
login_manager = LoginManager()
login_manager.login_view = 'login'def create_app(config_class=Config):app = Flask(__name__)app.config.from_object(config_class)db.init_app(app)login_manager.init_app(app)from app.routes import bp as main_bpapp.register_blueprint(main_bp)return app

4.數據模型設計(app/models.py

除了前面提到的用戶表和文章表,我們再增加一個評論表,使博客系統的功能更加完善:

from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin
from app import db, login_managerclass User(UserMixin, db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(50), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)password_hash = db.Column(db.String(128), nullable=False)posts = db.relationship('Post', backref='author', lazy='dynamic')comments = db.relationship('Comment', backref='author', lazy='dynamic')def set_password(self, password):self.password_hash = generate_password_hash(password)def check_password(self, password):return check_password_hash(self.password_hash, password)class Post(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)created_at = db.Column(db.DateTime, default=datetime.utcnow)updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)comments = db.relationship('Comment', backref='post', lazy='dynamic', cascade='all, delete-orphan')class Comment(db.Model):id = db.Column(db.Integer, primary_key=True)content = db.Column(db.Text, nullable=False)created_at = db.Column(db.DateTime, default=datetime.utcnow)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))

5.表單處理(app/forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, TextAreaField, SubmitField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from app.models import Userclass LoginForm(FlaskForm):username = StringField('用戶名', validators=[DataRequired()])password = PasswordField('密碼', validators=[DataRequired()])submit = SubmitField('登錄')class RegistrationForm(FlaskForm):username = StringField('用戶名', validators=[DataRequired(), Length(min=4, max=50)])email = StringField('郵箱', validators=[DataRequired(), Email()])password = PasswordField('密碼', validators=[DataRequired()])password2 = PasswordField('確認密碼', validators=[DataRequired(), EqualTo('password')])submit = SubmitField('注冊')def validate_username(self, username):user = User.query.filter_by(username=username.data).first()if user is not None:raise ValidationError('請使用其他用戶名')def validate_email(self, email):user = User.query.filter_by(email=email.data).first()if user is not None:raise ValidationError('請使用其他郵箱地址')class PostForm(FlaskForm):title = StringField('標題', validators=[DataRequired(), Length(max=100)])content = TextAreaField('內容', validators=[DataRequired()])submit = SubmitField('發布')class CommentForm(FlaskForm):content = TextAreaField('評論', validators=[DataRequired()])submit = SubmitField('提交評論')

6.路由與視圖函數(app/routes.py

from flask import Blueprint, render_template, redirect, url_for, flash, request
from flask_login import login_user, logout_user, login_required, current_user
from app import db
from app.models import User, Post, Comment
from app.forms import LoginForm, RegistrationForm, PostForm, CommentFormbp = Blueprint('main', __name__)@bp.route('/')
def index():posts = Post.query.order_by(Post.created_at.desc()).all()return render_template('index.html', posts=posts)@bp.route('/login', methods=['GET', 'POST'])
def login():if current_user.is_authenticated:return redirect(url_for('main.index'))form = LoginForm()if form.validate_on_submit():user = User.query.filter_by(username=form.username.data).first()if user is None or not user.check_password(form.password.data):flash('用戶名或密碼不正確')return redirect(url_for('main.login'))login_user(user)next_page = request.args.get('next')if not next_page or url_parse(next_page).netloc != '':next_page = url_for('main.index')return redirect(next_page)return render_template('login.html', form=form)@bp.route('/logout')
def logout():logout_user()return redirect(url_for('main.index'))@bp.route('/register', methods=['GET', 'POST'])
def register():if current_user.is_authenticated:return redirect(url_for('main.index'))form = RegistrationForm()if form.validate_on_submit():user = User(username=form.username.data, email=form.email.data)user.set_password(form.password.data)db.session.add(user)db.session.commit()flash('恭喜,您已成功注冊!')return redirect(url_for('main.login'))return render_template('register.html', form=form)@bp.route('/post/new', methods=['GET', 'POST'])
@login_required
def new_post():form = PostForm()if form.validate_on_submit():post = Post(title=form.title.data, content=form.content.data, author=current_user)db.session.add(post)db.session.commit()flash('您的文章已發布!')return redirect(url_for('main.index'))return render_template('edit_post.html', form=form, title='發布文章')@bp.route('/post/<int:post_id>')
def post(post_id):post = Post.query.get_or_404(post_id)form = CommentForm()return render_template('post.html', post=post, form=form)@bp.route('/post/<int:post_id>/comment', methods=['POST'])
@login_required
def add_comment(post_id):post = Post.query.get_or_404(post_id)form = CommentForm()if form.validate_on_submit():comment = Comment(content=form.content.data, author=current_user, post=post)db.session.add(comment)db.session.commit()flash('您的評論已提交!')return redirect(url_for('main.post', post_id=post.id))return render_template('post.html', post=post, form=form)

7.應用啟動入口(run.py

from app import create_app, db
from app.models import User, Post, Commentapp = create_app()@app.shell_context_processor
def make_shell_context():return {'db': db, 'User': User, 'Post': Post, 'Comment': Comment}if __name__ == '__main__':app.run(debug=True)

8.模板示例(app/templates/base.html)

 
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>{% block title %}簡易博客{% endblock %}</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
</head>
<body><nav class="navbar navbar-expand-lg navbar-dark bg-dark"><div class="container"><a class="navbar-brand" href="{{ url_for('main.index') }}">簡易博客</a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNav"><ul class="navbar-nav me-auto"><li class="nav-item"><a class="nav-link" href="{{ url_for('main.index') }}">首頁</a></li></ul><ul class="navbar-nav">{% if current_user.is_anonymous %}<li class="nav-item"><a class="nav-link" href="{{ url_for('main.login') }}">登錄</a></li><li class="nav-item"><a class="nav-link" href="{{ url_for('main.register') }}">注冊</a></li>{% else %}<li class="nav-item"><a class="nav-link" href="{{ url_for('main.new_post') }}">發布文章</a></li><li class="nav-item"><a class="nav-link" href="{{ url_for('main.logout') }}">退出</a></li>{% endif %}</ul></div></div></nav><div class="container mt-4">{% with messages = get_flashed_messages() %}{% if messages %}{% for message in messages %}<div class="alert alert-info" role="alert">{{ message }}</div>{% endfor %}{% endif %}{% endwith %}{% block content %}{% endblock %}</div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

三、數據處理腳本:Excel/CSV 分析與可視化

在數據處理領域,Python 憑借其豐富的數據處理庫和強大的可視化工具,成為了很多數據分析師和科學家的首選語言。下面我們就來深入學習如何使用pandas、matplotlib和seaborn進行 Excel/CSV 數據分析與可視化。

3.1 數據讀取與預處理

除了前面介紹的基本數據讀取和預處理操作,我們再來看一些更復雜的數據清洗技巧。

假設我們有一個銷售數據的 Excel 文件,其中包含了客戶信息、產品信息、銷售數量、銷售金額等字段。但這個文件中存在一些數據質量問題,比如缺失值、重復數據、異常值等。

 
import pandas as pd
import numpy as np# 讀取Excel文件
df = pd.read_excel("sales_data.xlsx")# 查看數據基本信息
print("數據基本信息:")
print(df.info())
print("\n數據統計描述:")
print(df.describe())# 處理缺失值
# 對于數值型字段,使用中位數填充
numeric_cols = df.select_dtypes(include=[np.number]).columns
df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].median())# 對于字符型字段,使用眾數填充
object_cols = df.select_dtypes(include=['object']).columns
for col in object_cols:df[col] = df[col].fillna(df[col].mode()[0])# 處理重復數據
df = df.drop_duplicates()# 處理異常值
# 使用箱線圖法檢測數值型字段的異常值
for col in numeric_cols:q1 = df[col].quantile(0.25)q3 = df[col].quantile(0.75)iqr = q3 - q1lower_bound = q1 - 1.5 * iqrupper_bound = q3 + 1.5 * iqr# 將異常值替換為邊界值df[col] = df[col].clip(lower_bound, upper_bound)# 數據轉換
# 將日期字段轉換為 datetime 類型
df['日期'] = pd.to_datetime(df['日期'])# 提取年份、月份和季度信息
df['年份'] = df['日期'].dt.year
df['月份'] = df['日期'].dt.month
df['季度'] = df['日期'].dt.quarter# 增加銷售金額字段(如果不存在)
if '銷售金額' not in df.columns:df['銷售金額'] = df['銷售數量'] * df['單價']print("\n數據預處理完成后:")
print(df.info())

3.2 數據可視化進階

除了前面介紹的月度銷售額趨勢圖,我們再來看幾個常用的數據可視化圖表。

1.產品銷售數量對比圖

import matplotlib.pyplot as plt
import seaborn as sns# 設置中文顯示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]# 產品銷售數量對比
product_sales = df.groupby('產品名稱')['銷售數量'].sum().sort_values(ascending=False)plt.figure(figsize=(12, 6))
sns.barplot(x=product_sales.index, y=product_sales.values)
plt.title('各產品銷售數量對比')
plt.xlabel('產品名稱')
plt.ylabel('銷售數量')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

2.不同地區銷售金額占比圖

# 不同地區銷售金額占比
region_sales = df.groupby('地區')['銷售金額'].sum()plt.figure(figsize=(8, 8))
plt.pie(region_sales.values, labels=region_sales.index, autopct='%1.1f%%', startangle=90)
plt.title('不同地區銷售金額占比')
plt.axis('equal')
plt.show()

3.銷售數量與銷售金額的相關性分析

 
# 銷售數量與銷售金額的相關性分析
plt.figure(figsize=(10, 6))
sns.scatterplot(x='銷售數量', y='銷售金額', data=df, hue='產品類別')
plt.title('銷售數量與銷售金額的相關性')
plt.xlabel('銷售數量')
plt.ylabel('銷售金額')
plt.show()# 計算相關系數
correlation = df['銷售數量'].corr(df['銷售金額'])
print(f"銷售數量與銷售金額的相關系數:{correlation:.2f}")

5.季度銷售趨勢圖

# 季度銷售趨勢
quarterly_sales = df.groupby(['年份', '季度'])['銷售金額'].sum().unstack()plt.figure(figsize=(12, 6))
quarterly_sales.plot(kind='line', marker='o')
plt.title('季度銷售趨勢')
plt.xlabel('年份')
plt.ylabel('銷售金額(元)')
plt.legend(title='季度')
plt.grid(True)
plt.show()

四、總結與對比

通過今天的三個實戰項目,我們可以清楚地看到 C# 和 Python 在不同領域的特點和優勢。

在命令行工具開發方面,C# 的優勢在于其強大的類型安全和豐富的類庫,適合開發大型、復雜的命令行工具。而 Python 則以其簡潔的語法和豐富的第三方庫,在開發小型、快速的命令行工具時表現出色。

在 Web 應用開發方面,C# 的ASP.NET框架提供了完整的 Web 開發解決方案,適合開發企業級的大型 Web 應用。而 Flask 作為一個輕量級的 Web 框架,更加靈活,適合快速開發小型 Web 應用和 API。

在數據處理方面,Python 的優勢更加明顯。pandas、matplotlib和seaborn等庫提供了強大的數據處理和可視化功能,使得數據分析工作變得簡單而高效。而 C# 在數據處理方面雖然也有一些庫可以使用,但相對來說不如 Python 那么便捷和強大。

當然,這并不意味著 C# 在這些領域就一無是處。實際上,C# 和 Python 各有其適用的場景。在選擇編程語言時,我們應該根據項目的需求、團隊的技術棧以及項目的長期發展等因素進行綜合考慮。

在接下來的學習中,我們將繼續深入探討 C# 和 Python 在其他領域的應用,進一步豐富我們的知識儲備。希望通過這些學習,能夠幫助大家在實際項目中選擇合適的編程語言,提高開發效率和項目質量。

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

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

相關文章

rabbitmq 03

一、mq的作用和使用場景 MQ的基本作用 MQ&#xff08;Message Queue&#xff0c;消息隊列&#xff09;是一種應用程序對應用程序的通信方法&#xff0c;主要作用包括&#xff1a; 異步處理&#xff1a;解耦生產者和消費者&#xff0c;允許生產者發送消息后立即返回&#xff0…

Ubuntu 24.04 顯示中文+使用中文鍵盤

ubuntu 24.04 中文顯示中文鍵盤Ubuntu中文輸入重啟iBus服務Ubuntu中文輸入 安裝的Ubuntu24.04&#xff0c;一般默認是英文的&#xff0c;要使用中文的話&#xff0c;可以通過命令行設置&#xff0c;也可以使用‘設置’&#xff0c;在圖形化界面中操作。 下面是在‘設置’的圖形…

Docker實戰:Tomcat容器從部署到自定義網頁的完整操作

Docker實戰&#xff1a;Tomcat容器從部署到自定義網頁的完整操作 繼Nginx容器部署后&#xff0c;我們再來實操Tomcat容器的使用——從拉取鏡像、啟動容器&#xff0c;到端口映射、網頁掛載&#xff0c;全程通過實際命令演示&#xff0c;帶你掌握Tomcat在Docker中的核心用法。 一…

使用cherry studio離線搭建私人知識庫流程記錄

本篇文章記錄近期嘗試在個人筆記本上、全離線狀態下搭建知識庫的流程。用到的工具包括&#xff1a;Cherry Studio、ollama。主要過程是&#xff1a;首先下載ollama用于管理大模型&#xff1b;然后&#xff0c;從魔塔社區下載需要的deepseek、千問大模型和bge-m3嵌入模型&#x…

【工具類】Linux 環境利用 uv 安裝多版本 python

文章目錄前置工作環境說明如果kali無法訪問網絡pypi 換源安裝 uvuv 寫入環境變量臨時寫入永久寫入無法打開 github 解決方案&#xff08;注意此方法可能也會失效&#xff09;安裝多版本 python查看已安裝的pythonuv python install到 uv 的 github 主頁&#xff0c;找安裝文件下…

求職招聘小程序源碼招聘小程序開發定制

身份&#xff1a;求職者、企業求職者&#xff1a;完善簡歷&#xff0c;簡歷投遞企業&#xff1a;企業入駐&#xff0c;查看簡歷企業會員&#xff1a;半年 、年度 權益&#xff1a;每日發布條數、刷新條數&#xff0c;簡歷下載數量聊天&#xff1a;求職者可以和企業聊天招聘會…

Git 使用全指南:從配置到免密登錄

Git 使用全指南&#xff1a;從配置到免密登錄一、Git 基礎配置二、Git 代碼提交流程2.1 克隆遠程倉庫2.2 創建并切換分支2.3 暫存文件2.4 提交到本地倉庫2.5 拉取遠程最新代碼2.6 推送本地分支到遠程三、VSCode 服務器免密登錄配置3.1 生成 Windows SSH 密鑰3.2 復制公鑰到服務…

組合期權:領式策略

文章目錄0.簡介1.多頭領式策略&#xff08;Long Collar&#xff09;?1.1 策略構成1.2 適用場景?1.3 損益分析1.4 案例示范2.空頭領式策略&#xff08;Short Collar&#xff09;?2.1 策略構成2.2 適用場景2.3 損益分析2.4 案例示范參考文獻0.簡介 領式策略&#xff08;Colla…

ECSPI控制器

目錄 SPI協議簡介 極性與相位 SPI框圖 單字節收發 發送數據流程 接收數據流程 ECSPI控制器 關鍵特性 時鐘源 主機模式 等待狀態 片選控制 單突發傳輸 多突發傳輸 相位控制 ECSPI Memory Map ECSPI寄存器 ECSPIx_RXDATA ECSPIx_TXDATA ?編輯 ECSPIx_CONREG …

HTTP 與 SpringBoot 參數提交與接收協議方式

HTTP 協議支持多種參數提交方式&#xff0c;主要取決于請求方法(Method)和內容類型(Content-Type)。以下是主要的參數提交協議&#xff1a;1. URL 查詢參數 (Query Parameters)請求方法: GET (也可用于其他方法)格式: ?key1value1&key2value2示例: GET /users?id123&…

Lua(數組)

Lua 數組基礎概念Lua 中的數組實際上是用整數索引的 table&#xff0c;是一種特殊形式的表。數組索引通常從 1 開始&#xff08;Lua 慣例&#xff09;&#xff0c;但也可以從其他值開始。創建數組通過表構造器初始化數組&#xff1a;-- 索引從 1 開始的數組 local arr {10, …

【Docker項目實戰】在Docker環境下部署go-file文件分享工具

【Docker項目實戰】在Docker環境下部署go-file文件分享工具一、go-file介紹1.1 go-file簡介1.2 go-file特點1.3 go-file使用場景二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下…

C++基礎學習——文件操作詳解

一、文件流類概述 C 標準庫提供了三個主要的文件流類&#xff1a; ifstream (輸入文件流)&#xff1a;用于從文件讀取數據ofstream (輸出文件流)&#xff1a;用于向文件寫入數據fstream (文件流)&#xff1a;既可讀又可寫 這些類都繼承自 iostream 類&#xff0c;因此可以使用 …

Android補全計劃 DrawerLayout使用

DrawerLayout其實用了很久了&#xff0c;甚至封裝了一些代碼方便不同項目使用&#xff0c;但重構代碼的時候突然意識到這塊內容很不成體系&#xff0c;因此又參考了些文檔&#xff0c;組建了自己的一個文檔。 toolbardrawerlayout能寫的效果很多&#xff0c;在此我也只是截取了…

人工智能之數學基礎:概率論之韋恩圖的應用

韋恩圖的應用由于事件的計算有時候太過于抽象了&#xff0c;此時我們可以使用韋恩圖的方式來進行驗證&#xff0c;我們下面來舉一個例子&#xff0c;A∪B&#xff09;-CA∪(B-C)是否成立&#xff1f;我們可以通過韋恩圖來完成這個任務&#xff1a;我們通過這種方式來一點一點的…

小白成長之路-部署Zabbix7(二)

文章目錄一、zabbix-自動發現二、自動注冊三、zabbix-網易云郵箱-發送消息二、zabbix-釘釘告警總結一、zabbix-自動發現 1.在準備兩臺虛擬機&#xff0c;我的是192.168.144.12,192.168.144.13 server換成zabbix服務器的ip地址 vim /etc/zabbix/zabbix_agentd.conf 2.創建自動…

CMU15445-2024fall-project4踩坑經歷

project4目錄Task1Task2ReconstructSeqScanTask3InsertCommitTxnMgrDbgGenerateNewUndoLog And GenerateUpdateUndoLogUpdate And Delete垃圾回收Task4Index Insert并發控制Index ScanDelete、Update并發控制主鍵更新Bonus 1Bonus 2處理寫傾斜感謝CMU的教授們給我們分享了如此精…

C++20 協程

摘要&#xff1a;C20 引入的協程機制為異步編程提供了輕量級解決方案&#xff0c;其核心優勢在于通過用戶態調度實現高效的上下文切換&#xff0c;適用于 I/O 密集型任務、生成器模式等場景。本文系統闡述 C20 協程的底層原理與實踐要點&#xff0c;首先解析協程的基本結構&…

《計算機組成原理與匯編語言程序設計》實驗報告二 基本數字邏輯及漢字顯示

目 錄 一、實驗學時 二、實驗目的 三、實驗要求 四、實驗內容 五、實驗步驟 1、打開Logisim軟件&#xff0c;列出并行四位二進制全加器邏輯電路真值表&#xff0c;并使用與、或、非、異或等基本原件實現并行四位二進制全加器邏輯電路&#xff0c;鋪設完成后進行測試進而…

問卷調查小程序的設計與實現

問卷調查小程序的設計與實現&#xff1a;技術與功能全解析在數字化時代&#xff0c;問卷調查成為數據收集的重要工具。一款高效、易用的問卷調查小程序能夠顯著提升用戶體驗和數據質量。本文將深入探討基于現代技術棧的問卷調查小程序的設計與實現&#xff0c;涵蓋核心功能、技…