前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入浅出一下Python函数的核心概念与进阶应用

深入浅出一下Python函数的核心概念与进阶应用

作者头像
盛透侧视攻城狮
发布于 2025-04-14 01:03:02
发布于 2025-04-14 01:03:02
13900
代码可运行
举报
运行总次数:0
代码可运行

本篇技术博文摘要 🌟

  • 本文系统梳理了Python函数的核心知识点,从基础概念到高级特性,构建了完整的函数编程知识体系。内容涵盖:变量作用域的局部与全局划分、函数注释的规范写法、参数传递中值与引用的区别、匿名函数的灵活应用,以及Python 3.8的新特性(如海象运算符)。进一步深入偏函数嵌套函数闭包的实现,详解装饰器的语法与进阶用法(参数传递、多装饰器顺序、返回值处理)。最后结合高阶函数(mapfilterreduce)实现数据批量操作,并通过综合实验——工资计算系统,串联知识点,实践员工信息管理与月薪计算逻辑。

引言 📘

  • 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。
  • 我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员,希望能够与各位在此共同成长。

01-函数中变量的作用域

  • 原理:Python变量作用域分为局部作用域(函数内部)和全局作用域(函数外部)。
  • 作用:理解变量可见性和生命周期
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 100


def test_01():
    a = 10
    b = 20
    print(a)
    print(b)


def test_02():
    print(a)


def test_03():
   
    global a
    a += 100
    print(a)


test_03()
# test_02()
# test_01()
# print(b)

'''
全局变量:声明在函数外部的变量称为全局变量

'''

  • 函数内部可以使用全局变量,但是不能修改,如果一定要在函数内部修改全局变量,那么global

02-函数注释

  • 原理:使用文档字符串("""...""")和类型注解(Python 3.5+)为函数添加说明。
  • 作用:提高代码可读性,IDE可识别提示
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def add(a: int, b: int) -> int:
    """返回两个整数的和"""
    return a + b
print(add.__doc__)  # 输出:返回两个整数的和

03-值传递引用传递

  • 原理
    • 值传递:在传递参数的时候,仅仅是将自己的值拷贝了一份,传递给了函数的参数,变量不会改变
    • 引用传递:在传递参数时,传地址,函数形参获取的值也是同一块内存
  • 作用:理解参数修改对原数据的影响
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_01(x, y):
    x += 10
    y += 100
    print(x)
    print(y)


a = 10
b = 20
test_01(a, b)
print(a)
print(b)



def test_02(nums):
    print(id(nums))
    nums.append(10)
    nums.append(100)
    print(nums)


list1 = [1, 2, 3]
print(id(list1))
test_02(list1)
print(list1)

04-Py函数以及匿名函数

原理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lambda [arg1,arg2……]: 代码块(函数体)

存在函数作为参数传递给函数,并且又不想让外界访问,而且参数函数足够简单,即可以定义为匿名函数(lambda表达式)

作用:简化代码,常用于高阶函数参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def now():
    print("1111111111")

f = now
a = f
# __name__,拿到函数的名字
print(f.__name__)
print(a.__name__)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_func(add):
     result = add(1, 2)
     print(result)



def compute(a,b):
     return a+b


test_func(compute)


test_func(lambda a, b: a + b)

  • function(){}
  • 在python中,将一个函数作为参数传到另一个函数中去
  • 函数的参数数据类型:只要是一个对象就可以
  • 函数本身就是一个对象

05-python3.8新特性

  • 原理:Python 3.8引入海象运算符(:=)、位置参数限定符(/)等。
  • 作用:提升代码简洁性和灵活性
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 海象运算符
if (n := len([1,2,3])) > 2:
    print(f"长度是{n}")  # 输出:长度是3

# 位置参数
def func(a, b, /, c):
    print(a, b, c)
func(1, 2, c=3)  # 正确
func(a=1, b=2, c=3)  # 报错:a,b必须位置参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 声明函数参数类型
# def 函数名(a,b)

def add(x: int, y: int) -> int:
    return x + y


print(add(1, 2))
print(add("a", "b"))

06-偏函数

  • 原理:使用 functools.partial 固定函数的部分参数,生成新函数。
  • 作用:简化参数传递。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from functools import partial
def power(base, exp):
    return base ** exp

