2024-08-27

Python 3.9 引入了一个新的模块 statistics,它提供了一些计算统计数据的函数。这个模块中的函数可以处理列表中的数据,提供了基本的统计计算功能,如计算平均值、中位数、方差和标准差等。

以下是一些使用 statistics 模块的常见方法:

  1. 计算平均值:statistics.mean(data)
  2. 计算中位数:statistics.median(data)
  3. 计算方差:statistics.variance(data)
  4. 计算标准差:statistics.stdev(data)
  5. 计算极差:statistics.pstdev(data)(即标准差的倍数,常用于与平均值进行对比)
  6. 计算总和:statistics.sum(data)

示例代码:




import statistics
 
# 示例数据
data = [1, 2, 3, 4, 5]
 
# 计算平均值
average = statistics.mean(data)
print(f"平均值: {average}")
 
# 计算中位数
median = statistics.median(data)
print(f"中位数: {median}")
 
# 计算方差
variance = statistics.variance(data)
print(f"方差: {variance}")
 
# 计算标准差
std_dev = statistics.stdev(data)
print(f"标准差: {std_dev}")
 
# 计算总和
total = statistics.sum(data)
print(f"总和: {total}")

输出:




平均值: 3.0
中位数: 3.0
方差: 2.5
标准差: 1.5
总和: 15

请注意,statistics 模块中的函数只能处理可迭代的数值序列,并且序列中的元素必须是数值类型(int 或 float)。如果传入非数值类型或空序列,将会引发 TypeErrorValueError

2024-08-27

在Python 3中,urllib.request模块被用来打开和读取URLs,它是Python标准库的一部分。以下是一个使用urllib.request模块来获取网络资源的简单例子:




import urllib.request
 
# 打开一个网络资源
response = urllib.request.urlopen('http://www.example.com/')
 
# 读取网络资源的内容
html = response.read()
 
# 将读取的内容转换为字符串
html_str = html.decode('utf-8')
 
print(html_str)

这段代码会打开指定的URL,读取其内容,并把内容解码为UTF-8编码的字符串,然后打印出来。这是一个非常基础的使用urllib.request的例子,它适用于简单的网络请求。如果你需要更高级的功能,比如发送数据、处理cookies、处理HTTPS等,你可能需要使用其他的库,如requests

2024-08-27



import requests
from bs4 import BeautifulSoup
import pandas as pd
 
# 设置请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
 
def get_html(url):
    """发送请求,获取网页内容"""
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    return None
 
def parse_html(html):
    """解析网页,提取数据"""
    soup = BeautifulSoup(html, 'lxml')
    ranks = soup.find_all(class_='num')
    songs = soup.find_all(class_='song-name')
    artists = soup.find_all(class_='singer-name')
    
    data = {
        '排名': [rank.get_text() for rank in ranks],
        '歌名': [song.get_text() for song in songs],
        '艺人': [artist.get_text() for artist in artists]
    }
    return data
 
def save_data(data, filename):
    """保存数据到CSV文件"""
    df = pd.DataFrame(data)
    df.to_csv(filename + '.csv', index=False, encoding='utf-8-sig')
 
def main():
    """主函数,控制流程"""
    url = 'https://music.163.com/#/discover/toplist?id=3778678'
    html = get_html(url)
    data = parse_html(html)
    save_data(data, '云音乐热歌榜')
 
if __name__ == '__main__':
    main()

这段代码实现了获取某云音乐热歌榜的信息,提取了歌名、艺人和排名,并将其保存到CSV文件中。代码使用了requests库来发送HTTP请求,使用BeautifulSoup库来解析网页,使用pandas库来保存数据。同时,代码中加入了请求头来模拟浏览器访问,以避免被反爬机制阻止。

2024-08-27

Django是一个开放源代码的Web应用框架,由Python写成。它适用于快速开发,遵循MVC设计。Django适用于构建大型及复杂的Web站点。

