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 知识结构总览
下面这张图把本章的核心知识点串起来了。你可以把它当作速查地图。
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("已取消")
这个例子虽然简单,但包含了变量、列表、字符串格式化、循环、输入输出——全是本章的核心。你可以在它基础上加功能,比如让用户选择升级哪些服务器,或者记录升级日志。
我的建议:学语法最好的方式就是「抄一遍,改一遍,跑一遍」。别怕报错,报错是最好的老师。每改一次,你对语法的理解就深一层。