square = partial(power, exp=2)
print(square(5))  # 输出25
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# functools模块提供很多方法,其中有一个就是偏函数

# int(3.14)

# def int2(x, base=2):
#     return int(x, base)
#
# print(int2("10010",10))

import functools

int2 = functools.partial(int, base=2)

print(int2("100101"))

07-函数的嵌套

  • 原理:在函数内部定义另一个函数。
  • 作用:封装逻辑,限制函数作用域。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def outer():
    def inner():
        print("内部函数")
    inner()

outer()  # 输出:内部函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fun1():
    b = 20
    def fun2():   #fun2=def(){}
        print(b)
    return fun2

a = fun1()
a()
a()
a()

  • 综上所述:
    • 1、函数可以作为返回值进行返回
    • 2、函数可以作为参数进行传进
    • 3、函数名本质上是一个变量名,指向函数的内存地址

08-闭包

  • 原理:一个函数嵌套一个函数,内层函数用到外层函数的局部变量,内层函数就被称为闭包
  • 作用:保留状态,实现数据隐藏。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

c = counter()
print(c(), c())  # 输出1, 2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def outer():
    a = 1

    def inner():
        #内层函数如果要改变外层函数局部变量的值,需要使用nonlocal关键字赋予权限
        nonlocal a
        a += 1
    inner()
    print(a)

    return inner

outer()

# 可以让一个变量常驻在内存当中
# 可以避免全局变量被修改

09-装饰器

原理:装饰器本质上是一个闭包,作用是不改变原有函数的前提下,为函数添加新的功能,但是源代码不改变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
雏形:
def wrapper(目标函数):
    def inner():
        之前添加的功能
        目标函数()
        之后添加的功能
    return inner

作用:无侵入式增强功能(如用户登录、日志、计时)

10-装饰器参数

  • 原理:装饰器本身支持参数传递。
  • 作用:动态配置装饰器行为。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def guanjia(fn):
    # 定义一个名为guanjia的装饰器函数,它接受一个函数作为参数
    print("这波传入的函数是", fn.__name__)
    # 打印传入函数的名称,方便调试和理解装饰器的工作过程

    def inner(*args, **kwargs):
        # 定义一个内部函数inner,它使用了可变参数*args和**kwargs
        # *args用于接收任意数量的位置参数,**kwargs用于接收任意数量的关键字参数
        print("开挂")
        # 在调用被装饰的函数之前,打印“开挂”信息
        fn(*args, **kwargs)
        # 调用被装饰的函数,并将接收到的参数传递给它
        print("关闭外挂")
        # 在调用被装饰的函数之后,打印“关闭外挂”信息

    return inner
    # 返回内部函数inner,这样当使用@guanjia语法时,实际上是将被装饰的函数替换为inner函数

@guanjia  # play_wz = guanjia(play_wz)
# 使用@guanjia语法将guanjia装饰器应用到play_wz函数上
# 这相当于执行了play_wz = guanjia(play_wz),将play_wz函数替换为guanjia返回的inner函数
def play_wz(uname, password):
    # 定义一个名为play_wz的函数,它接受两个参数:用户名和密码
    print("来和妲己玩耍吧")
    # 打印游戏相关的提示信息
    print(f"用户名{uname},密码是{password}")
    # 打印用户名和密码信息

@guanjia
# 使用@guanjia语法将guanjia装饰器应用到play_dnf函数上
def play_dnf(uname, pwd, g):
    # 定义一个名为play_dnf的函数,它接受三个参数:用户名、密码和技能
    print("你好啊,我是赛利亚,今天又是美好的一天")
    # 打印游戏相关的提示信息
    print(f"用户名{uname},密码是{pwd},技能是{g}")
    # 打印用户名、密码和技能信息

play_wz("zhangsan", "123456")
# 调用被装饰后的play_wz函数,传入用户名和密码
# 实际执行的是inner函数,会先打印“开挂”,然后调用原始的play_wz函数,最后打印“关闭外挂”

play_dnf("lisi", "lisisi", "吹")
# 调用被装饰后的play_dnf函数,传入用户名、密码和技能
# 同样会先打印“开挂”,然后调用原始的play_dnf函数,最后打印“关闭外挂”

  • 装饰器guanjia 是一个装饰器函数,它可以在不修改原函数代码的情况下,为原函数添加额外的功能(如打印 “开挂” 和 “关闭外挂” 信息)。
  • 可变参数inner 函数使用了 *args**kwargs 可变参数,这样可以处理任意数量和类型的参数,使得装饰器可以应用到不同参数的函数上。
  • 函数调用:调用被装饰后的函数时,实际上是调用了 inner 函数,inner 函数会在调用原函数前后执行额外的操作。

