Python入门_基础理论_全网详细版

(根据黑马教程整理)

第二章01-字面量

0.6数据的类型

1.掌握字面量的含义

代码中,被写在代码中的固定值,称之为字面量

2.常见的字面量类型

整数、浮点数、字符串

3.基于print语句完成各类字面量的输出

print(10)

print("今天是23年2月22日")

第二章02-注释

1.单行注释 :#

2.多行注释 (""" """)

第二章03-变量

1.变量的作用:

在程序运行时,记录数据

2.变量的定义格式:

<变量名>=<变量值>

3.变量特征:

可以改变

4.print语句中如何输出多份内容?

print(内容1,内容2............)

第二章04-数据类型

1.使用什么语句可以查看数据类型?

type()

2.变量有无类型?

没有,字符串变量表示变量存储了字符串而不是表示变量就是字符串

第二章05-数据类型转换

1.字符串、整数、浮点数类型转换的语句是?

2.任何类型都可以转换为字符串吗?

3.字符串可以任意转换成数字吗?

不可以。字符串内必须只有数字才可以

4.浮点数转换为整数会丢失什么?

丢失精度

第二章06-标识符

1.什么是标识符?

用户编写代码时,对变量、类、方法等编写的名字

2.标识符的命名规则?

内容限定

中文、英文、数字、下划线

大小写敏感

不可使用关键字

3.变量的命名规范

见名知意

下划线命名法

英文字母全小写

第二章07-运算符

1.常见的算术(数学)运算符有:

