章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • python

    • python基础

      • python基础知识
      • python基础较难的15个知识点
    • FastAPI

    • python每日练习脚本

    • python3给防火墙添加放行
    • python生成部署脚本
    • python将多个文件内容输出到一个文件中
    • 使用 Aligo 定时备份服务器文件
    • python监控日志文件并发送钉钉告警
    • python监控数据库脚本并发送钉钉告警
    • 使用python编写自动化发布脚本
    • 查询redis列表某个元素
    • centos7安装python3
    • python环境管理工具介绍
    • conda安装和镜像源配置
    • pip更换国内源
    • python爬虫
    • python环境启动服务报错缺少glibc库版本
    • 监控目录或文件变化
    • 批量更改文件
    • python引用数据库
  • shell

  • go

  • 编程
  • python
  • python基础
章工运维
2024-12-04

python基础较难的15个知识点

# 1、面向对象编程(Object-Oriented Programming, OOP)

面向对象编程是一种程序设计思想,它将代码组织成可重用的对象,并通过定义类、创建对象和调用方法来实现。

类与对象

类是一个模板,描述了对象的属性和操作。对象是类的实例,可以访问类的属性和方法。

示例:

class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        print(f"{self.name} is barking!")
my_dog = Dog("Buddy")
my_dog.bark()  # 输出结果: Buddy is barking!
1
2
3
4
5
6
7

解释:

init 方法是类的构造函数,用于初始化对象的属性。

bark 方法是类的一个方法,用于执行特定的操作。

继承

继承允许创建一个新类,从现有的类中继承属性和方法。子类可以重写或扩展父类的功能。

示例:

class Animal:
    def eat(self):
        print("The animal is eating.")
class Cat(Animal):
    def meow(self):
        print("Meow!")
my_cat = Cat()
my_cat.eat()  # 输出结果: The animal is eating.
my_cat.meow()  # 输出结果: Meow!
1
2
3
4
5
6
7
8
9

解释:

Cat 类继承了 Animal 类,因此 Cat 类的实例可以调用 eat 方法。

meow 方法是 Cat 类特有的方法。

多态

多态允许不同类的对象对相同的方法做出不同的响应。这使得代码更灵活、可扩展和可维护。

示例:

class Shape:
    def draw(self):
        raise NotImplementedError()
class Circle(Shape):
    def draw(self):
        print("Drawing a circle.")
class Rectangle(Shape):
    def draw(self):
        print("Drawing a rectangle.")
def draw_shape(shape):
    shape.draw()
circle = Circle()
rectangle = Rectangle()
draw_shape(circle)  # 输出结果: Drawing a circle.
draw_shape(rectangle)  # 输出结果: Drawing a rectangle.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

解释:

Shape 类定义了一个 draw 方法,但没有具体实现,子类必须实现这个方法。

Circle 和 Rectangle 类分别实现了 draw 方法。

draw_shape 函数接受一个 Shape 对象并调用其 draw 方法。

# 2、迭代器与生成器

迭代器和生成器是 Python 中处理可迭代对象的重要概念,它们可以逐个地处理序列中的元素。

迭代器

迭代器是一个实现了 iter() 和 next() 方法的对象。它通过 next() 方法返回序列中的下一个元素,并在没有更多元素时引发 StopIteration 异常。

示例:

numbers = [1, 2, 3]
iter_numbers = iter(numbers)
print(next(iter_numbers))  # 输出结果: 1
print(next(iter_numbers))  # 输出结果: 2
print(next(iter_numbers))  # 输出结果: 3
1
2
3
4
5

解释:

iter 函数将列表转换为迭代器。

next 函数获取迭代器的下一个元素。

生成器

生成器是一种特殊的迭代器,它使用 yield 关键字来定义。生成器函数会暂停执行并返回一个值,然后在下一次访问时继续执行。这样可以节省内存,并使代码更简洁。

示例:

def even_numbers(n):
    for i in range(n):
        if i % 2 == 0:
            yield i
for num in even_numbers(10):
    print(num)  # 输出结果: 0, 2, 4, 6, 8
1
2
3
4
5
6

解释:

even_numbers 是一个生成器函数,使用 yield 关键字返回偶数。

for 循环遍历生成器,每次调用 yield 时生成一个值。

# 3、异常处理

异常处理是一种捕获和处理程序中出现的错误的机制。Python 提供了 try-except**-finally 语句来处理异常。**

示例:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("除零错误!")
finally:
    print("清理代码。")
1
2
3
4
5
6

解释:

try 块中的代码可能会引发 ZeroDivisionError 异常。