11-一个函数被多个装饰器装饰

  • 原理:装饰器按从下到上的顺序执行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义装饰器函数 wrapper1,它接收一个函数作为参数
def wrapper1(fn):
    # 定义内部函数 inner,用于包装被装饰的函数
    def inner(*args, **kwargs):
        # 在调用被装饰函数之前,打印特定信息
        print("11111111111111111")
        # 调用被装饰的函数,并传入参数
        fn(*args, **kwargs)
        # 在调用被装饰函数之后,打印特定信息
        print("111111111111111111")
    # 返回内部函数 inner
    return inner

# 定义装饰器函数 wrapper2,它接收一个函数作为参数
def wrapper2(fn):
    # 定义内部函数 inner,用于包装被装饰的函数
    def inner(*args, **kwargs):
        # 在调用被装饰函数之前,打印特定信息
        print("2222222222222222")
        # 调用被装饰的函数,并传入参数
        fn(*args, **kwargs)
        # 在调用被装饰函数之后,打印特定信息
        print("222222222222222222")
    # 返回内部函数 inner
    return inner

# 使用 wrapper1 装饰 wrapper2 装饰后的 target 函数
# 首先执行 @wrapper2,将 target 函数替换为 wrapper2.inner
# 然后执行 @wrapper1,将 wrapper2.inner 作为参数传入 wrapper1,得到 wrapper1.inner
@wrapper1  
@wrapper2  
# 定义目标函数 target
def target():
    # 打印函数内的信息
    print("我是函数")

# 调用被装饰后的 target 函数,实际上调用的是 wrapper1.inner
target()

# 以下是使用 time 模块的代码
# 导入 time 模块,该模块提供了各种与时间相关的函数
import time
# 打印当前的时间戳,即从 197011 日午夜(UTC)开始到现在的秒数
print(time.time())
# 让程序暂停执行 2 秒
time.sleep(2)

12-装饰器函数返回值问题

  • 装饰器 guanjia:在调用被装饰的函数前后分别打印提示信息,并返回被装饰函数的返回值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义一个名为guanjia的装饰器函数,它接收一个函数作为参数
def guanjia(fn):
    # 定义内部函数inner,用于包裹被装饰的函数
    def inner(*args, **kwargs):
        # 在调用被装饰函数前打印提示信息
        print("11111111111111111")
        # 调用被装饰的函数,并将其返回值赋给变量ret
        ret = fn(*args, **kwargs)
        # 在调用被装饰函数后打印提示信息
        print("111111111111111111")
        # 返回被装饰函数的返回值
        return ret
    # 返回内部函数inner
    return inner

# 定义一个名为rizhi的装饰器函数,它接收一个函数作为参数
def rizhi(fn):
    # 定义内部函数inner,用于包裹被装饰的函数
    def inner(*args, **kwargs):
        # 在调用被装饰函数前打印日志信息
        print("玩了一次游戏")
        # 调用被装饰的函数
        fn(*args, **kwargs)
    # 返回内部函数inner
    return inner

# 使用guanjia装饰器装饰play_wz函数
# 相当于执行了play_wz = guanjia(play_wz)
@guanjia
# 定义一个名为play_wz的函数,接收用户名和密码作为参数
def play_wz(uname, password):
    # 打印用户名和密码信息
    print(f"用户名是{uname},密码是{password}")
    # 打印游戏相关提示信息
    print("来和妲己玩耍吧")
    # 返回游戏相关的字符串
    return "妲己玩的很666"

# 调用被装饰后的play_wz函数,并将返回值赋给变量a
a = play_wz('gouxin', 123456)
# 打印变量a的值
print(a)

# 使用rizhi装饰器装饰yonghu函数
# 相当于执行了yonghu = rizhi(yonghu)
@rizhi
# 定义一个名为yonghu的函数,接收名字和密码作为参数
def yonghu(name, pwd):
    # 打印名字和密码信息
    print(f"名字为{name},密码是{pwd}")
    # 打印相关提示信息
    print("ljs帅到飞起")
    # 返回一个字符串
    return "蔡志恒我直接爱思了"

