21 三月 2025

Python 基础:初学者编码指南

Python 是一种用途广泛且被广泛使用的编程语言,以其清晰的语法和可读性而闻名。这使其成为初学者的理想选择,因为它被用于从 Web 开发到数据科学的各个领域,开辟了许多职业道路。本文将通过简单易懂的代码示例指导您了解 Python 的基本概念。

您的第一个 Python 程序:“Hello, World!”

让我们从传统的“Hello, World!”程序开始。在 Python 中,这非常简单:

print("Hello, Beginner!")

这一行代码完成了以下操作:

  1. print(): 这是一个内置函数。函数是执行特定任务的可重用代码块。print() 向用户显示输出。
  2. ("Hello, Beginner!"): 括号内是一个字符串字面量。字符串是一个字符序列,用单引号 ('...') 或双引号 ("...") 括起来。

当您运行此代码时,Python 解释器会执行 print(),在您的屏幕上显示“Hello, Beginner!”。

Python 中的变量

变量对于存储数据至关重要。可以将它们视为带标签的容器。 良好的做法是使用描述性名称,以小写字母开头,并使用下划线分隔单词(例如,my_variableuser_age)。下面是一个例子:

# 为变量赋值
message = "Welcome to Python!"
number = 10
pi = 3.14159

# 打印变量值
print(message)
print(number)
print(pi)

解释:

  1. message = "Welcome to Python!": 创建一个名为 message 的变量,存储字符串“Welcome to Python!”。
  2. number = 10: 一个名为 number 的变量存储整数 10
  3. pi = 3.14159: 一个名为 pi 的变量存储浮点数 3.14159

然后 print() 显示这些值。Python 是动态类型的:您不需要显式声明变量的类型(字符串、整数、浮点数)。Python 会从分配的值中推断出来。

Python 中的用户交互

交互式程序通常需要用户输入。下面是如何获取它:

# 获取用户输入
name = input("请输入您的姓名:")

# 打印个性化问候语
print("Hello, " + name + "!")  # 字符串拼接

解释:

  1. name = input("请输入您的姓名:"): input() 暂停程序,等待用户输入内容并按 Enter 键,然后将其作为字符串存储在 name 中。
  2. print("Hello, " + name + "!"): 这将打印一条问候语。+ 运算符与字符串一起使用时,执行字符串拼接,将它们连接起来。为了提高可读性,在连接时在 + 周围添加空格是一种好习惯。

条件逻辑:ifelseelif

条件语句允许您的程序做出决策,控制根据条件是真还是假来执行哪些代码块。

age = int(input("请输入您的年龄:"))

if age >= 18:
    print("您有资格投票。")
elif age < 0:
    print("这是一个不正确的年龄。")
else:
    print("您还没有资格投票。")

分解:

  1. age = int(input("请输入您的年龄:")): 获取用户输入的年龄。int() 将输入(默认为字符串)转换为整数。
  2. if age >= 18:: 检查 age 是否大于或等于 18。如果为真,则执行缩进的 print 语句。
  3. elif age < 0:: 如果前面的 if 条件为假,则检查此条件。如果为真,则执行相应的块。elif 代表“else if”,允许按顺序检查多个条件。
  4. else:: 如果所有 ifelif 条件都不为真,则执行 else 下面缩进的代码。缩进在 Python 中至关重要;它定义了与 ifelifelse 关联的代码块。一致的缩进(通常为 4 个空格)对于 Python 代码的正确运行至关重要。

循环:使用 for 重复代码

循环重复代码块。for 循环遍历一个序列(例如,列表或一系列数字)。

# 打印数字 0-4
for i in range(5):
    print(i)

# 打印列表元素
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

解释:

  1. for i in range(5):: range(5) 生成从 0 到(但不包括)5 的数字。循环遍历此序列;在每次迭代中,当前数字被分配给 i
  2. for fruit in fruits:: 此循环遍历 fruits 列表。在每次迭代中,当前列表元素被分配给 fruit

循环:使用 while 重复代码

while 循环只要条件为真就继续。

count = 0
while count < 5:
    print(count)
    count += 1  # 递增 count

解释:

  1. count = 0: 将 count 初始化为 0。
  2. while count < 5:: 只要 count 小于 5,循环就继续。
  3. count += 1: 在循环内部,count 在每次迭代中递增 1。这可以防止无限循环(条件将始终为真)。

函数:可重用代码块

函数对于代码重用、组织和可读性至关重要。您可以定义一次函数并在需要该特定功能时随时调用它,而不是多次重复相同的代码。使用 def 定义您自己的函数。

# 定义一个函数
def greet(name):
    print("Hello, " + name + "!")

# 调用函数
greet("Alice")
greet("Bob")

要点:

  1. def greet(name):: 定义一个名为 greet 的函数,它接受一个名为 name参数
  2. print("Hello, " + name + "!"): 函数的主体——调用函数时执行的代码。
  3. 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)

解释:

  1. def calculate_area(length, width):: 定义一个计算矩形面积的函数,将 lengthwidth 作为参数。"""...""" 是一个文档字符串,描述了该函数。文档字符串用于文档,并且可以通过 help() 函数访问。
  2. return area: 该函数返回计算出的面积。return 语句退出函数并将值发送回调用函数的位置。
  3. 程序获取用户输入的长度和宽度,使用 float() 将它们转换为浮点数。使用 float() 允许十进制值,使计算器更通用。
  4. 它调用 calculate_area,传入尺寸,并将返回值存储在 rectangle_area 中。
  5. 最后,它打印面积。

更多控制流工具

Python 提供了其他用于控制程序流程的工具。

循环中的 breakcontinueelse

  • break: 退出最内层的 forwhile 循环。
  • 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 表达式

使用 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 之旅提供了坚实的基础。通过试验这些概念并将它们组合起来,您可以构建越来越复杂的程序。请记住,实践和探索是掌握任何编程语言的关键。

相关新闻

相关文章