应用场景:

  1. 新闻网站
  2. 博客
  3. 交互式API
  4. 前端或后端服务
  5. 数据项目(如数据接口API,数据分析工具)

主要优势:

  1. 快速开发:Django提供了许多额外的服务,比如模型-视图-控制器(MVC)架构,ORM,以及管理后台。
  2. 安全性:Django提供了许多安全的特性,比如CSRF(跨站请求伪造)保护,XSS保护等。
  3. 可扩展性:Django提供了丰富的扩展点和可插拔的应用模块。
  4. 社区支持:Django拥有一个庞大的社区,有大量的第三方应用和插件可供选择。

主要劣势:

  1. 复杂性:Django对于新手来说可能会非常复杂,需要一定时间来理解。
  2. 性能问题:Django自带的数据库访问API是相对较慢的,尤其是在高性能要求的场景下。
  3. 不适合大型网站:如果你需要建立一个需要高并发的大型网站,Django可能不是最佳选择。

解决以上问题需要结合具体场景,比如通过使用中间件、缓存、数据库优化等手段来提高性能,或者采用Django的分布式部署方案。

2024-08-27

在Python中,你可以使用内置的 subprocess 模块来运行命令行指令,并捕获其输出。以下是一个简单的例子,展示了如何使用 subprocess 模块来执行命令行指令并获取输出:




import subprocess
 
# 执行命令行指令
def run_command(cmd):
    # 使用 subprocess.run 来运行命令,并捕获输出
    result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    # 返回命令的输出和错误信息
    return result.stdout, result.stderr
 
# 示例使用
if __name__ == "__main__":
    command = "echo 'Hello, World!'"  # 你可以替换为任何你想执行的命令
    output, error = run_command(command)
    if error:
        print("Error:", error)
    else:
        print("Output:", output)

在这个例子中,run_command 函数接受一个命令行字符串 cmd 并使用 subprocess.run 来执行它。shell=True 允许我们直接运行一条命令,而不需要将其拆分为单独的程序和参数。stdout=subprocess.PIPEstderr=subprocess.PIPE 表示我们想要捕获程序的标准输出和标准错误。universal_newlines=True 使得我们可以在程序中使用换行符来处理输出。

请注意,使用 shell=True 可能会引入安全风险,特别是当处理来自不可信源的输入时。因此,在生产环境中,应该尽量避免使用 shell=True,并且直接传递程序和参数给 subprocess.run 或者 subprocess.Popen

2024-08-27

在Python的Masonite框架中,辅助方法(Helper)是一种可以在视图中使用的函数集合。以下是创建和使用辅助方法的步骤:

  1. 创建辅助方法文件:在你的应用的helpers.py文件中定义你的辅助函数。这个文件通常位于app/helpers.py



# 示例: app/helpers.py
def greet(name):
    return f"Hello, {name}!"
  1. 注册辅助方法:在start/routes.py文件中导入并注册辅助方法。



# 示例: start/routes.py
from app.helpers import *
 
def map_web_routes(route):
    # ...
    # 注册辅助方法
    route.helper(greet)
  1. 在视图中使用辅助方法:在你的Blade模板中,你可以直接调用已注册的辅助方法。



<!-- 示例: resources/views/home.blade.py -->
<html>
<head>
    <title>Home Page</title>
</head>
<body>
    <!-- 使用辅助方法 -->
    <p>{{ greet('World') }}</p>
</body>
</html>

确保你的辅助方法定义是可以在模板中直接调用的,因为Masonite会在模板渲染时将它们作为上下文可用。

以上步骤展示了如何在Masonite框架中创建和使用辅助方法。这是一种简化视图中的复杂逻辑和提高代码可读性的方法。

2024-08-27

Python3 运行时服务通常指的是在 Python 程序运行时提供某种功能或者管理运行环境的服务。例如,Python 程序可能需要一个网络服务器来接收和处理网络请求,或者需要定时任务调度服务来周期性执行某些任务。

以下是一个使用 asyncio 创建的简单的异步网络服务器示例,这是 Python 标准库中的异步 I/O 框架:




import asyncio
 
async def handle_echo(reader, writer):
    data = await reader.read(1024)
    message = data.decode('utf-8')
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")
 
    print(f"Sending data back to {addr}")
    writer.write(data)
    await writer.drain()
    print(f"Sent data successfully to {addr}")
 
    print(f"Closing the connection to {addr}")
    writer.close()
 
async def main():
    server = await asyncio.start_server(handle_echo, '127.0.0.1', 8001)
    async with server:
        await server.serve_forever()
 
asyncio.run(main())

这段代码创建了一个简单的服务器,监听本地主机的 8001 端口,并将接收到的消息回传给发送者。这就是一个运行时服务的例子,它提供了在 Python 程序运行时接收和处理网络请求的功能。

2024-08-27



from datetime import datetime
import calendar
 
# 获取当前日期
today = datetime.today()
year = today.year
month = today.month
 
# 获取当前月份的日历
cal = calendar.month(year, month)
print("当前月份的日历:\n" + cal)
 
# 获取指定月份的日历
month = 10  # 例如十月
cal = calendar.month(year, month)
print(f"{year}年{month}月的日历:\n" + cal)
 
# 获取某一天是星期几
day = datetime(year, month, 15)
day_name = calendar.day_name[day.weekday()]
print(f"{year}-{month}-15 是 {day_name}")
 
# 获取某年是否为闰年
year = 2020
leap_year = calendar.isleap(year)
print(f"{year} {'' if leap_year else '不'}是闰年")

这段代码展示了如何使用Python的calendar模块来完成一些常见的日期操作,包括获取当前月份的日历、指定月份的日历,以及判断某一天是星期几和某年是否为闰年。

2024-08-27

Python3 的 mailbox 模块提供了处理邮件约定文件的工具,这些文件遵循 RFC 2821 和相关 RFC 规范。以下是一个使用 mailbox 模块来读取邮件约定文件的例子:




import mailbox
 
# 打开邮件约定文件
mbox = mailbox.mbox('path_to_email_file.mbox')
 
# 遍历邮件
for msg in mbox:
    # 打印每封邮件的主题
    print(msg['Subject'])
 
# 关闭邮件文件
mbox.close()

这段代码演示了如何打开一个邮件约定文件,遍历其中的邮件,并打印出每封邮件的主题。mailbox.mbox 函数用于打开指定路径的邮件文件。如果你的邮件文件是以其他格式存储,例如 mailbox.babylmailbox.mbox2,你可以使用相应的类来打开和处理这些文件。

2024-08-27

在Python中,一个模块是一个Python文件,包含可以由其他Python文件执行的代码。一个模块可以导入另一个模块,以使用它定义的函数或变量。

例如,创建一个名为mymodule.py的文件,并在其中编写以下代码:




# mymodule.py
def greet(name):
    print(f"Hello, {name}!")

然后,在另一个Python文件中,可以导入并使用这个模块:




# main.py
import mymodule
 
mymodule.greet("Alice")  # 输出: Hello, Alice!

对于大型应用程序,可能需要将功能分解为更小的模块或包。包是一个目录,包含__init__.py文件以及其他模块文件。导入包时,__init__.py文件会被执行。

例如,创建一个名为mypackage的目录,然后在该目录中创建__init__.py和另一个名为utils.py的文件。在__init__.py中,可以定义包的初始化行为;在utils.py中,可以定义一些工具函数。

__init__.py可以为空,也可以定义默认导出的对象。




# mypackage/__init__.py
__version__ = "1.0"
 
# mypackage/utils.py
def add(a, b):
    return a + b

然后,可以在另一个Python文件中导入并使用这个包:




# main.py
from mypackage import utils
 
result = utils.add(5, 3)
print(result)  # 输出: 8

或者导入整个包并访问其版本属性:




# main.py
import mypackage
 
print(mypackage.__version__)  # 输出: 1.0

这就是如何在Python中创建和使用模块和包的简单示例。