加(+)、减(-)、乘(*)、除(/)、整除(//)、取余(%)、平方(**)

2.赋值运算符

运算符加=

第二章08-字符串的三种定义方式

1.字符串的三种定义方式:

单引号方式、双引号方式、三引号方式

2.引号的嵌套

可以使用:\来进行转义

单引号内可以写双引号或双引号内可以写单引号

第二章09-字符串的拼接

1.如何完成字符串的拼接?

使用“+”连接字符串变量或字符串字面量即可

2.注意事项

无法和非字符串类型进行拼接

第二章10-字符串格式化

1.字符串格式化的语法

“ %占位符 ” % (变量)

2.常用占位符有哪三个?

字符串

%s

整数

%d

浮点数

%f

第二章11-字符串格式化的精度控制


第二章12-字符串格式化2

1.可以通过

f " { 变量 } { 变量 } "的方式进行快速格式化

2.以上格式化方式

不会理会类型

不做精度控制(适合对精度没有要求的时候快速使用)

第二章13-对表达式进行格式化

1.表达式是什么?

是一个有明确结果代码的语句

2.如何格式化表达式?

f"{表达式}"

“%s \%d \ %f ”%(表达式,表达式,表达式....)

第二章15-数据输入(input语句)

1.语句功能:

获取键盘输入的数据

2.可以使用:

input(提示信息)

3.得到的类型永远是字符串类型



第三章01-布尔类型和比较运算符

1.python中,表示真假的数据类型是:

True (真) False (假)

2.除了定义布尔类型外,还可以通过 比较运算符 计算得到布尔类型。

第三章02-if语句的基本格式

.

第三章04-if-else组合判断语句

第三章06-if--elif-else组合判断语句

1.if--elif-else语句的作用是?

完成多个条件的判断

2.使用if--elif-else的注意点:

elif可以写多个

判断是互斥 并且 有序的,上一个满足后面的就不会判断(跳过

可以在条件判断中,直接写input语句,节省代码量

第三章08-判断语句的嵌套

1.嵌套判断语句可以用于多条件、多层次的逻辑判断

2.嵌套判断语句可以根据需求,自由组合 if-elif-else来构建多层次判断

3.嵌套判断语句,一定注意空格缩进,python通过空格缩进决定层次关系

第三章09-判断语句综合案例




第四章01-while循环的基础应用

第四章03-while循环猜数字案例

第四章04-while循环的嵌套应用

第四章05-while循环案例--九九乘法表

# 九九乘法表
a = 1
while a <= 9:
    b = 1
    while b <= a:
        print(f"{a}*{b}={a*b}\t",end = "")
        b += 1
    a += 1
    print()

第四章06-for循环的基础语法

注:同while循环不同,for循环是无法定义循环条件的。

只能从被处理的数据集中,依次取出内容进行处理

所以,理论上讲,python的for循环无法构建无限循环(被处理的数据不可能无限大)

1.for循环的语法格式是:

for 临时变量 in 待处理的数据集(序列):

循环满足条件时执行的代码

2.for循环的注意点:

无法定义循环条件,只能被动取出数据处理

循环内的语句 ,需要空格的缩进

第四章07-for循环的案例

zhuzhuna = "she is a gril"
count = 0
for i in zhuzhuna:
    if i == "s":
        count += 1
print(f"被统计的s字母有{count}个")

第四章08-range语句

第四章09-for循环临时变量作用域

1.for循环中的临时变量,其作用域限定为: 循环内部

2.这种规定:

不遵守也能正常运行,如需访问临时变量,可以预先在循环外定义它

i = 100 #与i的起始变量值无关
for i in range(5):
    print(i)
print(i)

逐行输出: 0 1 2 3 4 4

最后一行的print()语句输出的内容为for的最后一次循环

第四章10-for循环的嵌套应用

第四章11-for循环打印九九乘法表

#用for循环打印9*9乘法表
i = 0
for i in range(1,10):
    j = 1
    for j in range(1,i+1):
        print(f"{j}*{i}={j * i}\t", end="")
    print()

第四章12-break 和 continue

1.continue的作用是:(临时中断)

中断所在循环的当次执行,直接进入下一次内循环

for i in range(1,6):
    print(1)
    for i in range(1,6):
        print(2)
        continue
        print(3)
    print(4)

2.break的作用是:(永久中断)

直接结束所在的循环 (对应当前的循环的整个语句块)

for i in range(1,6):
    print(1)
    for i in range(1,6):
        print(2)
        break
        print(3)
    print(4)

3.注意事项:

continue 和 break,在for 和 while 循环中作用一致

在嵌套循环中,只能作用在所在的循环上,无法对上层循环起作用

第四章13-循环综合案例

#定义账户余额
money = 10000
# for循环对员工发放工资
for i in range(1,21):
    import random
    performance = random.randint(1, 10) #随机生成1-10的数字

    if performance < 5:
        print(f"员工{i}绩效分{performance},不满足,不发了,下一位")
        # continue跳过发放
        continue

    if money >=1000 : #使用elif也可以
        money -= 1000
        print(f"员工{i},绩效分{performance},满足发放工资1000,账户余额是:{money}")
    else :
        print(f"余额不足,当前{money}元,不发了额,下个月再说")
        # break结束发放
        break

第五章01-函数(初)

1.函数的定义

已经组织好的,可重复使用的,用来实现特定功能的代码段

2.使用函数的优点是:

将功能封装在函数内部,可随时重复使用

提高代码的复用性,减少重复的代码,提高开发效率

第五章02-函数的基础语法定义

1.函数的定义语法:

2.函数使用步骤:

先定义函数

后调用函数

#定义一个函数输出相关信息
def hi():
    print("今天是2023年3月3日")
#调用函数,让定义的函数开始工作
hi()
hi()

3.注意:

当参数不需要时,可省略

返回值不需要时,可以省略

第五章03-函数基础定义练习案例

def hello():
    print("欢迎大家\n来到厦门")
hello()
def hello():
    print("""欢迎大家,
来到厦门""")
hello()

第五章04-函数的传入参数

1.函数的传入参数的作用是?

在函数运行的时候,接受外部传入的数据

2.使用方法:

def add( a,b ):
    resule = a**b
    print(f"{a}的{b}次幂的结果是{resule}")
add (4,2)

3.注意事项

函数定义中的参数,称之为形式参数

函数调用中的参数,称之为实际参数

函数的参数数量不限,使用逗号分隔开

传入参数的时候,要和形式参数一一对应,用逗号分开

第五章05-函数的参数练习案例

num = eval(input("您的体温是:"))
def check(num):
    print("欢迎来到这里,请出示您的身份信息以便核对")
    if num > 37.3:
        print(f"体温测量中,您的体温是:{num},需要隔离")
    else:
        print(f"体温测量中,您的体温是:{num},不需要隔离")
check(num)

第五章06-函数的返回值定义语法

1.什么是函数的返回值?

函数在执行完成后,返回给调用者的结果

2.返回值的应用语法:

使用关键字:return来返回结果

3.注意:

函数体在遇到return后就结束了,所以写在return后的代码就不会执行了

# 定义一个函数完成两数相加的功能
def add(x, y):
    result = x + y
    #通过返回值,将相加的结果返回给调用者
    return result
#函数的返回值,可以通过变量去接收
r = add(6,18)
print(r)

第五章07-函数返回值之None的类型

1.什么是None?

None是类型“NoneType”的字面量,用于表示:空的,无意义的

2.函数如何返回None

不使用return语句即返回None

主动return None

3.使用场景

函数返回值

if判断

变量定义

def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None
result = check_age(15)
if not result:
    #进入if表示result是None,也就是False
    print('未成年禁止入内')
# 如果if后面跟的是字符串,则只要这个字符串不为空串,python就把它看作True
# 由于None的值是faDDlse,而if判断要为true才能执行,所以not None是非false,也就是为ture的意思,这样子if就能执行了
注意

如果if后面跟的是字符串,则只要这个字符串不为空串,python就把它看作True

由于None的值是false,而if判断要为true才能执行,所以not None是非false,也就是为ture的意思,这样子if就能执行了

第五章08-函数的说明文档

1.函数说明文档的作用是?

对函数进行说明解释,帮助更好的理解函数功能

2.定义语法

def add(x ,y):
    """
    add 函数可以接收两个参数,进行两数相加的功能
    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的其中一个数字
    :return: 返回值是两数的相加的结果
    """
    result = x + y
    print(f"2数相加的结果是:{result}")
    return result
add(6,15)

param:用于解释参数

return:用于解释返回值

第五章09-函数的嵌套调用

1.什么是嵌套调用?

在一个函数中,调用另外一个函数

2.执行流程

函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容

# 定义函数func_b
def func_b():
    print("---1---")
def func_a():
    print("---2---")

#嵌套调用func_b
    func_b()
    print("---3---")
# 调用函数func_a
func_a()

#输出如下
#---2---
#---1---
#---3---

第五章10-变量的作用域

1.什么是局部变量?

作用范围在函数内部,在函数外部无法使用

2.什么是全局变量?

在函数内部和外部都可以使用

3.如何将函数内定义的变量声明为全局变量呢?

使用global的关键字

numbers = 200
def test_a():
    print(f"test_a:{numbers}")
def test_b():
    global numbers  #设置内部定义的变量是全局变量
    numbers = 500 #没有上一行的话,还是属于局部变量
    print(f"test_b:{numbers}")

test_a()
test_b()
print(numbers)

第六章01-数据容器(入门)

1.什么是数据容器?

一种可以存储多个元素的python数据类型

2.python有哪些数据容器?

list (列表)、tuple(元组)、str(字符串)、dict(字典)

第六章02-列表的定义语法

1.列表的定义语法

[ 元素1,元素2,元素3,……]

2.什么是元素 ?

数据容器内的每一份数据,都称为元素

3.元素的类型有限制吗?

没有,元素也可以是列表 。这样就定义了嵌套列表

第六章03-列表的下标索引

第六章04-列表的常用操作方法

1.列表的常见方法有:

2.列表的特点

可以容纳多个元素(上限:2**63-1 个)

可以容纳不同类型的元素(混装)

数据是有序存储的(有下标序号)

允许重复数据存在

可以修改(增加 或 删除元素等)

第六章05-列表的常用操作课后练习讲解

1.for 循环

my_list = ["morning","afternoon","evening"]
for i in my_list:
    print(f"对列表的元素是:{i}")

2.while 循环

my_list = ["morning","afternoon","evening"]
index = 0
while index <= len(my_list)-1:
    element = my_list[index]
    print(f"列表对应的元素是:{element}")
    index += 1

3.for & while 循环对比

4.什么是遍历?

将容器内的元素依次取出来,并处理

5.如何遍历列表中的元素

可以使用while 或 for 循环

6.for循环的语句

for 临时变量 in 数据容器:

对临时变量进行处理

第六章06-列表的遍历循环

代码错了,没有讲评

代码在596到609

第六章07-元组的定义和操作

1.元组的特点

可容纳多个数据

可容纳不同类型的数据(混装)

数据是有序存储的(下标索引)

允许重复数据存在

不可以修改(增加或删除元素)

支持for循环

总结:多数特性和list一致,不同点在于不可修改的特性

2.元组的定义方式:

(元素1,元素2,元素3,----)

3.元组的操作方法:

第六章08-字符串的定义和操作

1.字符串为什么说是数据的容器呢?

字符串可以看做是字符的容器,支持下标索引等 的特性

2.字符串常用的操作汇总

3.字符串的特点:(作为数据容器)

只可以存储字符串

长度任意

支持下标索引

允许重复字符串存在

不可以修改(增加 或 删除元素)

支持for循环

第六章09-字符串的课后练习

# 统计字符串中有多少个it字符
str = ("itheima itcast boxuegu")
count = str.count("it")
print(f"字符串{str}中有:{count}个it字符")
#  将空格替换为|
str = ("itheima itcast boxuegu")
abs = str.replace(" ","|")
print(f"字符串{str},被替换空格后,结果是{abs}")
# 按照|分割
str = ("itheima|tcast|boxuegu")
abs2 = str.split("|")
print(f"字符串{str},按照'|'分割后,得到的是{abs2}")

第六章10-数据容器(序列)的切片

1.什么是序列?

内容连续,有序,支持下标索引的一类数据容器

2.哪些数据容器可以视为序列?

列表、元组、字符串

3.序列的切片方式

第六章11-序列切片的课后练习

str = "万过薪月,员序程马黑来,nohtyP学"
abs= str[-14:-9]
abs = abs[::-1]              方法1

abs = str[::-1][9:14]        方法2

abs  = str[-10:-15:-1]       方法3

abs = str.split(",")[1].replace("来","")[::-1]  方法4

print(abs)

第六章12-集合的定义和操作

1.集合定义方式

{元素1, 元素2, 元素------}

2.集合常用功能总结

3.集合的特点

可以容纳多个数据

可容纳不同类型的数据(混装)

数据是无序存储的(不支持下标索引)

不允许重复数据存在

可以修改(增加或删除)

支持for循环

如何遍历集合元素

可以使用for循环进行遍历

不可以使用while循环,因为不支持下标索引

第六章13-集合的课后练习

list =["tommorn", "will", "be", "better and better"]
my_set =set()
for i in list:
    my_set.add(i)
    print(my_set)
print(my_set)

第六章14-字典的定义

1.为什么使用字典

字典可以提供基于Key 检索 Value场景的实现

类似于查字典

2.字典的定义用法

dict1 = {"年份":2023, "月份":2, "日期":25}
dict2 = {}
dict3 = dict()
print(dict3)
print(dict2)
score_dict = {"王力宏":{"语文":77,"数学":66,"英语":33},
              "周杰伦":{"语文":88,"数学":86,"英语":55,}}
print(score_dict)
score1 = score_dict["周杰伦"]["英语"]
print(score1)

3.字典的注意事项

键值对的key 和 value可以是任意类型(key不可以为字典)

字典内key不允许重复,如果重复添加等同于覆盖原有的数据

字典不可以使用下标索引,而是通过key 检索value

第六章15-字典的常用操作

1.字典常用操作总结

***操作注意:新增和更新元素的语法一致,如果key不存在即新增

如果key存在 即更新(key不可重复)

2.字典的特点

可容纳多个数据

可容纳不同类型的数据

每一份数据是KeyValue键值对

可以通过Key获取到Value,Key不可重复(重复会覆盖)

不支持下标索引

可以修改(增加或删除)

支持for循环,不支持while循环

4.操作案例

# 空字符串输出
dict1 = {"年份":2023, "月份":2, "日期":25}
dict2 = {}
dict3 = dict()
print(dict3)
print(dict2)
score_dict = {"王力宏":{"语文":77,"数学":66,"英语":33},
              "周杰伦":{"语文":88,"数学":86,"英语":55,}}
print(score_dict)
score1 = score_dict["周杰伦"]["英语"]
print(score1)
# 增加元素
dict1 = {"年份":2023, "月份":2, "日期":25}
dict1["时间"] = 9
print(dict1)
dict1["日期"] = 26
print(dict1)
# 遍历循环 通过获取全部的key来完成遍历
dict1 = {"年份":2023, "月份":2, "日期":25}
score = dict1.keys()
print(score)
for key in score:
    print({key})
    print({dict1[key]})
# 删除元素的操作
dict1 = {"年份":2023, "月份":2, "日期":25}
score = dict1.pop("年份")
print(score)
print(dict1)

第六章16-字典的课后练习

第六章17-5类数据容器的总结

1.数据容器可以从以下视角进行简单的分类:

①是否支持下标索引

支持:列表、元组、字符串---序列类型

不支持:集合、字典---非序列类型

②是否支持重复元素:

支持:列表、元组、字符串---序列类型

不支持:集合、字典---非序列类型

③是否可以修改:

支持:列表、集合、字典

不支持:元组、字符串

2.特点的对比

3.使用场景

第六章18-数据类型的通用操作

第六章19-拓展-字符串大小的比较方式

1.字符串如何比较

从头到尾,一位位进行比较,其中一位大,则截止

2.单个字符之间如何确定大小?

通过*****码表,确定字符对应的码值数字来确定大小

print(f"abd大于abc,结果是:{'abd' > 'abc'}")
print(f"ab大于a,结果是:{'ab' > 'a' }")
print(f"a大于A,结果是:{'a' > 'A'}")

第七章01-函数的多返回值

运用return可返回多个返回值

def test_return():
    return 1,[456],{1,2}
x, y, z = test_return()
print(x)
print(y)
print(z)

第七章02-函数的多种参数使用形式

1.掌握位置参数

根据参数位置来传递参数

2.掌握关键字参数

通过“ 键 = 值 ”的形式传递参数,可以不限制参数顺序

可以和位置参数混用,位置参数需要在前面

3.掌握缺省参数

不传递参数值时会使用默认的参数值

默认值的参数必须定义在最后

4.掌握不定长参数

位置不定长传递以 * 号标记一个形式参数,以元组的形式接收参数

规范:形参一般命名为:args

关键字不定长传输以 ** 号标记一个形式参数,以字典的形式接受参数

规范:形参一般命名为:kwargs

def user(name, age, gender):
    print(f"姓名是:{name},年龄是:{age},性别是:{gender}")
#位置参数默认的使用形式
user("小王", 20, "女")
# 关键字参数
user(name='小江',age=22,gender='女')
user(name='小x',gender='男',age=28)
user('阿甜', gender='女', age=22)
def user(name, age, gender='女'): #注意注意:设置默认值的时候,统一放在最后
    print(f"姓名是:{name},年龄是:{age},性别是:{gender}")
user('小小陈',2)
def user_info(*args):
    print(f"{args}")
user_info(9,6,"小小酱")
def user_info(**kwargs):
    print(f"{kwargs}")
user_info(name='小x',gender='男',age=28) #以键值对的形式传入

第七章03-函数作为参数传递

1.函数作为参数传递

左边 :参数不确定 运算逻辑确定

右边:参数确定 运算逻辑不确定

def test_func(compute):
    result = compute(5 ,6) #确定computer是函数
    print(f"computer参数的类型是:{type(compute)}")
    print(f"计算结果:{result}")
#定义一个函数,准备作为参数传入的另一个函数
def compute(x, y):
    return x+y
#调用,并传入函数
test_func(compute)

2.函数本身是可以作为参数,传入另一个函数中使用的

3.将函数传入的作用在于:传入计算逻辑,而并非传入数据

第七章04-lambad匿名函数

def test_func(compute):
    result = compute(5, 6)
    print(result)
#通过lambda匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x,y: x*y)
test_func(lambda x,y: x*y)

1.匿名函数使用lambda关键字进行定义

2.定义语法:

lambda 传入参数 : 函数体(一行代码)

3.注意事项:

匿名函数用于临时构建一个函数,只用一次的场景

匿名函数的定义中,函数体只能写一行代码,如果函数体要多行代码,

不使用lambda,而用def。

第八章01-文件编码概念

1.什么是编码?

编码 是一种规则集合,记录了内容和二进制 间进行相互转换的逻辑。

编码有许多,常用的是 UTF-8编码

2.为什么需要使用编码?

计算机只认识 0,1。所以需要将内容翻译成0,1才能保存在计算机中。

同时也需要编码,将计算机保存的0和1,反向翻译回可以识别的内容。

第八章02-文件读取

1.操作文件需要通过open函数打开文件得到文件对象

2.文件对象有一下读取方法:

3.文件读取完成后,要使用文件对象.close()方法关闭文件对象,否则文件会被一直占用

第八章04-文件的写入操作

1.写入文件使用open函数的“W”模式进行写入

2.写入的方法:

write(),写入内容

flush(),刷新内容到硬盘中

3.注意事项

w模式,文件不存在时,会创建新的文件

w模式,文件存在 ,会清空原有的内容

close()方法,自带有flush()方法的功能

4.举例

# 打开文件 ,不存在的文件,r,w,a
import time
f = open("D:/test.txt","w",encoding="UTF-8")
# write写入
f.write("今天是2023年3月9日")    #内容写入到内存中
# flush刷新
f.flush()                     # 将内存中积攒的内容,写入到硬盘的文件中
# time.sleep(600000)
#close关闭
f.close()        #close方法,内置了flush的功能

第八章05-文件的追加写入操作

1.追加文件使用open函数的“a”模式进行写入

2.追加写入的方法(和w模式一致):

write(),写入内容

flush(),刷新内容到硬盘中

3.注意事项

a模式,文件不存在时,会创建新的文件

a模式, 文件存在 ,会在原有内容后面继续写入

可以使用“\n”来写出换行

4.举例

f = open("D:/test.txt","a",encoding="UTF-8")
f.write("2023年3月9日10:30:01")
f.close()

第九章01-了解异常

1.什么是异常:

程序运行的过程中出现了错误

2.bug是什么意思?

异常

第九章02-异常的捕获

1.为什么要捕获异常?

在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行

2.捕获异常的语法

try:

可能发生异常的语句

except [ 异常 as 别名:]

出现异常的捕获手段

[else:]

未出现异常的准备手段

[finally:]

不管出不出现异常都必须一定会做的适应

3.如何捕获所有异常

异常的种类很多,不管什么类型都能捕获到,使用:

except:

except Exception:

第九章03-异常的传递

def func1():
    print("func1  开始执行")
    num = 1 / 0
    print("func1 结束执行")

def func2():
    print("func2  开始执行")
    func1()
    print("func2 结束执行")

def main():
    try:
        func2()
    except Exception as e :
        print(f"出现异常了,异常信息是:{e}")
main()

第九章04-模块的概念和导入

1.什么是模块?

是python的代码文件,内部含有 类、函数、变量等,我们可以导入进行使用

2.模块的导入方式

模块在使用前需要先导入 导入的语法如下:

[ from 模块名 ] import [ 模块 | 类 | 变量 | 函数 | * ] [ as 别名 ]

3.常用的组合形式(不是很重要):

import 模块名

from 模块名 import 类、变量、方法等

from 模块名 import *

import 模块名 as 别名

from 模块名 import 功能名 as 别名

4.注意事项

from可以省略,直接import

as别名可以省略

通过 . 确定层级关系

模块的导入一般写在代码文件的开头位置

# 使用import导入time模块使用sleep功能(函数)
import time #导入python内置的time模块(time.py这个代码文件)
print("今天是2023年的")
time.sleep(6)   #通过.就可以使用模块内部的全部功能
print("三月二十四日")
# 使用from导入time的sleep功能(函数)
from time import sleep
print("今天是2023年的")
sleep(6)
print("三月二十四日")
# 使用 *  导入time模块的全部功能
from time import*         #  *表示全部的意思
print("今天是2023年的")
sleep(4)
print("三月二十四日")
# 使用as给特定功能加上别名
from time import sleep as t
print("今天是2023年的")
t(3)
print("三月二十四日")

第九章05-自定义模块并导入

1.如何自定义模块导入

在python 代码文件中正常写代码即可,通过import、from关键字和导入python内置模块一样导入即可

2._ _ main _ _变量的功能是什么

if _ main_ == "_main_"表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if 无法进入

3.注意事项

不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

_all_变量可以控制import * 的时候哪些功能可以被导入

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 Python 环境下配置 gRPC 的步骤: 1. 安装 gRPC 和 protobuf ``` pip install grpcio pip install grpcio-tools pip install protobuf ``` 2. 编写 .proto 文件 这里以一个简单的示例为例: ``` syntax = "proto3"; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } ``` 3. 生成 Python 代码 在命令行中运行以下命令: ``` python -m grpc_tools.protoc -I./protos --python_out=. --grpc_python_out=. ./protos/hello.proto ``` 其中,`./protos/hello.proto` 是你编写的 .proto 文件路径,`--python_out` 参数表示生成的 Python 代码输出路径,`--grpc_python_out` 表示生成的 gRPC Python 代码输出路径。 4. 编写 gRPC 服务端代码 ```python import grpc from concurrent import futures import time import hello_pb2 import hello_pb2_grpc class HelloServicer(hello_pb2_grpc.HelloServiceServicer): def SayHello(self, request, context): return hello_pb2.HelloResponse(message='Hello, %s!' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) hello_pb2_grpc.add_HelloServiceServicer_to_server(HelloServicer(), server) server.add_insecure_port('[::]:50051') server.start() try: while True: time.sleep(3600) except KeyboardInterrupt: server.stop(0) if __name__ == '__main__': serve() ``` 5. 编写 gRPC 客户端代码 ```python import grpc import hello_pb2 import hello_pb2_grpc def run(): with grpc.insecure_channel('localhost:50051') as channel: stub = hello_pb2_grpc.HelloServiceStub(channel) response = stub.SayHello(hello_pb2.HelloRequest(name='World')) print("Greeter client received: " + response.message) if __name__ == '__main__': run() ``` 以上就是在 Python 环境下配置 gRPC 的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值