当前位置:首页>python>带你入门Python:从变量到函数,一文看懂

带你入门Python:从变量到函数,一文看懂

  • 2026-09-02 19:35:34
带你入门Python:从变量到函数,一文看懂

今天这篇推文,我们一起从零出发,快速摸清Python最常用的基础:从变量、数据类型、条件语句、循环到函数、列表推导式、生成器、文件操作、异常处理、类与对象、模块和递归。不走弯路,边学边练,学完就能写点小工具!

1. 变量与数据类型:装东西的“盒子”和它们的“材质”

Python里的变量就是给数据起个名字。Python是动态类型语言,变量不需要事先声明类型,赋值就能用。常见数据类型有:int(整数)、float(浮点数)、str(字符串)、bool(布尔)、list(列表)、dict(字典)等。

复制代码

# 变量与数据类型示例
age = 18# int 整数
height = 1.75# float 浮点数
name = "Alice"# str 字符串
is_student = True# bool 布尔值
scores = [95, 88, 76]   # list 列表
user = {"id": 1, "name": "Alice"}  # dict 字典

print(type(age), type(name))  # 输出变量的类型

运行结果(示意):会打印类似 <class ‘int’> <class ‘str’>。

小贴士:

  • 变量名建议用小写加下划线,如 user_name。不要用保留字(如 if、for)。
  • 不同类型之间计算要注意,比如字符串不能和数字直接相加。

练习题:

  • 创建一个字典,里面包含你的姓名、年龄、城市。打印出来,并打印每个字段的类型。

注意事项:

  • 除法区分:/ 是浮点除法,// 是地板除(向下取整)。

2. 条件语句与循环:代码的“选择”和“重复做”

条件语句用来做判断分支,循环用来重复执行一段代码。

复制代码

# 条件语句与循环示例:计算 1~100 的偶数和
total = 0
for n inrange(1, 101):   # range(1, 101) 代表 1 到 100
if n % 2 == 0:        # 条件语句,判断是否是偶数
        total += n
print("偶数和:", total)

# while 循环示例:找出第一个能被 7 整除的三位数
x = 100
while x < 1000:
if x % 7 == 0:
print("第一个三位且能被7整除的数:", x)
break
    x += 1

运行结果(示意):偶数和是 2550;第二段会打印 105。

小贴士:

  • Python 用缩进表示代码块,统一使用4个空格,别混用Tab。
  • for 循环常搭配 range;while 循环注意终止条件,避免死循环。

练习题:

  • 用 for 循环和 if,数一数 1~200 中能被 3 或 5 整除的数有多少个。

3. 函数与 lambda函数:把逻辑“打包”,随时调用

函数是把一段逻辑封装成可重复使用的模块。lambda函数是简化写法的小函数,常用在简单传参场景,比如排序的键函数。

复制代码

# 定义一个函数:计算列表平均值
defavg(nums):
"""返回列表的平均值"""
ifnot nums:
return0
returnsum(nums) / len(nums)

print(avg([10, 20, 30]))  # 输出 20.0

# lambda 函数:对字典列表按 age 排序
people = [{"name": "A", "age": 23}, {"name": "B", "age": 18}]
people_sorted = sorted(people, key=lambda p: p["age"])
print(people_sorted)  # 输出按 age 升序的列表

运行结果(示意):平均值 20.0;排序后 B 在前 A 在后。

注意事项:

  • 函数参数的默认值不要使用可变对象(如列表、字典),容易踩坑。

复制代码

defbad_append(item, bucket=[]):  # 不推荐
    bucket.append(item)
return bucket

这会导致多次调用共享同一个列表。正确写法:

复制代码

defgood_append(item, bucket=None):
if bucket isNone:
        bucket = []
    bucket.append(item)
return bucket

练习题:

  • 写一个函数 is_palindrome(s),判断字符串是否回文(正反一样)。

4. 列表推导式与生成器:又快又省心的“数据流水线”

列表推导式是快速生成列表的语法,读起来像“我想要某种规则生成的列表”。生成器(generator)则是“懒加载”的数据流,按需产出,省内存。

复制代码

# 列表推导式:平方+过滤偶数
squares_even = [x*x for x inrange(10) if x % 2 == 0]
print(squares_even)  # [0, 4, 16, 36, 64]

# 生成器函数:斐波那契数列
deffib(n):
"""产出前 n 个斐波那契数"""
    a, b = 0, 1
for _ inrange(n):
yield a   # 使用 yield 定义生成器
        a, b = b, a + b

for num in fib(5):
print(num, end=" ")  # 0 1 1 2 3

小贴士:

  • 列表推导式适合简单场景;复杂逻辑不要硬塞进去,影响可读性。
  • 生成器非常适合处理大文件、大数据流。

练习题:

  • 用列表推导式生成 1~50 中能被 3 整除的数的立方列表。

5. 文件操作与异常处理:数据落地与错误兜底

