DAY1记录
01 python是解释型语言啥意思?
你想搞懂 “Python 是解释型语言” 这个概念,核心就是要明白 Python 代码不是先整体翻译成机器能直接懂的语言,而是边翻译、边执行,这和咱们日常说话交流的模式很像,特别好理解。
一、用大白话解释 “解释型语言”
先给你一个最通俗的比喻:
-
解释型语言(Python):就像你请了一位翻译,你说一句中文(写一行 Python 代码),翻译立刻翻成英文(机器能懂的指令)并告诉对方(电脑执行),说完一句翻一句、执行一句。哪怕中间某句话说错了(代码有 bug),翻译翻到这句才会告诉你 “翻不了”(程序报错),前面的话已经执行完了。
-
对比编译型语言(比如 C 语言):就像你先把整段中文稿子(全部代码)交给翻译,翻译先把所有内容一次性翻成英文(编译成可执行文件),确认没错误后,再把完整的英文稿交给对方(电脑执行)。如果中间有一句话错了,整份稿子都翻不了,更没法执行。
二、Python “解释执行” 的具体过程(新手版)
你写的 Python 代码是纯文本(比如.py文件),电脑本身看不懂,需要靠 “解释器”(Python 安装包自带的工具)来处理:
-
你运行
python 你的代码.py时,解释器启动; -
解释器逐行读取你的代码,先检查语法有没有错(比如少写冒号、缩进错了);
-
语法没错的话,立刻把这一行代码翻译成电脑能执行的字节码(中间语言);
-
字节码交给 Python 虚拟机(PVM)执行,执行完再处理下一行;
-
如果某一行出错(比如把数字和字符串相加),程序会在这一行停止,告诉你错误原因,前面的代码已经执行过了。
三、简单代码示例,直观感受执行特点
比如你写这段 Python 代码:
python
运行
# 示例代码:逐行执行,出错停在错误行
print("第一行代码执行了") # 第一行
a = 10 + "20" # 第二行:数字和字符串相加,语法没错但逻辑错
print("第三行代码执行了") # 第三行
运行结果:
plaintext
第一行代码执行了
Traceback (most recent call last):
File "test.py", line 3, in <module>
a = 10 + "20"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
能明显看到:第一行正常执行并打印了内容,第二行出错后,第三行完全没执行 —— 这就是 “逐行解释、逐行执行” 的核心特征。
四、解释型语言的优缺点(新手需要知道)
优点(对新手友好):
-
入门简单:写完代码直接运行,不用额外的 “编译” 步骤,改一行代码就能立刻看效果;
-
跨平台:一份 Python 代码,在 Windows、Mac、Linux 上都能直接运行(只要装了 Python 解释器);
-
调试方便:出错时能精准定位到哪一行,新手容易排查问题。
缺点(了解即可):
-
运行速度比编译型语言(如 C、C++)慢:因为每次运行都要逐行翻译,而编译型语言只翻译一次;
-
依赖解释器:运行 Python 代码的电脑必须装 Python 解释器,不像编译型语言能生成独立的可执行文件。
总结
-
核心定义:Python 作为解释型语言,代码不提前整体编译,而是由解释器逐行翻译、逐行执行;
-
新手体感:写完代码直接运行,出错只影响当前行及后续,调试和修改都很灵活;
-
关键特点:入门易、跨平台,但运行速度略慢,这也是 Python 适合新手入门的重要原因。
02 蛇形命名法和驼峰命名法是啥玩意?
这两种都是编程里给变量 / 函数 / 类起名的规则,核心区别是连接单词的方式不同,而且 Python 有明确的使用规范,记准了写代码会更专业、易读。
一、先直观看懂两种命名法(举例子最容易懂)
表格
|
命名法类型 |
核心规则 |
例子(描述 “用户名称”) |
例子(描述 “获取用户信息”) | |
|---|---|---|---|---|
|
蛇形命名法(snake_case) |
1. 全部小写2. 单词之间用下划线 _ 连接 |
|
| |
|
驼峰命名法 |
小驼峰(lowerCamelCase) |
1. 第一个单词小写2. 后续单词首字母大写 |
|
|
|
大驼峰(UpperCamelCase/PascalCase) |
1. 所有单词首字母大写2. 无下划线 |
|
|
二、Python 里的官方使用规范(小白必记)
Python 有个通用的编码规范叫 PEP 8,明确规定了不同场景该用哪种命名法,不用自己瞎猜:
-
蛇形命名法(snake_case) → 用在这些地方(90% 的日常使用场景):
-
变量(比如
file_path、error_count) -
函数(比如
read_log_file()、backup_folder()) -
模块 / 包名(比如
import os_path)
示例代码:
python
运行
# 变量用蛇形 server_ip = "192.168.1.100" backup_path = "D:/运维备份" # 函数用蛇形 def check_service_status(url): # 函数内部逻辑 return True -
-
大驼峰命名法(PascalCase) → 只用来定义类(小白前期用得少,但要知道):
-
类名(比如
ServerMonitor、ExcelAnalyzer)
示例代码:
python
运行
# 类名用大驼峰 class ServerMonitor: # 类里的方法还是蛇形 def get_service_info(self): pass -
-
小驼峰命名法 → Python 里几乎不用!这种命名法主要用在 Java/JavaScript 等语言里,Python 官方不推荐,小白直接忽略即可。
三、为什么要遵守命名规则?(小白理解这一点就够)
-
自己看:过 1 个月再翻代码,
check_service_status比checkservicestatus一眼就能看懂意思; -
别人看:如果需要和同事协作,统一的命名规则能让对方快速理解你的代码;
-
符合规范:后续学框架 / 看源码时,所有 Python 项目都按这个规则写,你能快速看懂。
总结
-
核心区别:蛇形用「小写 + 下划线」连接单词,驼峰用「单词首字母大写」连接(分大小驼峰);
-
Python 重点记:变量 / 函数用蛇形(snake_case),类用大驼峰(PascalCase),小驼峰几乎不用;
-
小白落地:写脚本时所有变量 / 函数都按蛇形来,比如之前的
log_file_path、backup_folder,不用纠结其他写法。
03 单引号,双引号,三引号用法区别
一、先看直观对比(小白一眼懂)
表格
|
引号类型 |
写法 |
核心特点 |
适用场景 |
|---|---|---|---|
|
单引号 |
|
最基础,内部不能直接放单引号 |
短字符串、无特殊符号的场景 |
|
双引号 |
|
和单引号功能完全一样,内部不能直接放双引号 |
字符串里要包含单引号时(不用转义) |
|
三引号 |
|
1. 可跨多行2. 内部可直接放单 / 双引号3. 可当注释用 |
多行文本、字符串含大量引号、写注释 |
二、逐个讲清楚(配小白能跑的代码)
1. 单引号(' '):最基础的字符串定义
-
规则:用单引号包裹字符串,内部不能直接写单引号(否则 Python 会认错结束位置);
-
示例:
python
运行
# 正常使用(无内部引号)
name = '运维脚本'
log_key = 'ERROR'
print(name) # 输出:运维脚本
# ❌ 错误:内部直接放单引号会报错
# error_str = '报错信息:服务'异常'' # Python会以为字符串到“服务”就结束了
# ✅ 正确:需要用反斜杠转义(\)
error_str = '报错信息:服务\'异常\''
print(error_str) # 输出:报错信息:服务'异常'
2. 双引号(" "):和单引号等价,解决内部单引号问题
-
规则:功能和单引号完全一样,内部可直接放单引号(不用转义),这是它最常用的优势;
-
示例:
python
运行
# 替代单引号的基础用法
file_path = "D:/运维日志/server.log"
print(file_path) # 输出:D:/运维日志/server.log
# ✅ 核心优势:内部放单引号不用转义(适合运维场景的日志/报错描述)
error_str = "报错信息:服务'异常'"
print(error_str) # 输出:报错信息:服务'异常'
# ❌ 错误:内部直接放双引号会报错
# msg = "提示:"路径不存在""
# ✅ 正确:内部双引号需要转义
msg = "提示:\"路径不存在\""
print(msg) # 输出:提示:"路径不存在"
3. 三引号(''' ''' 或 """"""):多行字符串神器
-
规则:① 可跨多行,不用手动加换行符(\n);② 内部可直接放单 / 双引号,完全不用转义;③ 也能当多行注释用(Python 里 #是单行注释,三引号常用作函数 / 类的说明注释);
-
示例(运维场景超实用):
python
运行
# 场景1:多行日志/报告内容(不用拼换行符)
report = '''
【运维巡检报告】
时间:2026-02-26
状态:
- 服务1:正常
- 服务2:异常(端口'8888'未监听)
'''
print(report) # 输出会保留换行和格式,和写的样子完全一致
# 场景2:内部放单/双引号都不用转义(适合复杂文本)
config = """
[server]
port = 8080
desc = "用户服务"(监听'0.0.0.0')
"""
print(config)
# 场景3:作为多行注释(函数/类的说明)
def backup_folder(source, target):
"""
备份指定文件夹的函数(这是三引号写的注释)
参数:
source: 要备份的文件夹路径
target: 备份存储目录
返回:
布尔值,备份成功返回True
"""
return True
三、小白怎么选?(记住 3 个简单规则)
-
写单行短字符串:单引号 / 双引号随便用(比如
file_name = 'log.txt'或file_name = "log.txt"); -
字符串里要包含单引号:优先用双引号(比如
"服务'异常'"),避免写转义符; -
字符串要跨多行 / 包含大量引号:直接用三引号(比如运维报告、配置文本)。
DAY2记录
01 is 和 == 的区别
Python 中 is 和 == 的区别,核心结论先告诉你:== 比较的是值是否相等,而 is 比较的是内存地址是否相同(即是否是同一个对象)。下面我会用通俗的语言和示例帮你彻底理解。
一、核心定义与本质区别
表格
|
运算符 |
比较目标 |
底层原理 |
通俗理解 |
|---|---|---|---|
|
|
两个对象的值是否相等 |
调用对象的 |
“长得一样吗?” |
|
|
两个对象的身份是否相同 |
比较对象的 |
“是不是同一个东西?” |
二、代码示例:直观理解
基础示例(值相等但身份不同)
# 创建两个值相同但内存地址不同的列表
a = [1, 2, 3]
b = [1, 2, 3]
# == 比较值:相等,返回True
print(a == b) # 输出:True
# is 比较内存地址:不同,返回False
print(a is b) # 输出:False
# 验证id(内存地址)不同
print(id(a)) # 例如:140673251234560
print(id(b)) # 例如:140673251234624
02 字符串格式化常用的3种方法
name = "Alice"
age = 10
# 方法1:f-string(推荐)
print(f"my name is {name},my age is {age}.")
# 方法2:format()
print("my name is {},my age is {}.".format(name, age))
# 方法3:%格式化(老式)
print("my name is %s,my age is %d" % (name, age))
运行结果:三行都会输出 my name is Alice,my age is 10.。
总结
-
f-string(加 f 的写法):最简单、最推荐,直接
{变量名}引用,不用记占位符; -
format () 方法:需要把变量按顺序填在
format()里,别错把变量名写成字符串(比如 "name"); -
% 格式化:老式写法,必须把要替换的变量用
()包起来(元组),否则会报错; -
新手优先用f-string,少踩坑、写起来最快。
03 python常用的10个内置函数
最常用、最实用的 10 个内置函数,每个都用 “一句话说明 + 小白能懂的代码示例” 讲解,全程避开复杂概念:
先明确核心:内置函数
内置函数是 Python 自带的、不用导入任何模块就能直接用的函数,比如print()、len(),是新手最常接触的基础工具。
一、最基础必学(5 个)
1. print () — 输出内容(最常用)
作用:把内容打印到屏幕上
print("hello") # 输出:hello
print("名字:", "Alice") # 输出:名字: Alice
print(10 + 20) # 输出:30(支持计算)
2. len () — 统计 “长度 / 个数”
作用:统计字符串、列表、字典等的元素个数 / 长度
print(len("hello")) # 输出:5(字符串有5个字符)
print(len([1,2,3])) # 输出:3(列表有3个元素)
print(len({"a":1, "b":2})) # 输出:2(字典有2个键值对)
3. type () — 查看数据类型
作用:返回变量 / 数据的具体类型(小白排错常用)
print(type(10)) # 输出:<class 'int'>(整数)
print(type("abc")) # 输出:<class 'str'>(字符串)
print(type([1,2])) # 输出:<class 'list'>(列表)
4. input () — 获取用户输入
作用:暂停程序,等待用户输入内容,返回字符串类型
name = input("请输入你的名字:") # 运行后会提示输入,输入后赋值给name
print("你好,", name) # 输出:你好,XXX(XXX是你输入的内容)
# 注意:输入数字需要转类型
age = int(input("请输入年龄:")) # 转成整数
print(age + 1) # 可以做数字计算
5. range () — 生成数字序列(循环常用)
作用:生成指定范围的整数序列,常和 for 循环搭配
# 用法1:range(结束值) → 从0到结束值-1
for i in range(3):
print(i) # 输出:0、1、2
# 用法2:range(起始值, 结束值) → 从起始值到结束值-1
for i in range(2, 5):
print(i) # 输出:2、3、4
# 用法3:range(起始值, 结束值, 步长)
for i in range(0, 10, 2):
print(i) # 输出:0、2、4、6、8
二、常用进阶(5 个)
6. bool () — 判断 “真 / 假”
作用:把数据转成布尔值(True/False),空 / 0 为 False,其他为 True
print(bool(0)) # 输出:False
print(bool("")) # 输出:False
print(bool([1,2])) # 输出:True
print(bool(None)) # 输出:False(None代表空)
7. int ()/float ()/str () — 类型转换
作用:把数据转换成整数、浮点数、字符串
# 转整数
print(int("123")) # 输出:123(字符串转整数)
print(int(3.9)) # 输出:3(浮点数转整数,只取整数部分)
# 转浮点数
print(float("3.14")) # 输出:3.14(字符串转浮点数)
print(float(10)) # 输出:10.0(整数转浮点数)
# 转字符串
print(str(100)) # 输出:"100"(数字转字符串)
print(str([1,2])) # 输出:"[1, 2]"(列表转字符串)
8. max ()/min () — 找最大 / 最小值
作用:从多个数字 / 列表中找最大、最小值
print(max(1, 5, 3)) # 输出:5
print(min([10, 2, 8])) # 输出:2
print(max("abc")) # 输出:"c"(字符串按字母顺序比)
9. sum () — 求和
作用:计算数字列表 / 序列的总和
print(sum([1,2,3])) # 输出:6
print(sum(range(1, 11)))# 输出:55(1到10的和)
10. sorted () — 排序
作用:对列表、元组等排序,返回新的排序列表(不修改原数据)
nums = [5, 2, 8, 1]
print(sorted(nums)) # 输出:[1,2,5,8](默认升序)
print(sorted(nums, reverse=True)) # 输出:[8,5,2,1](降序)
# 字符串排序(按字母)
print(sorted(["b", "a", "c"])) # 输出:['a','b','c']
总结
-
基础必学:
print()(输出)、len()(统计长度)、type()(查类型)、input()(获取输入)、range()(生成序列); -
进阶常用:
bool()(判真假)、类型转换(int/float/str)、max()/min()/sum()(数值计算)、sorted()(排序); -
所有内置函数都不用导入模块,直接写函数名就能用,是 Python 最基础、最核心的工具。
DAY3记录
01 函数中 *args(可变参数)和 **kwargs(关键字可变参数)区别
核心区别与用法
1. 可变参数 (*args)
-
本质:接收任意数量的位置参数,并将它们打包成一个元组 (tuple)。
-
特点:参数没有名称,仅按顺序接收值。
-
示例代码:
def sum_numbers(*args):
# args 是一个元组,比如调用时传入 1,2,3,args 就是 (1,2,3)
total = 0
for num in args:
total += num
return total
# 调用示例
print(sum_numbers(1, 2, 3)) # 输出:6
print(sum_numbers(10, 20)) # 输出:30
2. 关键字可变参数 (**kwargs)
-
本质:接收任意数量的关键字参数(
key=value形式),并将它们打包成一个字典 (dict)。 -
特点:参数必须有名称(键),值和键一一对应。
-
示例代码:
def print_info(**kwargs):
# kwargs 是一个字典,比如调用时传入 name="张三", age=20,kwargs 就是 {"name":"张三", "age":20}
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用示例
print_info(name="张三", age=20, city="北京")
# 输出:
# name: 张三
# age: 20
# city: 北京
3. 两者结合使用
可以同时使用 *args 和 **kwargs,接收任意位置参数和关键字参数,这也是 Python 中 “万能参数” 的常见写法:
python
运行
def func(*args, **kwargs):
print("位置参数元组:", args)
print("关键字参数字典:", kwargs)
func(1, 2, name="李四", score=90)
# 输出:
# 位置参数元组: (1, 2)
# 关键字参数字典: {'name': '李四', 'score': 90}
总结
-
数据类型不同:
*args打包成元组,**kwargs打包成字典。 -
传参形式不同:
*args接收无名称的位置参数(如1,2,3),**kwargs接收有名称的关键字参数(如name="张三")。 -
核心用途:
*args解决 “不确定要传多少个位置参数” 的问题,**kwargs解决 “不确定要传多少个关键字参数” 的问题。

7585

被折叠的 条评论
为什么被折叠?



