Python: 学习 Python

全面的 Python 指南

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 Python 云 解决方案,具有众多优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受 自动备份一键更新,以及简单、透明和可预测的定价,让您高枕无忧。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 Python 云托管 解决方案!

本指南概述了 Python 的基本概念和语法。它既是经验丰富的开发人员的快速复习,也是初学者的友好介绍。涵盖从基本数据类型到高级功能的所有内容,这份速查表包括控制流、函数、类、对象和常用模块等主题。在进行 Python 项目时,请随时将其作为快速参考。请记住,Python 拥有庞大的库和框架生态系统,因此探索其他资源和文档将帮助您深入研究专业主题。

祝编码愉快!

Python 是一种由 Guido van Rossum 创建并于 1991 年首次发布的多功能高级编程语言。它因其可读性和简单性而广受欢迎,是初学者和经验丰富的开发人员的绝佳选择。Python 广泛用于 Web 开发、数据分析、人工智能、机器学习和自动化等多个领域。

Python 的一些常见用例包括使用 Django 或 Flask 等框架构建 Web 应用程序,使用 pandas 和 matplotlib 等库进行数据分析和可视化,以及使用 TensorFlow 和 scikit-learn 等工具开发机器学习模型。

Python 的广泛标准库和繁荣的第三方包生态系统使其成为解决广泛编程任务的强大而灵活的语言。

Python 的基本数据类型包括整数(整数)、浮点数(带小数的数字)、布尔值(真/假值)和字符串(字符序列):

  • int:整数,例如 42
  • float:浮点数,例如 3.14
  • bool:布尔值,例如 TrueFalse
  • str:字符串,例如 "hello"

示例:

integer = 42
floating_point = 3.14
boolean = True
string = "Hello, World!"

Python 提供了多种数据结构来帮助您有效地组织、存储和操作数据。最常用的是列表、元组、字典和集合。列表和元组维护元素的有序序列,字典存储键值对,集合存储唯一元素。每种结构都有一系列针对特定用例的方法。

  • 列表:my_list = [1, 2, 3, 4]
  • 元组:my_tuple = (1, 2, 3, 4)
  • 字典:my_dictionary = {'key1': 'value1', 'key2': 'value2'}
  • 集合:my_set = {1, 2, 3, 4}

列表是可变的、有序的元素集合。它们允许重复,并且可以包含各种数据类型的元素,包括其他列表、元组、字典或集合。您可以轻松添加、更新和删除元素。列表在方括号 [] 中定义,元素之间用逗号分隔。

关于列表的关键点:

  1. 可变且有序
  2. 允许重复元素
  3. 保持添加元素的顺序
  4. 支持多种数据类型
  5. 提供添加、更新和删除元素的操作

当您需要动态且可调整大小的项目集合时,列表通常会被使用。

示例:

# 创建一个列表
my_list = [1, 2, 3, 4, 5]

# 访问元素
print(my_list[0])  # 输出:1
print(my_list[-1])  # 输出:5

# 添加元素
my_list.append(6)
print(my_list)  # 输出:[1, 2, 3, 4, 5, 6]

# 更新元素
my_list[0] = 0
print(my_list)  # 输出:[0, 2, 3, 4, 5, 6]

# 删除元素
del my_list[0]
print(my_list)  # 输出:[2, 3, 4, 5, 6]

字典是可变的、无序的键值对集合。每个键必须是唯一的,您可以使用这些键访问其关联的值。与列表一样,字典可以存储各种数据类型的元素,包括嵌套集合。它们在花括号 {} 中定义,键值对之间用逗号分隔,键和值之间用冒号分隔。

关于字典的关键点:

  1. 可变且无序的集合
  2. 由唯一键的键值对组成
  3. 使用键访问值
  4. 存储多种数据类型

字典非常适合需要查找的任务,例如配置设置或频率计数。

示例:

# 创建一个字典
my_dictionary = {'a': 1, 'b': 2, 'c': 3}

# 访问元素
print(my_dictionary['a'])  # 输出:1

# 添加元素
my_dictionary['d'] = 4
print(my_dictionary)  # 输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}

# 更新元素
my_dictionary['a'] = 0
print(my_dictionary)  # 输出:{'a': 0, 'b': 2, 'c': 3, 'd': 4}

# 删除元素
del my_dictionary['a']
print(my_dictionary)  # 输出:{'b': 2, 'c': 3, 'd': 4}

元组是不可变的、有序的元素集合。它们的工作方式与列表类似,只是元组创建后,其元素不能更改、添加或删除。元组使用圆括号 () 定义,元素之间用逗号分隔。