# 调用被装饰后的yonghu函数,并将返回值赋给变量b
b = yonghu('caizhiheng', 6666)
# 打印变量b的值
print(b)

13-高阶函数map.py

原理:从可迭代对象中获取第一个元素,作为函数的参数,传入函数中,将函数执行后返回结果作为生成对象中的第一个元素,最终返回一个可迭代对象

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 map(将来可以调用的,可迭代数据)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# map()
a = map(lambda x: x * x, [1, 2, 3])  # [1,4,9]
print(list(a))
for i in a:
    print(i)

# map(将来可以调用的,可迭代数据)

'''


'''


# b = map(lambda x,y:x+y,[1,2,3],[4,5,6])
# for i in b:
#     print(i)


def f1(x, y):
    return x, y


l1 = [0, 1, 2, 3, 4, 5, 6]
l2 = ['sun', 'm', 't', 'w', 't', 'f', 's']

l3 = map(f1, l1, l2)
print(list(l3))

  • 第一个 map 示例:使用 lambda 函数对列表 [1, 2, 3] 中的元素进行平方操作,将 map 返回的迭代器转换为列表打印后,迭代器变空,后续遍历无输出。
  • 注释掉的 map 示例:展示了 map 处理两个可迭代对象的情况,使用 lambda 函数对两个列表对应位置元素相加。
  • 自定义函数 f1map:定义函数 f1 接受两个参数并返回元组,使用 mapf1 应用到 l1l2 对应元素上,最后将结果迭代器转换为列表打印。

14-filter函数

  • 原理:filter(func, iterable) 过滤满足条件的元素,返回迭代器。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# filter()   过滤对指定的序列执行过滤

a = filter(lambda x: x % 2, [1, 2, 3, 4])
print(list(a))
# 只要成立(为真:0为假,其余数字为真),就保留

15-reduce函数

  • 原理:用上一次计算的结果作为下一次传入的x值,如果上一次没有计算结果,则将可迭代数据的强两个元素分别作为x,y传入,如果有额外数据,会作为第一次传入的x值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from functools import reduce

a = reduce(lambda x, y: x + y, [1, 2, 7, 4],5)
print(a)

综合实验:设计一个工资计算系统,录入员工信息,计算员工的月薪

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设计一个工资计算系统,录入员工信息,计算员工的月薪
from abc import ABCMeta, abstractmethod


class Employee(metaclass=ABCMeta):  # 抽象类不能实例化,但是子类可以继承
    # 继承抽象类

    def __init__(self, name):
        self.name = name

    # 将这个方法变成抽象方法,对象不能直接调用,但是子类可以重写这个方法
    @abstractmethod
    def give_salary(self):
        pass


class Magnaer(Employee):
    # 创建一个部门经理类,部门经理每月固定月薪666666666666666.00元

    def give_salary(self):
        return 666666666666666.00


class Programmer(Employee):
    # 创建一个程序员类,添加一个工作时间属性为 程序员计时支付月薪,每小时2元
    # super().__init__() 就是调用父类的init方法, 同样可以使用super()去调用父类的其他方法。

    def __init__(self, name, work_hour=0):
        super(Programmer, self).__init__(name)
        self.work_hour = work_hour

    def give_salary(self):
        return self.work_hour * 2


class SalesMan(Employee):
    # 创建一个销售员类,添加一个销售员按照1元底薪加上销售额5%的提成支付月薪的销售属性

    def __init__(self, name, sales=0):
        super(SalesMan, self).__init__(name)
        self.sales = sales

    def give_salary(self):
        return self.sales * 0.05 + 1


if __name__ == '__main__':
    Salary = [Magnaer('任正非'), Programmer('马化腾'), Programmer('雷军'), Programmer('埃隆·马斯克'), SalesMan('马云'),
              SalesMan('蒂姆库克')]
    for i in Salary:
        if isinstance(i, Programmer):
            i.work_hour = float(input(f'请输入{i.name}工作时长:'))
        elif isinstance(i, SalesMan):
            i.sales = float(input(f'请输入{i.name}的销售额:'))
        print(f'{i.name}的本月月薪为¥{i.give_salary()} ')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