文件操作让我们读写磁盘上的文件;异常处理(try/except)让程序在出错时有优雅的处理方式。

复制代码

# 写文件
data = ["Alice 95", "Bob 88", "Cindy 76"]
withopen("scores.txt", "w", encoding="utf-8") as f:  # with 会自动关闭文件
for line in data:
        f.write(line + "\n")

# 读文件 + 异常处理:计算总分
total = 0
try:
withopen("scores.txt", "r", encoding="utf-8") as f:
for line in f:
# 拆分并取分数部分
            name, score = line.strip().split()
            total += int(score)
print("总分:", total)
except FileNotFoundError:
print("文件不存在,请检查路径")
except ValueError:
print("数据格式有误,请检查内容")
finally:
print("处理完成")

运行结果(示意):打印总分 259,并打印“处理完成”。

小贴士:

  • 尽量捕获具体异常类型(如 FileNotFoundError、ValueError),不要一上来就 except Exception。
  • 文件路径跨平台可用 pathlib 简化。

练习题:

  • 从一个文本文件中读取每行数字,求平均值;若遇到非数字行,跳过并记录到另一个日志文件。

6. 类与对象:把数据和行为“打包”在一起

**类(class)**定义一种数据结构和它的行为,**对象(object)**是类的实例。用类可以更好地组织代码。

复制代码

classBankAccount:
"""简单的银行账户类"""
def__init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance  # 属性

defdeposit(self, amount):
if amount <= 0:
raise ValueError("存款必须为正数")
        self.balance += amount

defwithdraw(self, amount):
if amount > self.balance:
raise ValueError("余额不足")
        self.balance -= amount

def__repr__(self):
returnf"<BankAccount owner={self.owner} balance={self.balance}>"

acct = BankAccount("Alice", 100)
acct.deposit(50)
acct.withdraw(30)
print(acct)  # <BankAccount owner=Alice balance=120>

小贴士:

  • 方法第一个参数约定为 self,表示实例自身。
  • 类只是工具,别为简单脚本过度设计。

练习题:

  • 写一个 TodoList 类,支持 add、remove、list_all,并把任务保存到文件。

7. 模块与包:代码的“分层收纳箱”

**模块(module)**就是一个 .py 文件,**包(package)**是包含 __init__.py 的文件夹。把功能拆成模块,便于维护和复用。

复制代码

# 使用标准库模块
import math
from random import randint

print(math.sqrt(16))  # 4.0
print(randint(1, 10)) # 输出 1~10 的随机整数

# 入口判断:仅当本文件直接运行时执行
defmain():
print("我是主程序入口")

if __name__ == "__main__":
    main()

小贴士:

  • 自己写的模块名别与标准库冲突(比如叫 random.py 会出问题)。
  • 想分享给别人用,可以了解下虚拟环境和依赖管理(如 venv、pip)。

练习题:

  • 新建一个 utils.py,封装常用函数;在主程序里导入并调用。

8. 递归:自己调用自己的函数

递归是函数调用自身的技巧,适合分而治之的场景。关键是有明确的“终止条件”。

复制代码

# 递归求 n!(阶乘)
deffactorial(n):
if n < 0:
raise ValueError("n 不能为负数")
if n == 0or n == 1:  # 终止条件
return1
return n * factorial(n - 1)

print(factorial(5))  # 120

注意事项:

  • 递归深度过大可能导致栈溢出(RecursionError),可改写为循环或使用生成器。
  • 有些问题(如斐波那契)递归会重复计算,需配合记忆化或改迭代。

练习题:

  • 用递归求列表的最大值;为空列表时返回 None。

常见坑速记

  • 比较用 ==,赋值用 =,别写反了。
  • 浮点数有精度误差,金额计算尽量用 decimal。
  • 列表、字典是可变对象,作为参数传递会“原地修改”,需要时做副本 copy() 或切片 [:]。
  • 打印调试多用 print() 或 pprint(结构化输出),逐步验证每一步结果。

学习小技巧

  • 每学一个知识点,立刻写一个小例子,不要只看不练。
  • 把常用片段建立“代码小抄”,比如文件读取模板、异常处理模板。
  • 刻意练习:把今天学的内容写成一个小脚本,比如“批量重命名文件”、“简单计时器”。

总结

今天我们用通俗的方式串了一遍Python基础:用变量装数据,理解数据类型;用条件语句做选择、用循环做重复;用函数和lambda函数封装逻辑;用列表推导式和生成器优雅地产生数据;用文件操作和异常处理让程序更可靠;再到类与对象组织代码,以及模块的拆分;最后一瞥递归的思维方式。建议大家把每个小节的练习都动手做一遍,效果立竿见影。

小伙伴们,今天的Python学习之旅就到这里啦! 记得动手敲代码,有问题随时在评论区问XXX哦。祝大家学习愉快,Python学习节节高!

最新文章

随机文章