关于元组的关键点:

  1. 不可变且有序的集合
  2. 支持多种数据类型
  3. 固定大小的结构

当您需要不可更改的集合,或希望将集合用作字典键时,元组非常有用。

示例:

# 创建一个元组
my_tuple = (1, 2, 3, 4, 5)

# 访问元素
print(my_tuple[0])  # 输出:1
print(my_tuple[-1])  # 输出:5

# 注意:元组是不可变的

集合是可变的、无序的集合,存储唯一元素。它们自动删除重复项,并且不维护顺序。集合可以包含多种数据类型的元素,但不包括可变类型,如列表和字典。它们可以使用花括号 {}set() 构造函数定义。

关于集合的关键点:

  1. 可变且无序
  2. 仅存储唯一元素,自动删除重复项
  3. 排除可变类型(如列表和字典)

集合非常适合成员测试、去重和执行集合操作,如并集、交集和差集。

# 创建一个集合
my_set = {1, 2, 3, 4, 5}

# 检查成员资格
print(1 in my_set)  # 输出:True

# 添加元素
my_set.add(6)
print(my_set)  # 输出:{1, 2, 3, 4, 5, 6}

# 通过删除一个元素并添加另一个元素进行更新
my_set.remove(1)
my_set.add(0)
print(my_set)  # 输出:{0, 2, 3, 4, 5, 6}

# 删除元素
my_set.remove(0)
print(my_set)  # 输出:{2, 3, 4, 5, 6}

条件语句允许您根据条件的真假来执行代码。

if condition1:
  # 执行某些操作
elif condition2:
  # 执行其他操作
else:
  # 执行另一操作

示例:

x = 42

if x > 50:
  print("x 大于 50")
elif x < 50:
  print("x 小于 50")
else:
  print("x 等于 50")

for 循环遍历序列(如列表或范围),为每个元素执行一段代码。

示例:

for i in range(5):
  print(i)

while 循环在指定条件为真时执行一段代码。

示例:

i = 0
while i < 5:
  print(i)
  i += 1

函数将代码封装成可重用的块,可以接受输入(参数)并返回输出。它们使用 def 关键字定义,可以通过名称调用。

def function_name(argument1, argument2=default_value):
  # 执行某些操作
  return result

示例:

def add(a, b):
  return a + b

result = add(3, 4)
print(result)  # 输出:7

Lambda 函数,也称为匿名函数,是使用 lambda 关键字创建的简洁的单表达式函数。它们通常用于短操作,通常作为 map()filter()sorted() 等函数的参数。

lambda arguments: expression

示例:

add = lambda a, b: a + b
result = add(3, 4)
print(result)  # 输出:7

列表推导式让您通过将表达式与循环和可选条件结合在一行中创建列表。它们非常适合转换或过滤数据。

new_list = [expression for item in iterable if condition]

示例:

squares = [x * x for x in range(1, 6)]
print(squares)  # 输出:[1, 4, 9, 16, 25]

异常处理使您的程序能够优雅地管理运行时错误。Python 提供 tryexceptfinally 块来捕获和处理异常,确保您的程序继续或顺利退出。

try:
    # 可能引发异常的代码
except ExceptionType as error_variable:
    # 处理异常
finally:
    # 无论是否发生异常都要执行的代码

示例:

try:
  result = 10 / 0
except ZeroDivisionError:
  print("不能除以零!")

类定义了面向对象编程(OOP)中创建对象的蓝图。对象是类的实例,具有执行特定任务的属性(数据)和方法(函数)。OOP 促进结构化、可重用和可维护的代码。

class ClassName:
  def __init__(self, attribute1, attribute2):
    self.attribute1 = attribute1
    self.attribute2 = attribute2

  def method_name(self, argument1):
    # 执行某些操作
    return result

示例:

class Dog:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def bark(self):
    print("Woof!")

# 创建 Dog 的实例
dog1 = Dog("Buddy", 3)
dog1.bark()  # 输出:Woof!

模块是包含 Python 代码(如函数、类或变量)的单独文件。导入模块使您能够通过使用外部库和框架来扩展程序的功能。

import module_name
from module_name import specific_function_or_class

示例:

import math
print(math.sqrt(16))  # 输出:4.0

文件输入/输出(I/O)涵盖在 Python 中读取和写入文件。这在处理数据存储和检索时至关重要。

with open('filename.txt', 'r') as file:
  content = file.read()
with open('filename.txt', 'w') as file:
  file.write('content to write to the file')

上下文管理器帮助管理资源(如文件或网络连接),确保它们被正确获取和释放。使用上下文管理器可确保您的代码更简洁且更具容错性。

with resource as alias:
  # 使用 resource 作为 alias

示例:

with open('file.txt', 'r') as file:
  content = file.read()
  print(content)  # 输出:Hello, World!

装饰器允许您在不更改源代码的情况下扩展或修改函数或类的行为。它们包装另一个函数,并在执行包装函数之前或之后添加一些功能。

def decorator_function(func):
  def wrapper(*args, **kwargs):
    # 在调用函数之前执行某些操作
    result = func(*args, **kwargs)
    # 在调用函数之后执行某些操作
    return result
  return wrapper

@decorator_function
def my_function():
  # 执行某些操作

示例:

def greet_decorator(func):
  def wrapper(name):
    return "Hello, " + func(name) + "!"
  return wrapper

@greet_decorator
def get_name(name):
  return name

print(get_name("John"))  # 输出:Hello, John!

itertools 模块提供用于创建和处理迭代器的函数。它包括无限迭代器(如 count、cycle 和 repeat)、有限迭代器(如 accumulate、chain、compress)和组合迭代器(如 product、permutations 和 combinations)。

示例:

import itertools

for i in itertools.count(5, 5):
  if i > 20:
    break
  print(i)  # 输出:5, 10, 15, 20

collections 模块提供可以改进程序的专用容器数据类型。

from collections import namedtuple, defaultdict, Counter, deque

示例:

from collections import namedtuple, deque, Counter, OrderedDict, defaultdict

# namedtuple
Person = namedtuple('Person', 'name age')
person1 = Person("Alice", 30)
print(person1.name, person1.age)  # 输出:Alice 30

# deque
dq = deque([1, 2, 3, 4, 5])
dq.append(6)
dq.appendleft(0)
print(dq)  # 输出:deque([0, 1, 2, 3, 4, 5, 6])

# Counter
count = Counter("hello world")
print(count)  # 输出:Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

# OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
print(od)  # 输出:OrderedDict([('a', 1), ('b', 2), ('c', 3)])

# defaultdict
dd = defaultdict(int)
dd['a'] += 1
dd['b'] += 2
print(dd)  # 输出:defaultdict(<class 'int'>, {'a': 1, 'b': 2})

正则表达式支持强大的文本处理和操作。re 模块提供 match、search、findall、finditer、split 和 sub 等函数。

示例:

import re

pattern = r'\d+'
result = re.findall(pattern, "There are 10 cats and 5 dogs.")
print(result)  # 输出:['10', '5']

处理日期和时间是常见需求,尤其是数据分析或调度任务。datetime 模块提供用于处理日期、时间和间隔的类和函数。

import datetime

# datetime, date, time, timedelta, timezone

示例:

from datetime import datetime, timedelta

# 当前日期和时间
current_time = datetime.now()
print("当前日期和时间:", current_time)

# 自定义日期和时间
custom_date = datetime(2022, 12, 31, 23, 59, 59)
print("自定义日期和时间:", custom_date)

# 将字符串转换为 datetime
date_str = "2023-01-01 00:00:00"
date_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print("字符串到 datetime:", date_obj)

# 将 datetime 转换为字符串
date_str2 = date_obj.strftime("%Y-%m-%d %H:%M:%S")
print("datetime 到字符串:", date_str2)

# 日期和时间运算
one_day = timedelta(days=1)
yesterday = current_time - one_day
tomorrow = current_time + one_day
print("昨天:", yesterday)
print("明天:", tomorrow)

列表切片允许您通过指定开始、结束和可选步长值来提取列表或其他序列类型的一部分。此功能对于提取子序列非常有用。

my_list[start:end:step]

示例:

my_list = [0, 1, 2, 3, 4, 5]
sub_list = my_list[1:4]
print(sub_list)  # 输出:[1, 2, 3]

字符串格式化是将静态文本与动态值结合的过程。Python 提供多种格式化方法,包括 %-格式化、str.format() 方法和 f-字符串(Python 3.6+),使您能够轻松生成格式化字符串。

print("Hello, %s" % name)
print("Hello, {}".format(name))
print(f"Hello, {name}")

示例:

name = "John"
age = 30
formatted_string = f"My name is {name} and I am {age} years old."
print(formatted_string)  # 输出:My name is John and I am 30 years old.

命令行参数允许您在从命令行执行 Python 脚本时传递输入值。sys.argv 列表提供对这些参数的访问,使其易于在脚本中解析和使用。

import sys

arguments = sys.argv

示例:

# 将此代码保存到名为 "cmd_args.py" 的文件中
# 使用以下命令运行:python cmd_args.py Alice
# 预期输出:Hello, Alice!
import sys

if len(sys.argv) > 1:
  print(f"Hello, {sys.argv[1]}!")
else:
  print("未提供参数。")