except 块捕获并处理 ZeroDivisionError 异常。

finally 块中的代码无论是否发生异常都会执行。‍

# 4、并发与多线程

并发和多线程是指同时执行多个任务的能力。

并发

并发是指程序设计的一种方式,使得多个任务在同一时间段内交替执行。Python 中的 threading 模块可以用于实现并发。

示例:

import threading
def print_numbers():
    for i in range(1, 6):
        print(i)
def print_letters():
    for letter in ['a', 'b', 'c', 'd', 'e']:
        print(letter)
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)
t1.start()
t2.start()
t1.join()
t2.join()
1
2
3
4
5
6
7
8
9
10
11
12
13

解释:

print_numbers 和 print_letters 是两个函数,分别打印数字和字母。

threading.Thread 创建两个线程 t1 和 t2,分别执行这两个函数。

start 方法启动线程。

join 方法等待线程执行完毕。

多线程

多线程是指在一个进程中运行多个线程的能力。Python 使用全局解释器锁(GIL)来确保同一时间只有一个线程执行 Python 字节码。因此,在 CPU 密集型任务中,多线程可能无法实现真正的并行。

# 5、文件操作和异常处理

文件操作是一种常见的编程任务,而异常处理则用于在文件操作中处理潜在的错误。

示例:

try:
    with open("example.txt", "r") as file:
        contents = file.read()
except FileNotFoundError:
    print("文件未找到!")
except PermissionError:
    print("权限被拒绝!")
else:
    print(contents)
finally:
    print("清理代码。")
1
2
3
4
5
6
7
8
9
10
11

解释:

with 语句确保文件在操作完成后自动关闭。

try 块中的代码尝试打开并读取文件。

except 块捕获并处理 FileNotFoundError 和 PermissionError 异常。

else 块在没有异常时执行。

finally 块中的代码无论是否发生异常都会执行。‍

# 6、迭代与推导式

迭代是指遍历序列中的元素的过程。Python 提供了多种迭代方式,如 for 循环、列表推导式、生成器表达式等。

示例:

fruits = ["apple", "banana", "cherry"]
# 使用 for 循环迭代
for fruit in fruits:
    print(fruit)
# 使用列表推导式创建新列表
upper_fruits = [fruit.upper() for fruit in fruits]
print("大写的水果列表:", upper_fruits)  # 输出结果: ['APPLE', 'BANANA', 'CHERRY']
# 使用生成器表达式计算总长度
total_length = sum(len(fruit) for fruit in fruits)
print("总长度:", total_length)  # 输出结果: 18
1
2
3
4
5
6
7
8
9
10

解释:

for 循环遍历列表中的每个元素。

列表推导式 [fruit.upper() for fruit in fruits] 创建一个新列表,其中每个元素都是原列表中对应元素的大写形式。

生成器表达式 sum(len(fruit) for fruit in fruits) 计算列表中所有元素的总长度。

# 7、装饰器(Decorators)

装饰器是一种特殊类型的函数,可以修改其他函数的行为或功能,而无需改变其源代码。

示例:

def my_decorator(func):
    def wrapper():
        print("在函数之前执行的代码")
        func()
        print("在函数之后执行的代码")
    return wrapper
@my_decorator
def say_hello():
    print("Hello!")
say_hello()
# 输出结果:
# 在函数之前执行的代码
# Hello!
# 在函数之后执行的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14

解释:

my_decorator 是一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数 wrapper。

@my_decorator 语法糖表示 say_hello 函数被 my_decorator 装饰。

当调用 say_hello 时,实际上是调用了 wrapper 函数。‍

# 8、上下文管理器(Context Managers)

上下文管理器用于设置和清理资源,通常用于文件操作和数据库连接等场景。

示例:

class MyContextManager:
    def __enter__(self):
        print("进入上下文")
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("退出上下文")
with MyContextManager() as manager:
    print("在上下文中执行的代码")
# 输出结果:
# 进入上下文
# 在上下文中执行的代码
# 退出上下文
1
2
3
4
5
6
7
8
9
10
11
12

解释:

MyContextManager 类实现了 enter 和 exit 方法。

with 语句确保在进入和退出上下文时分别调用 enter 和 exit 方法。

# 9、闭包(Closures)

闭包是指一个函数对象,它记录了其包含的自由变量的环境。

示例:

def outer_function(msg):
    def inner_function():
        print(msg)
    return inner_function
hi_func = outer_function("Hi")
bye_func = outer_function("Bye")
hi_func()  # 输出结果: Hi
bye_func()  # 输出结果: Bye
1
2
3
4
5
6
7
8