k8s安装redis主从版
在 K8s 中,使用 helm 部署 redis 主从模式,一主可以有多从,可指定任意数量的从节点,扩容缩容都很方便。
summerking
2022/10/27
1.8K0
helm 构建 chart
如果我们想要在 Kubernetes 集群中部署两个副本的 Ghost,可以直接应用下面的资源清单文件即可:
看、未来
2022/05/20
2.1K0
helm 构建 chart
Apache Apisix初体验
Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,目前已经是 Apache 的顶级项目。提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等。可以使用 APISIX 来处理传统的南北流量以及服务之间的东西向流量。
mikelLam
2022/10/31
1.1K0
Apache Apisix初体验
【K8S专栏】Kubernetes应用访问管理
在Kubernetes中,提供了Service和Ingress两种对象来实现应用间访问或外部对集群应用访问,这两种对象在实际的工作中会时长使用,非常重要的对象。
没有故事的陈师傅
2022/12/06
1.7K0
【K8S专栏】Kubernetes应用访问管理
Kubernetes生产架构详解
注意 本文,只是笔者针对Kubernetes生产环境运行的一些关于架构设计和实现方案的总结,内容很粗糙,后续会不断完善。
kubernetes中文社区
2019/06/24
1.4K0
Kubernetes生产架构详解
k8s实践(12)--K8s service服务详解
Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。 通过 ReplicationController 能够动态地创建和销毁 Pod(例如,需要进行扩缩容,或者执行)。 每个 滚动升级 Pod 都会获取它自己的 IP 地址,即使这些 IP 地址不总是稳定可依赖的。 这会导致一个问题:在 Kubernetes 集群中,如果一组 Pod(称为 backend)为其它 Pod (称为 frontend)提供服务,那么那些 frontend 该如何发现,并连接到这组 Pod 中的哪些 backend 呢?
黄规速
2022/04/14
9.5K0
k8s实践(12)--K8s service服务详解
后Kubernetes时代的微服务
听说过服务网格并试用过Istio的人可能都会有以下5个疑问。 (1)为什么Istio 要绑定Kubernetes呢? (2)Kubernetes和服务网格分别在云原生中扮演什么角色? (3)Istio扩展了Kubernetes的哪些方面?解决了哪些问题? (4)Kubernetes、xDS协议(Envoy、MOSN等)与Istio之间是什么关系? (5)到底该不该使用Service Mesh? 本文将带读者梳理清楚 Kubernetes、xDS协议与Istio服务网格之间的内在联系。此外,本文还将介绍Kub
博文视点Broadview
2022/07/12
8610
后Kubernetes时代的微服务
【K8s】Kubernetes 服务发现之 Ingress
Ingress 是 Kubernetes 提供的一种服务发现机制,主要作用是为集群外部访问集群内部服务提供访问入口,通过制定 Ingress 策略管理 HTTP 路由,将集群外部的访问请求反向代理到集群内部不同 Service 对应的 Endpoint(即 Pod)上。
行者Sun
2024/09/02
2850
【K8s】Kubernetes 服务发现之 Ingress
基于helm部署Kubernetes下的高可用redis
笔者用过 helm,它是Kubernetes下的包管理器,相当于apt-get、yum、brew这样的软件工具,用的是 helm(v2)版本,下面所介绍的 helm指的都是 v2 版本。通过使用 helm 解决了安装和部署复杂的 Kubernetes 应用,比如经常使用的 memecache、redis、MySQL。也解决过部分粉丝在用 helm 部署程序过程遇到一些问题,其中有几个粉丝一再建议我写一篇文章介绍下 helm,其实我是不想写的,究其原因有两点,第一、helm 官网和镜像仓库介绍非常详尽,当然安装也非常简单。第二、helm 如果想深入使用,必须搞明白 go 的模板语法,对于大多数用户来说,只是用来管理不同环境的编排文件,现在又要学一门模板语言,有一定的学习成本,所以就这点我是不太认可 helm 的。当然很多人会说,不如直接选择 Kubernetes 集成的 Kustomize,不用安装任何多余程序,即可完成不同环境应用配置和打包,但从本质上来说,helm 和 Kustomize 是有一定区别的,Kustomize 利用base+overlay的思想生成最终的描述文件,对原有yaml 编排文件不用怎么修改,即可无缝集成,使用上更简单。而 helm 则又分为仓库、helm 客户端、tiller 服务端,使用过程中,在底层定义模板,外层赋值。使用起来更复杂,但不可否认 helm 更强大,它不仅能够完成不同环境应用的打包和配置,更是对应用进行全生命周期的管理,比如查看历史部署版本、回退、升级等;另外支持应用程序的查找、以及应用程序依赖关系定制化等功能。之前介绍过 Kustomize 的使用,下文结合 redis-ha 安装部署介绍下 helm,使你对 Kustomize 和 helm 之间的功能点有一个更清楚的认识。
用户5166556
2020/06/19
2.7K0
基于helm部署Kubernetes下的高可用redis
kubernetes1.22安装使用ingress-nginx
我们已经了解了 Ingress 资源对象只是一个路由请求描述配置文件,要让其真正生效还需要对应的 Ingress 控制器才行,Ingress 控制器有很多,这里我们先介绍使用最多的 ingress-nginx,它是基于 Nginx 的 Ingress 控制器。
我是阳明
2021/12/27
3.4K0
kubernetes1.22安装使用ingress-nginx
Kubernetes | Service - Ingress
Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略——通常称为微服务。这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector。
Zkeq
2023/05/11
6260
Kubernetes | Service - Ingress
Redis On K8s
考虑到我们这很多微服务依赖的redis的压力并不大(大量1-4G实例),轻量级的redis主从即可满足需求,使用社区现有解决方案,基本不会增加运维成本。
保持热爱奔赴山海
2022/01/11
1.5K0
Redis On K8s
Kubernetes(K8s) —— 容器编排管理技术
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具 能通过两条指令完成一个 kubernetes 集群的部署:
时间静止不是简史
2021/08/12
15.6K1
Kubernetes(K8s) —— 容器编排管理技术
用Kube-router实现网络隔离
Network Policy是k8s提供的一种资源,用于定义基于pod的网络隔离策略。它描述了一组pod是否可以与其它组pod,以及其它network endpoints进行通信。
腾讯云原生
2020/02/14
1.8K0
详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS、自动代理注入、分布式追踪、故障注入、高可用性、HTTP/2 和 gRPC 代理、负载均衡、多集群通信、重试和超时、遥测和监控、流量拆分(金丝雀、蓝/绿部署)等。
为少
2021/07/07
1.5K0
在生产环境中使用 Linkerd
到目前为止,我们一直在以最基本的形式使用 Linkerd,而没有关注生产级别的相关问题。本节我们将了解生产环境中使用的一些主要注意事项,包括高可用 (HA) 模式、Helm Chart、跨集群通信和外部 Prometheus。
我是阳明
2022/09/29
6640
在生产环境中使用 Linkerd
k8s 部署利器 helm v3 安装及使用指南
helm 是基于 kubernetes 的包管理器。它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于 javascript。
山月
2020/06/18
3.6K0
Kubernetes集群部署相关
free -h,显示内存和利用率 用swapon -s可以检查特定分区,逻辑卷或文件的交换,-s是摘要的含义,用它来获取交换的详细信息,以千字节为单位 或者使用top命令 vmstat,可以用该命令查看交换和交换信息,无法查看交换的总值
用户1413827
2023/11/28
7340
Kubernetes集群部署相关
[译]数据包在 Kubernetes 中的一生(3)
https://dramasamy.medium.com/life-of-a-packet-in-kubernetes-part-3-dd881476da0f
CNCF
2021/07/07
1.1K0
附034.Kubernetes_v1.21.0高可用部署架构二
Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。 kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不属于 kubeadm 关注范围。
木二
2021/04/22
2K1
相关推荐
k8s安装redis主从版
更多 >
LV.1
腾讯云布道师
目录
  • 本篇技术博文摘要 🌟
  • 引言 📘
    • 01-函数中变量的作用域
    • 02-函数注释
    • 03-值传递引用传递
    • 04-Py函数以及匿名函数
    • 05-python3.8新特性
    • 06-偏函数
    • 08-闭包
    • 09-装饰器
    • 10-装饰器参数
    • 11-一个函数被多个装饰器装饰
    • 12-装饰器函数返回值问题
    • 13-高阶函数map.py
    • 14-filter函数
    • 15-reduce函数
  • 综合实验:设计一个工资计算系统,录入员工信息,计算员工的月薪
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档