一文搞定python语法进阶

news2024/11/18 17:29:55

前言

前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下面我就将介绍一下Python的一些进阶语法规则,为后面更复杂的编程打下基础。

  1. 闭包与装饰器
    什么是闭包、装饰器函数、yield关键字

  1. python高阶函数
    lambda匿名函数、reduce函数、map函数、filter过滤器函数

  1. 面向对象编程
    什么是面向对象、对象的封装、类的继承、类的多态

  1. 进程与线程编程
    python中的进程与线程、多线程编程

第一章. 闭包与装饰器

1. 什么是闭包

# coding=utf-8# 闭包# def func1():#     print ("函数1运行")#     return func2()# #函数1的返回值是函数2的引用# def func2():#     print ("函数2运行")#     return 2# r =func1()# print (r)# r2= r()  # r = func2# print (r2)deffunc1():
    print ("函数1运行")
    deffunc2():
        print ("函数2运行")
    func2()
    return func2()
f2 = func1()
print(f2)
f2()
  
"""
在一个函数,比如func1中的内部定义了另外一个函数function2
并且函数1(func1)的返回值是函数2(func2)的引用
这种情况,我们称之为闭包

简单来说就是外部函数返回内部函数的引用就叫做闭包
"""

print打印结果:

函数1运行
函数2运行
函数2运行
None

案例:龟兔赛跑

# coding=utf-8import time
import random

# 定义跑道长度
track_length = 10defruntime(func):
    defwrapper():
        start_time = time.time()
        func()
        end_time = time.time()
        print (func.__name__,"运行时间是",end_time-start_time,"秒")
    return wrapper
    
@runtimedeftortoise():
    # for i in [1,2,3,4,5,6,7,8,9,10]:for i inrange(1,track_length+1):
        print ("乌龟跑的{}米".format(i))
        time.sleep(1)
@runtimedefrabbit():
    for i inrange(1,track_length + 1):
        if i % 5 == 0:
            time.sleep(random.randint(1,10))
        print ("兔子跑了{}米".format(i))
tortoise()
rabbit()

print打印结果:

乌龟跑的1米
乌龟跑的2米
乌龟跑的3米
乌龟跑的4米
乌龟跑的5米
乌龟跑的6米
乌龟跑的7米
乌龟跑的8米
乌龟跑的9米
乌龟跑的10米
tortoise 运动时间是 10.04876708984375 秒 
兔子跑了1米
兔子跑了2米
兔子跑了3米
兔子跑了4米
兔子跑了5米
兔子跑了6米
兔子跑了7米
兔子跑了8米
兔子跑了9米
兔子跑了10米
rabbit 运动时间是 9.022485494613647 秒

2. 什么是装饰器呢?

就是在特定条件下为某些函数再不改动函数体的时候为函数新添加一些功能,这就是装饰器

实现原理:

基于@语法和函数闭包,将原函数封装在闭包中,然后将函数赋值为一个新的函数(内置函数),执行函数时再在内层函数中执行闭包中的原函数

实现效果:

可以在你改变函数内部代码和调用的前提下,实现在函数执行和执行拓展功能

适用场景:

多个函数系统统一在执行前后定义一些功能

关于前言我们了解这么多就够了,然后小编带着大家推导出装饰器

装饰器:

装饰器的写法:

这里我们有一个需求,我们定义了5个函数,想在5个函数执行前和执行后都打印一句话:装饰器的学习。首先我们来写于一下没有装饰器的写法,话不多说直接上代码:

defa():
    passdefb():
    passdefc():
    passdefd():
    passdefe():
    pass

先定义5个函数,再加上我们要打印的话:

def a():
    print("装饰器的学习")
    print("装饰器的学习")
 
 
def b():
    print("装饰器的学习")
    print("装饰器的学习")
 
 
def c():
    print("装饰器的学习")
    print("装饰器的学习")
 
 
def d():
    print("装饰器的学习")
    print("装饰器的学习")
 
 
def e():
    print("装饰器的学习")
    pass
    print("装饰器的学习")
 
 
a()
b()
c()
d()
e()

运行一下:

发现运行成功,但我们想如果我要修改打印的话就要都修改一次,特别麻烦,而且,这是5个函数如果是500个,我们还要一个一个的去加吗?这就有我们的装饰器了,首先我用装饰器修改下,再给大家解释。

defouter(origin):
    definner():
        print("装饰器的学习")
        res = origin()
        print("装饰器的学习")
        return res
 
    return inner
 
 
@outerdefa():
    pass@outerdefb():
    pass@outerdefc():
    pass@outerdefd():
    pass@outerdefe():
    pass
 
 
a()
b()
c()
d()
e()

运行一下:

发现这样我们也成功了,接下来小编来个大家解释

首先:

我们要明白@的作用,那我们的函数a来举例子@的作用就是帮我们执行一次a=outer(a),首先python将把我们的a变成参数传给outer函数,运行后再赋值给a,这就是@的作用。

其次给大家解释一下自定的outer函数

我自己称这个函数为@下函数的补丁函数,也就是装饰器函数还是拿a函数举例子,首先a函数变成参数传给了我们的outer函数,outer里又嵌套了一个inner函数 ,然后将函数a赋值给res,然后用return语句返回出结果,外层函数返回inner函数,也就是将inner函数运行一次,这就是工作流程。

最后分别在各函数前加上装饰,最后运行出结果

这就是装饰器的写法。

装饰器的参数

这时我遇到一个问题如果函数内有参数而且每个函数的参数数量不同,我们应该怎末办,先看下面代码

defouter(origin):
    definner():
        print("装饰器的学习")
        res = origin()
        print("装饰器的学习")
        return res
 
    return inner
 
 
@outerdefa(g, e):
    pass@outerdefb(w):
    pass@outerdefc(u, y, t):
    pass@outerdefd(c):
    pass@outerdefe():
    pass
 
 
a()
b()
c()
d()
e()

这时我们运行一下

发现报错,是因为我们的装饰器内没有这两个参数,那可以在装饰器内设置两个参数,但问题是,有的函数内有3个参数,而有的函数内没有参数,那我们应该怎么办?

针对这个问题我们可以给装饰器设置动态参数,先看代码:

defouter(origin):
    definner(*args, **kwargs):
        print("装饰器的学习")
        res = origin(*args, **kwargs)
        print("装饰器的学习")
        return res
 
    return inner
 
 
@outerdefa(a1):
    print("我是一函数")
 
 
@outerdefb(a1, a2):
    print("我是二函数")
 
 
@outerdefc(a5, a6, a7):
    print("我是三函数")
 
 
a(1)
b(2, 3)
c(4, 5, 6)

因为函数太多了,小编有点麻烦就剪了几个函数,但道理是相同的,这时我们再运行一下

这样我们就成功了,以上就是装饰器的写法,接下来给大家拓展一下

装饰器的拓展:(functools模块)

首先给大家引入一下这时教给大家几个魔法方法

接下来我们实战一下

defouter(origin):
    definner(*args, **kwargs):
        # 我是一个装饰器函数print("装饰器的学习")
        res = origin(*args, **kwargs)
        print("装饰器的学习")
        return res
 
    return inner
 
 
@outerdefc(a5, a6, a7):
    # 我是个函数print("我是三函数")
 
 
c(4, 5, 6)
print(c.__name__)
print(c.__doc__)

运行一下:

这时我们发现我要的是c函数,但给我反馈的是inner函数,这是为什么呢?

这就是工作原理,直接就把c函数装饰成了inner函数,那以后再工作中一定会要自己函数的名字,而不要我装饰后的函数,这样就可以让我们的函数装饰的更像,其实在以后中,都想装饰的更像,那我们应该怎末办?

这时就需要我们的第三方模块functools,直接上代码

import functools
 
 
defouter(origin):
    @functools.wraps(origin)definner(*args, **kwargs):
        # 我是一个装饰器函数print("装饰器的学习")
        res = origin(*args, **kwargs)
        print("装饰器的学习")
        return res
 
    return inner
 
 
@outerdefc(a5, a6, a7):
    # 我是个函数print("我是三函数")
 
 
c(4, 5, 6)
print(c.__name__)
print(c.__doc__)

这时再运行一下

这时我们发现,我们伪装成功了,这样就会让我们的装饰更像。

