3、基础语法速览:变量与数据类型、条件判断、循环语句、函数定义

好,咱们直接进入正题。这一章是自动化脚本的「地基」。

不管你用 Python 还是 Shell,变量、判断、循环、函数,这四样东西你躲不开。我见过太多新手,一上来就抄网上的复杂脚本,结果报错了一脸懵。为什么?因为基础不牢。

今天我就带你把这四块「硬骨头」啃下来。别怕,咱们用最直白的方式讲。

3.1 变量与数据类型:给数据贴个标签

变量是什么?说白了,就是给数据起个名字。你想想看,你总不能每次都写一长串数字或字符串吧?

核心概念:变量 = 名字 + 值。在 Python 里,你不需要声明类型,直接赋值就行。

我个人习惯用snake_case命名,比如user_nameerror_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 条件判断:让脚本学会「看情况」

脚本不是死板的。它需要根据不同的情况,执行不同的代码。这就是条件判断。

最常用的就是ifelifelse。结构很简单:

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}")

嗯,这里要注意:函数名要能表达它的功能。别用func1do_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("所有服务器正常")

你看,变量、判断、循环、函数,全用上了。这就是基础语法的威力。

最后送你一句话:基础语法就像练武的「马步」。马步扎不稳,招式再花哨也是花架子。别急着写复杂脚本,先把这四样练熟。我保证,你后面写任何自动化脚本都会顺手很多。