解释:

outer_function 是一个外部函数,它定义了一个内部函数 inner_function。

inner_function 访问了外部函数的参数 msg。

outer_function 返回 inner_function,从而形成了闭包。‍

# 10、属性访问(Property)

属性访问允许你控制对类属性的访问,通常用于实现数据验证和封装。

示例:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    @property
    def age(self):
        return self._age
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("年龄不能为负数")
        self._age = value
person = Person("Alice", 30)
print(person.age)  # 输出结果: 30
person.age = 35
print(person.age)  # 输出结果: 35
# person.age = -1  # 抛出 ValueError: 年龄不能为负数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

解释:

@property 装饰器将 age 方法转换为只读属性。

@age.setter 装饰器允许设置 age 属性,并进行数据验证。‍

# 11、类方法和静态方法(Class Methods and Static Methods)

类方法和静态方法是类中的特殊方法,用于处理类级别的操作。

示例:

class MyClass:
    count = 0
    def __init__(self, name):
        self.name = name
        MyClass.count += 1
    @classmethod
    def get_count(cls):
        return cls.count
    @staticmethod
    def info():
        print("这是一个静态方法")
obj1 = MyClass("Obj1")
obj2 = MyClass("Obj2")
print(MyClass.get_count())  # 输出结果: 2
MyClass.info()  # 输出结果: 这是一个静态方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

解释:

get_count 是一个类方法,可以通过类或实例调用。

info 是一个静态方法,与类的状态无关,可以通过类调用。‍

# 12、描述符(Descriptors)

描述符是一种协议类,用于管理属性的访问。描述符协议包括 get、set 和 delete 方法。

示例:

class Descriptor:
    def __get__(self, instance, owner):
        print("获取属性")
        return instance._value
    def __set__(self, instance, value):
        print("设置属性")
        instance._value = value
    def __delete__(self, instance):
        print("删除属性")
        del instance._value
class MyClass:
    value = Descriptor()
    def __init__(self, value):
        self.value = value
obj = MyClass(10)
print(obj.value)  # 输出结果: 获取属性\n10
obj.value = 20  # 输出结果: 设置属性
del obj.value  # 输出结果: 删除属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

解释:

Descriptor 类实现了描述符协议。

MyClass 类中的 value 属性是一个描述符。

通过 obj.value 访问、设置和删除属性时,会调用描述符的相应方法

# 13、元类(Metaclasses)

元类是类的类,用于创建和控制类的行为。

示例:

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"Creating class {name}")
        return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
    pass
obj = MyClass()
1
2
3
4
5
6
7

解释:

Meta 是一个元类,重写了 new 方法。

MyClass 使用 Meta 作为元类,当创建 MyClass 时,会调用 Meta 的 new 方法。

# 14、递归(Recursion)

递归是一种函数调用自身的编程技术,通常用于解决分治问题。

示例:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
print(factorial(5))  # 输出结果: 120
1
2
3
4
5
6

解释:

factorial 函数是一个递归函数,计算阶乘。

基本情况是 n == 0,返回 1。

递归情况是 n > 0,返回 n * factorial(n - 1)。‍

# 15、动态导入(Dynamic Import)

动态导入允许在运行时根据需要导入模块。

示例:

module_name = "math"
module = __import__(module_name)
print(module.sqrt(16))  # 输出结果: 4.0
1
2
3

解释:

import 函数用于动态导入模块。

module 是导入的模块对象,可以通过 module.sqrt 调用模块中的函数。

# 总结

学习路径:

基础Python → 运维技能 → 系统编程 → 网络编程 → 自动化运维 → 容器编排

对于运维工程师来说,编写模块化 Python 代码需要遵循几个关键的设计思路和最佳实践:

  1. 架构设计思路
# 运维代码设计的核心思路
# 1. 问题拆解
# 2. 模块职责划分
# 3. 灵活配置
# 4. 错误处理
# 5.日志记录

1
2
3
4
5
6
7
  1. 模块化设计原则
  • 单一职责原则:每个类/函数只做一件事
  • 高内聚:模块内部功能紧密相关
  • 低耦合:模块之间依赖最小化
  • 可配置性:通过配置文件调整行为
  • 可扩展性:方便添加新功能

原文链接 (opens new window)

微信 支付宝
上次更新: 2024/12/06, 17:08:41

← python基础知识 FastAPI-快速入门1→

最近更新
01
shell脚本模块集合
05-13
02
生活小技巧(认知版)
04-29
03
生活小技巧(防骗版)
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式