装饰器模板:

接下来送给大家装饰器的模板,以后需要随时ctrl+c和ctrl+v

import functools
 
 
defouter(origin):
    @functools.wraps(origin)definner(*args, **kwargs):
        # 这里书写需要装饰的功能
        res = origin(*args, **kwargs)
        return res
 
    return inner
    

第二章. Python高阶函数

1. lambda表达式(匿名函数)

# coding=utf-8# lambda表达式(匿名函数)# 计算圆形的面积# pi * r * r# 导入数学模块import math
defcircle_area(r):
    result = math.pi * r * r
    return result
r = circle_area(3)
print (r)
"""
lambda是一个关键字
冒号前边的r是这个函数的参数
冒号后边的是这个函数的运算逻辑
"""
result = lambda r:math.pi * r * r
r = result(3)
print (r)

defcalc_function(o):
    if o == "+":
        returnlambda a,b : a + b
    elif o == "-":
        returnlambda a,b : a - b
    elif o == "*":
        returnlambda a,b : a * b
    elif o == "/":
        returnlambda a,b : a / b
f = calc_function("*")
print (f)
r = f(3,4)
print (r)

print打印结果:

28.274333882328.2743338823
<function <lambda> at0x03159B70>
12

2. map自动拆分的计算函数

# coding=utf-8# map函数
my_list = [1,2,3,4,5]
# 1
result = []
for i in my_list:
    result.append(i + 1)
print (result)

# 2defadd_one(e):
    return e + 1
r = map(add_one,my_list)
print (list(r))
defadd_two(e):
    if e == 1:
        return e + 3elif e == 2:
        return2 - 1else:
        return e
r =map(add_two,my_list)
print (list(r))
# 3print (list(map(lambda e:e+1,my_list)))

print打印结果:

[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[4, 1, 3, 4, 5]
[2, 3, 4, 5, 6]

3. reduce自动堆叠计算函数

# coding=utf-8# reduce# 导入reducefrom functools import reduce
a =[2,4,6,8,10]
defadd(x,y):
    return x + y
result = reduce(add,a)
print (result)

print (reduce(lambda x,y : x+y,a))

print打印结果:

30
30

4. filter过滤器函数

# coding=utf-8# filter函数
letter=['a',"B",'c',"D",'e',"F"]
upper_letter = filter(lambda x: x == x.upper(),letter)
print (upper_letter)
print (list(upper_letter))

student_name = ['李元芳','李建国','莫怀羽']
print (list(filter(lambda x:x.startwith("李"),
                   student_name)))

print打印结果:

['B', 'D', 'F']['B', 'D', 'F']['李元芳','李建国']

第三章. 面向对象编程

1. 对象的封装

# coding=utf-8# 对象的封装# 类的概念"""
类的名字:当名字由多个单词构成时,我们采用驼峰命名法
就是说多个单词,每个单词的首字母需要大写
这也是python的命名规则
"""classBeautifulGirl():
    # 类的属性
    eye = ""
    nose = ""
    mouth = ""
    hair = ""
    face = ""# 构造函数def__init__(self,eye,nose,mouth,hair,face):
        self.eye = eye
        self.nose = nose
        self.mouth = mouth
        self.hair = hair
        self.face = face
        print ("构造函数运行了")
    # 在这就叫做类的方法defdance(self):
        print ("美女在跳舞")

    defget_beautiful_girl(self):
        print ("这个美女的样貌是:")
        print (self.nose)
        print (self.mouth)
        print (self.hair)
        print (self.face)
        print (self.eye)

# 实例化就是获取具体对象的一个过程 new新的一个。
girl = BeautifulGirl("大大的眼睛"
                     ,"小巧的嘴唇"
                     ,"乌黑亮丽的头发"
                     ,"清秀的脸庞")
girl.dance()
girl.get_beautiful_girl()

girl2 = BeautifulGirl("小小的眼睛",'鼻子','嘴','头发','脸庞')
girl2.get_beautiful_girl()

print打印结果:

大大的眼睛
小巧的嘴唇
乌黑亮丽的头发
清秀的脸庞
小小的眼睛
这个美女的样貌是:
鼻子
嘴
头发
脸庞

2. 类的私有属性

# coding=utf-8# 类的私有属性classBeautifulGirl():
    # 类的属性
    eye = ""
    nose = ""
    mouth = ""
    hair = ""
    face = ""# 这就是私有属性,私有属性在类的外部是不可以访问的
    __name ="高圆圆"
    address = "河北省唐山市"# 构造函数def__init__(self,eye,nose,mouth,hair,face):
        self.eye = eye
        self.nose = nose
        self.mouth = mouth
        self.hair = hair
        self.face = face
        print ("构造函数运行了")
    # 在这就叫做类的方法defdance(self):
        print ("美女在跳舞")
    def__dd(self):
        print ("美女在跳舞")

    defget_beautiful_girl(self):
        print ("这个美女的样貌是:")

        print (self.__name)
        print (self.nose)
        print (self.mouth)
        print (self.hair)
        print (self.face)
        print (self.eye)
girl = BeautifulGirl("大大的眼睛"
                     ,"小巧的嘴唇"
                     ,"乌黑亮丽的头发"
                     ,"清秀的脸庞")
print (girl.mouth)
print (girl.address)
# print (girl.__name)# # 类的私有属性可以访问吗?# print (BeautifulGirl.__dict__)# print (girl._beautiful__name)
girl.get_beautiful_girl()

print打印结果:

构造函数运行了
这个美女的样貌是:
高圆圆
大大的眼睛
小巧的鼻子
薄薄的嘴唇
乌黑亮丽的头发
清秀的脸庞

3. 类中的方法

# coding=utf-8# 类的私有属性classBeautifulGirl():
    # 类的属性
    eye = ""
    nose = ""
    mouth = ""
    hair = ""
    face = ""# 这就是私有属性,私有属性在类的外部是不可以访问的
    __name ="高圆圆"
    address = "河北省唐山市"# 构造函数,也叫构造方法def__init__(self,eye,nose,mouth,hair,face):
        self.eye = eye
        self.nose = nose
        self.mouth = mouth
        self.hair = hair
        self.face = face
        print ("构造函数运行了")
    # 在这就叫做类的方法defdance(self):
        print ("美女在跳舞")
    # 这个叫做私有方法def__dd(self):
        print ("美女在跳舞")
    # 这个叫做一般方法defget_beautiful_girl(self):
        print ("这个美女的样貌是:")

        print (self.__name)
        print (self.nose)
        print (self.mouth)
        print (self.hair)
        print (self.face)
        print (self.eye)
    # 静态方法# 静态方法不能够访问类中的属性    @staticmethoddefstudy():
        print ("美女在实习")

    # 类方法# 类方法是不可以访问实例变量的,它可以访问类变量(类的属性    @classmethoddefgirl_friend(cls):
        print (cls.__name)
        print (cls.address)
        print (cls.face)
girl = BeautifulGirl("大大的眼睛"
                     ,"小巧的嘴唇"
                     ,"乌黑亮丽的头发"
                     ,"清秀的脸庞")

# print (BeautifulGirl.__dict__)# 这就访问了类中的私有方法# girl.beautifulGirl__dd()

girl.study()
BeautifulGirl.study()

# 类名,一般方法的名称调用是会报错的# BeautifulGirl.dance(girl)

girl.girl_friend()
BeautifulGirl.girl_friend()
girl.get_beautiful_girl()

print打印结果:

构造函数运行了
这个美女的样貌是:
高圆圆
河北省唐山市
高圆圆
河北省唐山市
大大的眼睛
小巧的鼻子
薄薄的嘴唇
乌黑亮丽的头发
清秀的脸庞

4. 类的继承

# coding=utf-8# 类的继承# 父类和子类classFather(object):
    age = 38def__init__(self,name):
        self.name = name
        print ("父类的构造函数运行了")

    deffather_money(self):
        print ("父亲有很多钱")

    def__father_knowleger(self):
        print ("父亲的知识体系")

    @staticmethoddefstudy():
            print ("父亲在学习")

    @classmethoddeffather_friend(cls):
            print ("父亲有很多朋友")

    defface(self):
            print ("父亲非常帅")
# 意味着son这个类继承了father这个类classSon(Father):
   def__init__(self):
       print ("子类的构造函数运行了")
# son = Son("小王")
son = Son()
# 在继承中,子类如果有构造函数,name就不会调用弗雷德构造函数# 在继承中,一般的方法是可以被继承的
son.father_money()

# 私有方法可以被继承# son.__father_knowleger()
son.study()
son.father_friend()

classMother():
    defface(self):
        print ("妈妈长的很漂亮")

# 这就叫做多继承classSon2(Mother,Father):
    def__init__(self):
        print("2儿子的构造函数运行了")

son2 = Son2()
son2.father_money()
son2.face()
# 当多继承的时候,多个父类拥有一个名称的变量或方法时# 哪个父类写在继承列表的前边,子类就继承谁的

print打印结果:

子类的构造函数运行了
父亲有很多钱
父亲在学习
父亲有很多朋友
2儿子的构造函数运行了
父亲有很多钱
妈妈长的很漂亮

5. 类的多态

# coding=utf-8# 类的多态# 指的是多种形态classAnimal():
    defrun(self):
       print ("动物开始跑")
# 子类在继承父类的过程中,重写了父类中的方法classDog(Animal):
    defrun(self):
        print ("狗狗跑")

classCat(Animal):
    defrun(self):
        print ("猫跑")

classPerson(Animal):
    defrun(self):
        print ("人类跑")

dog = Dog()
dog.run()

cat = Cat()
cat.run()

person = Person()
person.run()

# 多个类继承同一个类,都重写了父类的方法,呈现出了不同的形态# 多态性classA(Animal):
    pass
a = A()

defrun(obj):
    obj.run()

run(dog)
run(cat)
run(person)
run(a)

print打印结果:

狗狗跑
猫跑
人类跑
狗狗跑
猫跑
人类跑
动物开始跑

6. 多进程编程

# coding=utf-8# 多进程编程代码演示import time
from multiprocessing import Process
import os

deftarget_function():
    print ("子进程的ID:{}".format(os.getpid()))
    time.sleep(2)
if __name__== "__main__":
    print (__name__)
    print ("主进程ID:{}".format(os.getpid()))
    ps = []
    for i inrange(10):
        p = Process(target_function())
        p.start()
        ps.append(p)
    # 让主进程等待子进程进行运行完成后在停止for p in ps:
        p.join()

print打印结果:

__main__
主进程ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692子进程的ID:2692

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础-类加载器

写在前面的话&#xff1a; 基础加强包含了&#xff1a; 反射&#xff0c;动态代理&#xff0c;类加载器&#xff0c;xml&#xff0c;注解&#xff0c;日志&#xff0c;单元测试等知识点 其中最难的是反射和动态代理&#xff0c;其他知识点都非常简单 由于B站P数限制&#xff0c…

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一&#xff0c;尤其是在WebGL库的支持下。有了WebGL&#xff0c;可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此&#xff0c;设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库&#xff0c;它…

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点&#xff0c;是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的&#xff0c;原因有二。首先&#xff0c;在 CD20 阳性肿瘤的情况下&#xff0c;这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次&#xff0c;干…

火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2 月 9 日&#xff0c;国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》&#xff08;以下简称报告&#xff09;&#xff0c;报…

java程序,springboot程序 找不到主类,找不到符号解决思路

文章目录问题解决方案一.可以尝试clean掉maven依赖&#xff0c;然后重新启动二.右键工程&#xff0c;选择maven然后重新加载工程&#xff0c;接着再启动试试三.删掉工程中的services.iml文件&#xff0c;重新配置后接着再启动试试四. 终极方案清除idea缓存&#xff0c;重启idea…

Rust之错误处理(二):带结果信息的可恢复错误

开发环境 Windows 10Rust 1.67.1VS Code 1.75.1项目工程 这里继续沿用上次工程rust-demo 带结果信息的可恢复错误 大多数错误并没有严重到需要程序完全停止的程度。有时&#xff0c;当一个函数失败时&#xff0c;它的原因是你可以很容易地解释和应对的。例如&#xff0c;如…

LearnOpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…

Day891.一主多从的切换正确性 -MySQL实战

一主多从的切换正确性 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候&#xff0c;要先主动跳过这些错误&#xff0c;通过主动跳过一个事务或者直接设置跳过指定的错误&#xff0c;用GTID解决找同步位点的问题 大多…

oracle查找各PDB密码过期账户

连接oracle的时候&#xff0c;又报 ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 的错误。这种现象之前遇到不少&#xff0c;猜测可能又是某个sde账号密码过期或快过期&#xff0c;导致arcgis不停地连数据库&#xff0c;因而连接耗尽了。详见拙作&#xff1a…

电脑c盘满了怎么清理,c盘空间清理

电脑c盘满了怎么清理&#xff1f;电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以&#xff0c;我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上&#xff0c;您可以使用系…

windows10 安装DOSbox_32 debug.exe

windows10 安装DOSbox_32 debug.exe1.下载2. 安装DOSBox0.74-3-win32-installer.exe3. 配置DOSBox3. 启动DOSBox.exe4. 测试执行debug命令1.下载 DOSBox0.74-3-win32-installer.exe安装包debug.exe 2. 安装DOSBox0.74-3-win32-installer.exe 解压 双击DOSBox0.74-3-win32-insta…

QT+OPenGL模型加载 - Assimp

QTOPenGL模型加载 - Assimp 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 模型加载 先来张图&#xff1a; 我们不大可能手工定义房子、汽车或者人形角色这种复杂形状所有的顶点、法线和纹理坐标。我…

【surfaceflinger源码分析】surface与surfaceflinger之间的关系

本篇文章带着以下问题继续分析surfaceflinger的源码: 什么是surface ? surface与图形数据之间是什么关系&#xff1f;surface和surfaceflinger之间是什么关系&#xff1f; Surface定义 先看看Surface这个类的定义&#xff0c;主要是定义了很多与GraphicBuffer相关的操作。 …

k8s(存储)数据卷与数据持久卷

为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会丢失问题2&#xff1a;一个Pod中运行多个容器并需要共…

创邻科技荣获人行旗下《金融电子化》年度大奖

近日&#xff0c;创邻科技收到由中国人民银行旗下《金融电子化》杂志社寄来的奖牌。 在《金融电子化》杂志社主办的第十三届金融科技应用创新奖中&#xff0c;创邻科技凭借“原生分布式图数据库Galaxybase解决方案”&#xff0c;从近400个参报案例中脱颖而出&#xff0c;荣获“…

Linux下zabbix_proxy实施部署

简介 zabbix proxy 可以代替 zabbix server 收集性能和可用性数据,然后把数据汇报给 zabbix server,并且在一定程度上分担了zabbix server 的压力. zabbix-agent可以指向多个proxy或者server zabbix-proxy不能指向多个server zabbix proxy 使用场景: 1&#xff0c;监控远程区…

【React全家桶】reac组件通信

&#x1f39e;️&#x1f39e;️&#x1f39e;️ 博主主页&#xff1a; 糖 &#xff0d;O&#xff0d; &#x1f449;&#x1f449;&#x1f449; react专栏&#xff1a;react全家桶 &#x1f339;&#x1f339;&#x1f339;希望各位博主多多支持&#xff01;&#xff01;&a…

自媒体市场规模由2015年的296亿元增涨至2021年的2500亿元

自媒体&#xff0c;又称“个人媒体”&#xff0c;是指大众化、自主化的传播者以图文、音频或视频内容等各类形式向公众发布信息内容。随着&#xff15;&#xff27;时代的来临和智能设备的性能逐渐提高&#xff0c;网络基础环境得到很大的提升&#xff0c;自媒体开始了新的发展…

QT的下载和安装

这里介绍的是QT官方方式下载&#xff0c;每次都让我很糊涂&#xff0c;就记载一下。先是下载QT online installerhttps://www.qt.io/download 在下方有Go Open Sourcehttps://www.qt.io/download-open-source 在下方有Download the Qt Online installerhttps://www.qt.io/downl…

C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)

要做SEO的肯定绕不开站点地图sitemap.xml。这玩意其实不难我也在搞写下来备忘一下也给新人指指路。 我先把代码放出来备忘下 #region CreateSiteMapXml/// <summary>/// /// </summary>/// <returns></returns>[Route("/art/CreateSiteMapXml&qu…