3、脚本基础语法(一):变量与数据类型、字符串操作、列表与字典、输入输出函数

好,咱们正式开始啃语法。这一章是地基中的地基——变量、数据类型、字符串、列表、字典,还有输入输出。我见过不少新手一上来就撸复杂逻辑,结果连变量类型都搞混,调试时满头问号。别急,咱们一步步来。

3.1 变量与数据类型

变量就是个名字,用来存数据。Python 里不需要声明类型,直接赋值就行。但别被这「自由」骗了——类型其实很重要。

# 基本赋值
name = "升级脚本"
version = 3.0
is_active = True

Python 常见的数据类型就这几种:

类型 示例 说明
int count = 10 整数,没小数
float ratio = 3.14 浮点数,有小数
str msg = "hello" 字符串,文本
bool flag = False 布尔值,True/False
list items = [1,2,3] 列表,有序可变
dict cfg = {"key":"val"} 字典,键值对
我的习惯:写脚本时,变量名尽量用英文,别用拼音。比如 file_path 比 wenjian_lujing 好读一百倍。另外,常量用全大写:MAX_RETRY = 3。

3.2 字符串操作

字符串是脚本里打交道最多的类型。日志、路径、命令拼接,全是字符串。Python 的字符串操作非常灵活,但坑也不少。

3.2.1 拼接与格式化

# 拼接
log_dir = "/var/log"
file_name = "upgrade.log"
full_path = log_dir + "/" + file_name

# f-string(推荐)
host = "node01"
port = 8080
url = f"http://{host}:{port}/status"
print(url)  # 输出:http://node01:8080/status

我个人强烈推荐 f-string。它比 % 格式化和 .format() 都直观。升级脚本里大量用到路径拼接和命令构造,f-string 能让你少写很多括号。

3.2.2 常用方法

text = "  Hello, Upgrade Script!  "

# 去空格
clean = text.strip()

# 分割
parts = "a,b,c".split(",")

# 判断开头/结尾
if clean.startswith("Hello"):
    print("匹配成功")

# 替换
new_text = clean.replace("Upgrade", "Deploy")
我曾经踩过的坑:用 split() 时没注意空字符串。比如 "a,,b".split(",") 会返回 ['a', '', 'b'],那个空元素很容易被忽略,导致后续逻辑出错。建议 split 后加个过滤:[x for x in parts if x]。

3.3 列表与字典

列表和字典是脚本里最常用的数据结构。列表管顺序,字典管映射。升级脚本里,服务器列表用列表,配置参数用字典,几乎是标配。

3.3.1 列表操作

# 定义
servers = ["web01", "web02", "db01"]

# 追加
servers.append("cache01")

# 遍历
for s in servers:
    print(f"正在处理:{s}")

# 列表推导式(简洁高效)
upper_servers = [s.upper() for s in servers]

列表推导式我特别喜欢。它能把好几行的循环压缩成一行,而且性能更好。但别写太复杂,否则别人看不懂——包括两周后的你自己。

3.3.2 字典操作

# 定义
config = {
    "timeout": 30,
    "retry": 3,
    "backup_dir": "/data/backup"
}

# 取值(安全方式)
timeout = config.get("timeout", 60)  # 没有则返回默认值60

# 遍历
for key, val in config.items():
    print(f"{key} = {val}")

# 更新
config["timeout"] = 45
关键区别:列表用方括号 [],字典用花括号 {}。列表按位置取值,字典按键取值。写脚本时别搞混,否则会报 KeyError 或 IndexError。

3.4 输入输出函数

脚本不是写给自己看的,它要和用户交互,要写日志,要输出结果。输入输出就是脚本的「嘴巴」和「耳朵」。

3.4.1 输出:print()

# 基本输出
print("开始升级...")

# 多个参数
print("节点", node_name, "状态", status)

# 格式化输出
print(f"进度:{percent:.2f}%")

print 默认会在末尾加换行。如果你不想换行,加个 end="":

print("正在处理", end="")
print(".", end="")
print(".", end="")
print("完成")

3.4.2 输入:input()

# 获取用户输入
confirm = input("确认升级?(y/n): ")
if confirm.lower() == "y":
    print("开始升级")
else:
    print("已取消")

注意:input() 返回的是字符串。如果你要数字,记得转换:

count = int(input("请输入重试次数: "))
我曾经踩过的坑:用户输入了非数字内容,int() 直接崩溃。建议加个 try-except:try: count = int(input(...)) except: count = 3。脚本里输入输出一定要做容错,别指望用户按你的规矩来。

3.5 知识结构总览

下面这张图把本章的核心知识点串起来了。你可以把它当作速查地图。

脚本基础语法知识结构 脚本基础语法 变量与数据类型 字符串操作 列表与字典 输入输出函数 int / float / str / bool 拼接 / 格式化 / 方法 列表推导 / 字典 get print / input / 类型转换 提示:每个分支都对应脚本开发中的高频场景,建议逐个练习

3.6 实战小练习

光看不动手,等于白看。我建议你写个简单的脚本,把今天的内容串起来:

# 一个简单的升级确认脚本
servers = ["web01", "web02", "db01"]
version = "3.0.1"

print(f"当前版本:{version}")
print("待升级服务器:")
for s in servers:
    print(f"  - {s}")

confirm = input("是否开始升级?(y/n): ")
if confirm.lower() == "y":
    print("升级开始...")
else:
    print("已取消")

这个例子虽然简单,但包含了变量、列表、字符串格式化、循环、输入输出——全是本章的核心。你可以在它基础上加功能,比如让用户选择升级哪些服务器,或者记录升级日志。

我的建议:学语法最好的方式就是「抄一遍,改一遍,跑一遍」。别怕报错,报错是最好的老师。每改一次,你对语法的理解就深一层。