3、基础语法速览:变量与数据类型、条件判断、循环语句、函数定义
好,咱们直接进入正题。这一章是自动化脚本的「地基」。
不管你用 Python 还是 Shell,变量、判断、循环、函数,这四样东西你躲不开。我见过太多新手,一上来就抄网上的复杂脚本,结果报错了一脸懵。为什么?因为基础不牢。
今天我就带你把这四块「硬骨头」啃下来。别怕,咱们用最直白的方式讲。
3.1 变量与数据类型:给数据贴个标签
变量是什么?说白了,就是给数据起个名字。你想想看,你总不能每次都写一长串数字或字符串吧?
核心概念:变量 = 名字 + 值。在 Python 里,你不需要声明类型,直接赋值就行。
我个人习惯用snake_case命名,比如user_name、error_count。这样一眼就能看出是什么。
常见数据类型
| 类型 | 示例 | 说明 |
|---|---|---|
| 整数 (int) | age = 30 |
就是整数,没有小数点 |
| 浮点数 (float) | price = 19.99 |
带小数点的数 |
| 字符串 (str) | name = "自动化脚本" |
用引号包起来的文本 |
| 布尔值 (bool) | is_ready = True |
只有 True 或 False |
| 列表 (list) | items = ["a", "b", "c"] |
有序的集合,可以改 |
| 字典 (dict) | config = {"host": "localhost"} |
键值对,像查字典一样 |
我的小技巧:写脚本时,我习惯先打印一下变量的类型,用type()函数。比如print(type(age))。这能帮你快速定位类型不匹配的 bug。
嗯,这里要注意:Python 是动态类型,但别滥用。我在项目中遇到过,有人把变量一会当字符串用,一会当数字用,最后代码跑起来全是坑。建议你保持类型一致。
3.2 条件判断:让脚本学会「看情况」
脚本不是死板的。它需要根据不同的情况,执行不同的代码。这就是条件判断。
最常用的就是if、elif、else。结构很简单:
status = "success"
if status == "success":
print("任务完成,继续下一步")
elif status == "warning":
print("有警告,但可以继续")
else:
print("出错了,需要处理")
为什么会这样写?因为现实中的自动化流程,永远有分支。比如你检查一个接口返回码,200 走一路,404 走另一路。
避坑指南:我曾经犯过一个低级错误——把==写成了=。在 Python 里,=是赋值,==才是判断。这个 bug 我找了半小时。你一定要注意。
另外,条件判断里可以嵌套。但我不建议嵌套超过三层。太深了,代码就像意大利面,你自己都理不清。
3.3 循环语句:重复的事情交给机器
自动化脚本最擅长的就是「重复」。循环就是干这个的。
Python 里主要有两种:for循环和while循环。
for 循环:遍历一切
我个人最喜欢用for循环。它天然适合遍历列表、字典、字符串。
# 遍历列表
test_cases = ["登录", "注册", "搜索"]
for case in test_cases:
print(f"正在执行测试用例:{case}")
# 遍历字典
config = {"host": "192.168.1.1", "port": 8080}
for key, value in config.items():
print(f"{key} = {value}")
你想想看,如果你有 100 个测试用例,手动执行得累死。但用循环,几行代码搞定。
while 循环:条件控制
while循环适合你不知道要循环多少次的情况。比如等待某个服务启动。
import time
retry = 0
max_retry = 5
while retry < max_retry:
print(f"第 {retry+1} 次尝试连接...")
# 模拟连接检查
time.sleep(1)
retry += 1
print("连接超时,退出")
我的经验:用while循环时,一定要加一个退出条件。否则就成了死循环,脚本卡死。我曾经在线上脚本里忘了加retry += 1,结果服务器 CPU 跑满,被运维同事骂了一顿。
3.4 函数定义:把代码「打包」成工具
函数是什么?就是把一段逻辑「打包」起来,给它起个名字,以后随时调用。
为什么要用函数?说白了,就是「复用」。你写一次,到处用。而且代码更清晰。
定义函数的语法
def calculate_discount(price, discount_rate):
"""
计算折扣后的价格
:param price: 原价
:param discount_rate: 折扣率,比如 0.8 表示八折
:return: 折扣后的价格
"""
final_price = price * discount_rate
return final_price
# 调用函数
result = calculate_discount(100, 0.8)
print(f"折后价:{result}")
嗯,这里要注意:函数名要能表达它的功能。别用func1、do_stuff这种名字。我见过一个项目,全是aaa()、bbb(),维护起来简直噩梦。
函数的参数
参数可以设默认值。这样调用时更灵活。
def connect(host, port=8080):
print(f"连接到 {host}:{port}")
connect("localhost") # 使用默认端口
connect("server.com", 443) # 指定端口
核心原则:一个函数只做一件事。如果函数超过 20 行,你就该考虑拆分了。我在项目中遇到过,有人写了一个 200 行的函数,里面既有数据库查询,又有文件读写,还有邮件发送。这种代码,改一个地方,其他地方全崩。
3.5 综合示例:一个简单的自动化检查脚本
咱们把今天学的串起来。写一个脚本,检查服务器列表是否在线。
import subprocess
def ping_host(ip):
"""检查主机是否在线"""
result = subprocess.run(["ping", "-c", "1", ip], capture_output=True)
return result.returncode == 0
def check_servers(server_list):
"""批量检查服务器"""
online = []
offline = []
for server in server_list:
if ping_host(server):
online.append(server)
print(f"{server} 在线")
else:
offline.append(server)
print(f"{server} 离线")
return online, offline
# 主逻辑
servers = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
online_list, offline_list = check_servers(servers)
if offline_list:
print(f"警告:以下服务器离线:{offline_list}")
else:
print("所有服务器正常")
你看,变量、判断、循环、函数,全用上了。这就是基础语法的威力。
最后送你一句话:基础语法就像练武的「马步」。马步扎不稳,招式再花哨也是花架子。别急着写复杂脚本,先把这四样练熟。我保证,你后面写任何自动化脚本都会顺手很多。