21 三月 2025
Python 是一种用途广泛且被广泛使用的编程语言,以其清晰的语法和可读性而闻名。这使其成为初学者的理想选择,因为它被用于从 Web 开发到数据科学的各个领域,开辟了许多职业道路。本文将通过简单易懂的代码示例指导您了解 Python 的基本概念。
让我们从传统的“Hello, World!”程序开始。在 Python 中,这非常简单:
print("Hello, Beginner!")
这一行代码完成了以下操作:
print()
: 这是一个内置函数。函数是执行特定任务的可重用代码块。print()
向用户显示输出。("Hello, Beginner!")
: 括号内是一个字符串字面量。字符串是一个字符序列,用单引号 ('...'
) 或双引号 ("..."
) 括起来。当您运行此代码时,Python 解释器会执行 print()
,在您的屏幕上显示“Hello, Beginner!”。
变量对于存储数据至关重要。可以将它们视为带标签的容器。 良好的做法是使用描述性名称,以小写字母开头,并使用下划线分隔单词(例如,my_variable
、user_age
)。下面是一个例子:
# 为变量赋值
message = "Welcome to Python!"
number = 10
pi = 3.14159
# 打印变量值
print(message)
print(number)
print(pi)
解释:
message = "Welcome to Python!"
: 创建一个名为 message
的变量,存储字符串“Welcome to Python!”。number = 10
: 一个名为 number
的变量存储整数 10
。pi = 3.14159
: 一个名为 pi
的变量存储浮点数 3.14159
。然后 print()
显示这些值。Python 是动态类型的:您不需要显式声明变量的类型(字符串、整数、浮点数)。Python 会从分配的值中推断出来。
交互式程序通常需要用户输入。下面是如何获取它:
# 获取用户输入
name = input("请输入您的姓名:")
# 打印个性化问候语
print("Hello, " + name + "!") # 字符串拼接
解释:
name = input("请输入您的姓名:")
: input()
暂停程序,等待用户输入内容并按 Enter 键,然后将其作为字符串存储在 name
中。print("Hello, " + name + "!")
: 这将打印一条问候语。+
运算符与字符串一起使用时,执行字符串拼接,将它们连接起来。为了提高可读性,在连接时在 +
周围添加空格是一种好习惯。if
、else
和 elif
条件语句允许您的程序做出决策,控制根据条件是真还是假来执行哪些代码块。
age = int(input("请输入您的年龄:"))
if age >= 18:
print("您有资格投票。")
elif age < 0:
print("这是一个不正确的年龄。")
else:
print("您还没有资格投票。")
分解:
age = int(input("请输入您的年龄:"))
: 获取用户输入的年龄。int()
将输入(默认为字符串)转换为整数。if age >= 18:
: 检查 age
是否大于或等于 18。如果为真,则执行缩进的 print
语句。elif age < 0:
: 如果前面的 if
条件为假,则检查此条件。如果为真,则执行相应的块。elif
代表“else if”,允许按顺序检查多个条件。else:
: 如果所有 if
或 elif
条件都不为真,则执行 else
下面缩进的代码。缩进在 Python 中至关重要;它定义了与 if
、elif
和 else
关联的代码块。一致的缩进(通常为 4 个空格)对于 Python 代码的正确运行至关重要。for
重复代码循环重复代码块。for
循环遍历一个序列(例如,列表或一系列数字)。
# 打印数字 0-4
for i in range(5):
print(i)
# 打印列表元素
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
解释:
for i in range(5):
: range(5)
生成从 0 到(但不包括)5 的数字。循环遍历此序列;在每次迭代中,当前数字被分配给 i
。for fruit in fruits:
: 此循环遍历 fruits
列表。在每次迭代中,当前列表元素被分配给 fruit
。while
重复代码while
循环只要条件为真就继续。
count = 0
while count < 5:
print(count)
count += 1 # 递增 count
解释:
count = 0
: 将 count
初始化为 0。while count < 5:
: 只要 count
小于 5,循环就继续。count += 1
: 在循环内部,count
在每次迭代中递增 1。这可以防止无限循环(条件将始终为真)。函数对于代码重用、组织和可读性至关重要。您可以定义一次函数并在需要该特定功能时随时调用它,而不是多次重复相同的代码。使用 def
定义您自己的函数。
# 定义一个函数
def greet(name):
print("Hello, " + name + "!")
# 调用函数
greet("Alice")
greet("Bob")
要点:
def greet(name):
: 定义一个名为 greet
的函数,它接受一个名为 name
的参数。print("Hello, " + name + "!")
: 函数的主体——调用函数时执行的代码。greet("Alice")
: 调用 greet
函数,将“Alice”作为参数传递。让我们将概念组合成一个稍微复杂一点的程序:
def calculate_area(length, width):
"""计算矩形的面积。""" # 文档字符串
area = length * width
return area
# 获取尺寸
length = float(input("请输入长度:"))
width = float(input("请输入宽度:"))
# 计算面积
rectangle_area = calculate_area(length, width)
# 打印结果
print("面积:", rectangle_area)
解释:
def calculate_area(length, width):
: 定义一个计算矩形面积的函数,将 length
和 width
作为参数。"""..."""
是一个文档字符串,描述了该函数。文档字符串用于文档,并且可以通过 help() 函数访问。return area
: 该函数返回计算出的面积。return
语句退出函数并将值发送回调用函数的位置。float()
将它们转换为浮点数。使用 float()
允许十进制值,使计算器更通用。calculate_area
,传入尺寸,并将返回值存储在 rectangle_area
中。Python 提供了其他用于控制程序流程的工具。
break
、continue
和 else
break
: 退出最内层的 for
或 while
循环。continue
: 继续循环的下一次迭代。else
子句: 在 for
中,循环结束后执行(除非发生了 break
)。在 while
中,条件变为假后执行(除非发生了 break
)。#break 示例
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
break # 当 number 为 3 时退出循环
print(number) # 输出: 1 2
#continue 示例
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
continue # 当 number 为 3 时跳到下一次迭代
print(number) # 输出: 1 2 4 5
#else 示例
for i in range(5):
print(i)
else:
print("循环结束") #将会被执行
for i in range(5):
if i==3:
break
print(i)
else:
print("循环结束") #将不会被执行
match
语句match
将一个值与模式进行比较。它类似于其他语言中的 switch 语句,但具有更强大的模式匹配功能。这从 Python 3.10 开始可用。
def http_error(status):
match status:
case 400:
return "Bad request"
case 401 | 403 | 404: # 多个 case
return "Not allowed"
case 418:
return "I'm a teapot"
case _: # 默认
return "Something's wrong"
print(http_error(404))
print(http_error(500))
_
是一个通配符,如果没有其他 case 匹配,则匹配任何内容。
Python 具有用于组织数据的内置数据结构。
my_list = [1, 2, 3, "apple"]
my_list.append("cherry") # 在末尾添加一个元素
print(my_list[0]) # 按索引访问元素(从 0 开始)
my_list.remove(2) # 按值删除元素
print(my_list)
my_tuple = (1, 2, 3, "apple")
# my_tuple[0] = 5 # 错误(不可变) - 元组在创建后无法修改
print(my_tuple[1])
my_set = {1, 2, 3, 3, 4, 5} # 自动删除重复项
print(my_set) # 输出: {1, 2, 3, 4, 5}
my_dict = {"name": "Alice", "age": 30}
print(my_dict["name"]) # 按键访问值
my_dict["age"] = 31 # 修改值
print(my_dict)
squares = [x**2 for x in range(10)] # 平方列表
even = [x for x in range(20) if x % 2 == 0] # 偶数
print(squares)
print(even)
模块将代码组织成可重用的文件。使用 import
从其他模块访问功能。
import math
print(math.sqrt(16)) # 访问 math 模块中的 sqrt 函数
print(math.pi) # 访问 pi 常量
from math import sqrt # 导入特定函数
print(sqrt(25))
from math import * # 导入所有内容(通常应避免)
print(pi)
这演示了如何使用 math
模块(它提供数学函数)。导入特定函数或常量可以提高代码可读性并避免命名冲突。在较大的项目中,通常不鼓励使用 *
导入所有内容。
函数可以为参数设置默认值。
def greet(name, greeting="Hello"):
print(greeting + ", " + name + "!")
greet("Bob") # 使用默认问候语
greet("Alice", "Hi") # 覆盖默认值
使用 keyword=value
语法调用函数。
def describe_pet(animal_type, pet_name):
print("I have a " + animal_type + " named " + pet_name + ".")
describe_pet(pet_name="Harry", animal_type="hamster") # 顺序无关紧要
函数可以使用 *args
接受任意数量的位置参数。
def make_pizza(*toppings):
print("Making a pizza with:")
for topping in toppings:
print("- " + topping)
make_pizza("pepperoni")
make_pizza("mushrooms", "cheese", "peppers")
*toppings
将所有位置参数收集到一个名为 toppings
的元组中。
函数可以使用 **kwargs
接受任意数量的关键字参数。
def build_profile(first, last, **kwargs):
# 结合固定参数和任意关键字参数来创建用户配置文件。
profile = {'first_name': first, 'last_name': last}
profile.update(kwargs) # 使用来自 kwargs 的键值对更新 profile。
return profile
user = build_profile("Albert", "Einstein", location="Princeton", field="physics")
print(user) # 输出: {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'physics'}
**kwargs
代表“关键字参数”,是一种将附加命名参数收集到字典中的常见命名约定。这允许函数处理灵活的输入。
使用 lambda
创建的小型匿名函数。
add = lambda x, y: x + y
print(add(5, 3)) # 输出: 8
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1]) #按元组的第二个元素排序
print(pairs)
Lambda 函数通常用作高阶函数(将其他函数作为参数的函数)的参数,如本例中的 sort
。
类提供了一种捆绑数据(属性)和对该数据进行操作的功能(方法)的方法。它是面向对象编程中的主要特性之一,允许您创建对象的蓝图。
class Dog:
def __init__(self, name, age): #构造函数
self.name = name
self.age = age
def bark(self):
print("Woof!")
my_dog = Dog("Buddy", 3) #类的实例
print(my_dog.name)
my_dog.bark()
解释:
class Dog:
: 定义一个名为 Dog
的类。def __init__(self, name, age):
: 这是构造函数(或初始化程序)。当您创建一个新的 Dog
对象时,它会自动调用。
self
: 指的是类的实例(您正在使用的特定 Dog
对象)。它是类中所有方法的第一个参数。def bark(self):
: 这是一个方法——属于 Dog
类的一个函数。它可以访问狗的数据(如 self.name
,尽管在这个简单的例子中它没有)。my_dog = Dog("Buddy", 3)
: 创建一个名为 my_dog
的 Dog 类的实例。迭代器是一个对象,允许您遍历集合中的所有元素,无论其具体实现如何。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
生成器是一种可迭代对象,类似于列表或元组。 与列表不同,它们不将内容存储在内存中,而是使用关键字 yield
即时生成值。 这使得它们对于大型序列具有内存效率。这也使它们与列表推导式不同,后者在内存中创建整个列表。
def my_generator():
yield 1
yield 2
yield 3
for value in my_generator():
print(value)
#生成器表达式
squares = (x*x for x in range(10))
print(list(squares))
这些基础知识为您的 Python 之旅提供了坚实的基础。通过试验这些概念并将它们组合起来,您可以构建越来越复杂的程序。请记住,实践和探索是掌握任何编程语言的关键。