Python基础教程(一)

news2024/11/15 9:41:28

1.编程基础

1.1标识符

标识符是变量、函数、模块和其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命名规则,比如说:

        1、标识符是由字母 (A~Z 和 a~z) 、下划线和数字组成,但第一个字符不
能是数字。
        2、标识符不能和 Python 中的保留字(关键字)相同。
        3、Python 中的标识符中,不能包含空格、@、% 以及 $等特殊字符。
        4、在 Python 中,标识符中的字母是严格区分大小写的。
        5、Python 语言中,以下划线开头的标识符有特殊含义,例如:_width、__add、__init__

1.2 关键字

False    class    from    def    if    raise    in    True    try
assert    else    with    await  finally    or    None    and    del   
is    while    nonlocal    continue    global    pass    import    as    
elif    return    lambda    async    except    yield    break    for not

1.3变量

>>> greet="hahaha"
>>> greet
'hahaha'
>>> score=95.5
>>> score
95.5
>>> x=10
>>> x
10
>>> x=30
>>> x
30
>>> x=True
>>> x
True
>>>

1.4 语句

Python代码是由关键字、标识符、表达式和语句等构成的,语句是代码的重要组成部分。语句结尾的逗号加不加都可以。

>>> greet="Holle world"
>>> score=95.5
>>> a=b=c=10
>>> b
10
>>> score
95.5
>>>

1.5代码注释

#这是一个整形变量
score=95
print(score)#打印score变量
'''
zzz
bbfdf
hahahah
'''

"""
gesgs
....
sdvss
"""

#表示单行注释

'''

'''表示多行注释

"""

"""表示多行注释

1.6模块

模块就是一个包含了Python定义和声明的“.py”文件。
import<模块名>
from<模块名> import<代码元素>
from<模块名> import <代码元素> as<代码元素别名>

2.数字类型的数据

2.1 数据类型

Python中有6种主要的内置数据类型:数字、字符串、列表、元组、集合和字典
Python中有4种数字类型整数类型、浮点类型、复数类型和布尔类型

2.2 整数类型

Python中整数类型为int类

>>> 10
10
>>> 0o10  #八进制
8
>>> 0x0A  #十六进制
10
>>> 0b1010  #二进制
10
>>> type(0x0a)
<class 'int'>
>>> 

2.3 浮点类型

Python中浮点类型为float类

>>> type(1.11)
<class 'float'>
>>> 

2.4 复数类型

复数在数学中被表示为: a+bi,其中a为实部,b为虚部,i为虚数单位。
在Python中虚数单位为j或者J。

>>> c=3+2j
>>> c
(3+2j)
>>> type(c)
<class 'complex'>
>>> a=complex(3,2)
>>> a
(3+2j)
>>> 

2.5 布尔类型

Python中的布尔类型为bool类,它只有两个值: True和False。

>>> bool(None)
False
>>> bool(0)
False
>>> bool([])
False
>>> bool(2)
True
>>> bool("")
False
>>> bool(" ")
True

2.6 数字类型相互转换

2.6.1 隐式类型的转换

数字之间可以进行数学计算,在进行数学计算时若数字类型不同,则会发
生隐式类型的转换。

>>> a=1+True
>>> a
2
>>> a=1.0+1
>>> a
2.0
>>> a=1.0+False
>>> a
1.0

2.6.2 显式类型的转换(强制转换)

>>> a=int(1.0)+1
>>> a
2
>>> int(False)
0
>>> int(True)
1
>>> int(0.3)
0
>>> float(3)
3.0
>>> float(True)
1.0
>>> 

3.运算符

3.1 算术运算符

3.2 比较运算符

3.3 逻辑运算符

3.4 位运算符

3.5 赋值运算符

4.程序流程控制

4.1 分支语句

4.1.1 if语句

if 条件表达式:
语句块

age=5
if age>3:
    print("hahaha")

4.1.2 if-else语句

if 条件表达式:
        语句块1
else:
        语句块2

u_name=input("请输入用户名:")
pwd=input("请输入密码:")
if u_name=="admin" and pwd=="123":
    print("登入成功!即将进入主界面...")
else:
    print("您输入的用户名或密码错误,请重新输入...")

4.1.3 if-elif-else语句

if 条件表达式1:
        语句块1
elif条件表达式2:
        语句块2
elif条件表达式n:
        语句块n
else:
        语句块n+1

score=int(input("请输入您的会员积分:"))
if score==0:
    print("注册会员")
elif 0<score<=200:
    print("铜牌会员")
elif 200<score<=1000:
    print("银牌会员")
elif 1000<score<=3000:
    print("金牌会员")
else:
    print("钻石会员")

4.1.4 嵌套分支结构

if 条件表达式1:
        if条件表达式2:
                语句块1
        else:
                语句块2
else:
        语句块3

id_code = input('请输入身份证号码:')
if len(id_code) == 18:
    number = int(id_code[-2])
    if number%2 == 0:
        print("女性")
    else:
        print("男性")
else:
    print("输入不合法")

4.2 循环语句

4.2.1 while循环

while 判断条件:
        语句

# 输出1-100的所有数的和
count = 0
num = 0
while count < 100:
    count = count + 1
    num = num + count
print("1-100的所有数的总和为: 和",num)

#无限循环
while True:
    num=int(input("请输入一个数字:"))
    print("您输入的数字是:",num)

4.2.2 for循环

for 临时变量 in 可迭代对象:
执行语句1
执行语句2

#数组遍历
languages =["c","Python","Java","C#"]
for x in languages:
 print("当前语言是:",x)

#输出[0~6),左开右闭包含0不包含6
for i in range(6):
    print("当前的数列为:",i)

#输出[1~3),左开右闭包含1不包含3
for i in range(1,3): #范围从1开始,不包含最后一个数字
    print(i)

#输出九九乘法表
for i in range(1, 10):#遍历9次,打印9行
    for j in range(1,10): #遍历9次,打印9列的数据
      if j<= i: # 当列数<=行数的时候,就可以打印乘法公式
        print(f"{j}*{i}={j*i}".format(j, i),end='\t')
    print("\n")

4.3 跳转语句

4.3.1 break语句

break:跳出循环

#遇到l跳出循环
for s in 'Hello':
    if s =='l':
        break
    print('当前字母为 :', s)


#判断质数
for n in range(2,10):
    for x in range(2,n):
        if n%x==0:
            print(n,'等于',x,'*',n//x)
            break
    else:   #当从内循环break跳出后不会执行else内的语句,否则会执行
        print(n,'是质数')

4.3.2 continue语句

continue:跳过本次循环

#当x<=0跳过本次循环
for x in [0,-2,5,7,-10]:
    if x<=0:
        continue
    print(x)

4.4 pass语句

pass:作用是占位,保持语句结构的完整,相当于{}

x=0
if x<=0:
    pass#作用是占位,保持if语句结构的完整

5.容器类型数据

5.1 序列

在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。

5.1.1 序列索引操作

>>> a="Hello"
>>> a[0]
'H'
>>> a[-5]
'H'
>>> a[5]   #越界访问
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
IndexError: string index out of range
>>> max(a)
'o'
>>> min(a)
'H'
>>> len(a)
5

5.1.2 加和乘操作

注意要同类型才行

>>> a='hello'
>>> print(a+' world')
hello world
>>> print(a+' world'+'你好')
hello world你好
>>> print(a*2)
hellohello

5.1.3 切片操作

sname[start : end : step]

start :切割开始索引,默认为0         end : 切割结束索引,默认为数组最大长度        step:切割步长,默认为1.

>>> str='Hello world'
>>> print(str[:2])  #注意是左闭右开[0,2)切割
He
>>> print(str[::2])  #step表示切割的步长,默认为1
Hlowrd
>>> print(str[:])
Hello world

5.1.4 成员测试

成员测试运算符有两个: in和not in。

>>> str='Hello'
>>> 'e' in str
True
>>> 'E' not in str
True

5.2 列表

5.2.1 创建列表

创建列表的方式非常简单,既可以使用中括号“[]”创建,也可以使用内置的list()函数快速创建。
①使用中括号“[]”创建列表

list_one=[] #空列表
list_two=['p','y','t' , 'h' , 'o' , 'n']#列表中元素类型均为字符串类型
list_three=[1,'a','&',2.3]#列表中元素类型不同

②使用list ()函数创建列表

>>> list_one=list(1)  #参数传递的对象必须是可迭代的
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> list_two=list('python')
>>> list_two
['p', 'y', 't', 'h', 'o', 'n']
>>> list_three=list([1,'python'])
>>> type(list_three)
<class 'list'>
>>> list_three
[1, 'python']
>>> from collections import Iterable  #导入迭代器模块
>>> print(isinstance([],Iterable))
True

5.2.2 追加元素

list_one=list([1,2,3,4])
print(list_one)
list_one.append(10)
print(list_one)
lint_two=list([5,6])
list_one.extend(lint_two)
print(list_one)
lint_two+=list_one
print(lint_two)

5.2.3 插入元素

>>> names=['zhang','li','wang']
>>> names.insert(2,'xiaoqian')   #在索引为2处插入
>>> names
['zhang', 'li', 'xiaoqian', 'wang']

5.2.4 替换元素

>>> names
['zhang', 'li', 'xiaoqian', 'wang']
>>> names[1]='lihua'
>>> names
['zhang', 'lihua', 'xiaoqian', 'wang']

5.2.5 删除元素

删除列表元素的常用方式有del语句、remove()方法和pop()方法

①del语句

>>> names
['zhang', 'lihua', 'xiaoqian', 'wang']
>>> del names[0]
>>> names
['lihua', 'xiaoqian', 'wang']

②remove()方法:元素替换,只会替换第一个符合要求的元素

>>> chars=['h','e','l','l','o']
>>> print(chars)
['h', 'e', 'l', 'l', 'o']
>>> chars.remove('e')
>>> print(chars)
['h', 'l', 'l', 'o']

③pop()方法

>>> numb=[1,2,3,4,5,6]
>>> print(numb.pop())
6
>>> print(numb.pop(2))
3
>>> print(numb)
[1, 2, 4, 5]

5.3 元组

元组 (tuple) 是一种不可变序列类型。元组中的元素是不允许修改的,除非在元组中包含可变类型的数据。

5.3.1 创建元组

①使用圆括号“()”创建元组

tuple_one=()#空元组
tuple_two=('t',' e','p','l','e')#元组中元素类型均为字符串类型
tuple_three=(0.3,1,'python','&')#元组中元素类型不同

②使用tuple()函数创建元组

tuple_null=tuple()
print(tuple_null)

tuple_str=tuple('abc')
print(tuple_str)

tuple_list=tuple([1,2,3])
print(tuple_list)

'''结果
>>> %Run main.py
()
('a', 'b', 'c')
(1, 2, 3)
'''

5.3.2 元组拆包

>>> val=(10,121)
>>> a,b=val
>>> a
10
>>> b
121

5.4 集合

集合集合 (set) 是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。

5.4.1 创建集合

set([iterable])                可变集合
frozenset([iterable])        不可变集合

①可变集合的创建

>>> set_one=set([1,2,3,4])
>>> set_two=set((1,2,3))
>>> type(set_one)
<class 'set'>
>>> type(set_two)
<class 'set'>
>>> set_one
{1, 2, 3, 4}
>>> set_three={1,21,2,11,44,21}
>>> set_three
{1, 2, 11, 44, 21}    #集合元素是无序的

#集合是元素唯一的
>>> set_one=set([1,2,3,1])
>>> set_one
{1, 2, 3}

②不可变集合的创建

>>> frozenset_one=frozenset((1,2,3,4))
>>> frozenset_two=frozenset([1,2,3,4])
>>> type(frozenset_one)
<class 'frozenset'>
>>> frozenset_two
frozenset({1, 2, 3, 4})

5.4.2 修改集合

①添加元素

>>> set_one=set()
>>> set_one
set()
>>> set_one.add('py')    #添加一个元素
>>> set_one
{'py'}
>>> set_one.update('thon')    #添加多个元素
>>> set_one
{'h', 'n', 't', 'py', 'o'}

②删除元素

>>> set_one={'zhangsan','liai','wangwu','xiaoq'}
>>> set_one.remove('zhangsan')
>>> set_one
{'liai', 'xiaoq', 'wangwu'}
>>> set_one.remove('zhangsan')
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
KeyError: 'zhangsan'
>>> set_one.discard('zhangsan')    #如果存在则删除
>>> set_one.discard('liai')
>>> set_one
{'xiaoq', 'wangwu'}
>>> set_one.pop()        #随机删除一个元素
'xiaoq'
>>> set_one
{'wangwu'}

③清空元素

>>> set_one={'zhangsan','liai','wangwu','xiaoq'}
>>> set_one.clear()
>>> set_one
set()

5.5 字典

字典 (dict) 是可迭代的、通过键 (key) 来访问元素的可变的容器类型的数据

5.5.1 创建字典

①使用花括号{}创建字典{键1:值1,键2:值2...}

注意:字典元素是无序的,键和值成对出现,键唯一,值可以不唯一

>>> scores={'zhangsan':100,'lisi':98,'wangwu':45}
>>> scores
{'zhangsan': 100, 'lisi': 98, 'wangwu': 45}
>>> scores_null={}
>>> type(scores)
<class 'dict'>
>>> scores_null
{}
>>> type(scores_null)
<class 'dict'>

②使用内置的dict ( )函数创建字典:dict(键1=值1,键2=值2...)

>>> dict_one=dict(name='zhangsan',age=20)
>>> dict_one
{'name': 'zhangsan', 'age': 20}
>>> dict_two=dict({100:'zhangsan',101:'lisi',102:'wangwu'})
>>> dict_two
{100: 'zhangsan', 101: 'lisi', 102: 'wangwu'}
>>> dict_three=dict(((100,'zhangsan'),(101,'lisi')))
>>> dict_three
{100: 'zhangsan', 101: 'lisi'}
>>> dict_four=dict([(100,'zhangsan'),(101,'lisi')])
>>> dict_four
{100: 'zhangsan', 101: 'lisi'}
>>> dict_five=dict([(100,'zhangsan'),(100,'wangwu'),(101,'lisi')])
>>> dict_five
{100: 'wangwu', 101: 'lisi'}

5.5.2 修改字典

①添加和修改字典元素

>>> add_dict={'stu1':'zhangsan'}
>>> add_dict.update(stu2='lisi')
>>> add_dict
{'stu1': 'zhangsan', 'stu2': 'lisi'}
>>> add_dict['stu3']='wangwu'
>>> add_dict
{'stu1': 'zhangsan', 'stu2': 'lisi', 'stu3': 'wangwu'}
>>> add_dict['stu1']='xiaoqian'
>>> add_dict
{'stu1': 'xiaoqian', 'stu2': 'lisi', 'stu3': 'wangwu'}

②删除字典元素

>>> dist_one={'001':'zhangsan','002':'lisi','003':'wangwu','004':'xioaqian'}
>>> dist_one.pop()
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> dist_one.pop('001')    #要传递参数键才能删除
'zhangsan'
>>> dist_one
{'002': 'lisi', '003': 'wangwu', '004': 'xioaqian'}
>>> dist_one.popitem()        #随机删除一对键值对
('004', 'xioaqian')
>>> dist_one
{'002': 'lisi', '003': 'wangwu'}
>>> dist_one.clear()    #清空
>>> dist_one
{}

5.5.3 访问字典

>>> dist_one={'001':'zhangsan','002':'lisi','003':'wangwu','004':'xioaqian'}
>>> print(info.items())
dict_items([('001', 'zhangsna'), ('002', 'lisi'), ('003', 'wangwu')])
>>> for i in info.items():
    print(i)
    
('001', 'zhangsna')
('002', 'lisi')
('003', 'wangwu')
>>> print(info.keys())
dict_keys(['001', '002', '003'])
>>> for i in info.keys():
    print(i)
    
001
002
003
>>> print(info.values())
dict_values(['zhangsna', 'lisi', 'wangwu'])
>>> for i in info.values():
    print(i)
    
zhangsna
lisi
wangwu

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

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

相关文章

jmeter-beanshell学习14-字符串替换

前面做断言的时候&#xff0c;会记录各种失败信息&#xff0c;比如&#xff1a;“失败原因1,失败原因2,失败原因3”&#xff0c;中间英文逗号隔开&#xff0c;最后写失败报告的时候&#xff0c;再根据英文逗号&#xff0c;写到不同行 即使不分行&#xff0c;写csv文件&#xff…

一文学会CUDA编程:深入了解CUDA编程与架构(一)

前言&#xff1a; CUDA&#xff08;Compute Unified Device Architecture&#xff0c;统一计算设备架构&#xff09;是由NVIDIA公司开发的一种并行计算平台和编程模型。CUDA于2006年发布&#xff0c;旨在通过图形处理器&#xff08;GPU&#xff09;解决复杂的计算问题。在早期…

x264 环路滤波原理系列:x264_macroblock_deblock_strength 函数

x264_macroblock_deblock_strength 函数 功能:计算去块滤波强度值,去块强度值决定了去块滤波器对像素值调整的程度。这些值通常基于以下因素:量化参数(QP):较高的QP值可能导致更强烈的去块;宏块的纹理复杂度:具有更复杂纹理的宏块可能需要更细致的去块处理;宏块的类型…

选项卡切换组件容器的实例

实现效果 点击选项卡A、B、C、D、E分别控制组件容器内各个形状组件的显隐。 实现流程 首先需要选择组件容器内的形状组件&#xff0c;默认实例是3个&#xff0c;如需添加多个可在数据中继续添加。 添加【选项卡】组件&#xff0c;在样式中设置5列&#xff0c;数据添加一列&am…

Jupyter Notebook无法自动打开浏览器解决方案

Step1&#xff1a; 在C盘&#xff08;默认C盘&#xff09;&#xff0c;找到用户文件夹 Step2&#xff1a; 打开用户文件夹&#xff0c;找到自己的“电脑名”文件夹 Step3&#xff1a; 打开“电脑名”文件夹&#xff0c;找到“.jupyter”文件夹 Step4&#xff1a; 打开“.ju…

猫头虎分享:9个实用的GPT-4o提示词

&#x1f389; 猫头虎分享&#xff1a;9个实用的GPT-4o提示词 摘要 在这篇文章中&#xff0c;猫头虎将与大家分享9个非常实用的GPT-4o提示词。这些提示词涵盖了从草图到App代码生成、通用网络爬虫到求职助理等多个领域。我们将深入探讨如何利用这些提示词提升工作效率和创作能…

【前端 · 面试 】HTTP 总结(十)—— HTTP 缓存应用

最近我在做前端面试题总结系列&#xff0c;感兴趣的朋友可以添加关注&#xff0c;欢迎指正、交流。 争取每个知识点能够多总结一些&#xff0c;至少要做到在面试时&#xff0c;针对每个知识点都可以侃起来&#xff0c;不至于哑火。 前端面试http总结.012 前言 通过前面几篇内容…

2024宁波工业装备博览会-相聚12月

2024宁波工业装备博览会-相聚12月 时间&#xff1a;2024年12月2-4日 地点&#xff1a;宁波国际会展中心 2024中国(宁波)工业装备博览会展出面积、展品内容在不断扩大&#xff0c;专业观众成倍增加&#xff0c;极大地推动宁波智能制造产业的国际交流及贸易市场的发展。展会不…

企业如何通过有效的库存管理来降低库存成本?

企业如何通过有效的库存管理来降低库存成本&#xff1f; 那么如何在满足市场需求的同时&#xff0c;最大限度地减少资金占用、降低仓储成本、避免库存积压与损耗呢&#xff1f; 这个问题很好回答&#xff0c;本文我想带你了解WMS仓库管理系统&#xff0c;其能够有效并精准的帮…

选择最佳SOLIDWORKS服务商:您的成功之钥

在当今快速发展的制造业环境中&#xff0c;选择合适的SOLIDWORKS服务商对于确保您的项目成功至关重要。无论是初次接触SOLIDWORKS还是希望提升现有的设计流程&#xff0c;找到一位可靠的服务商都能为您提供所需的技术支持和服务。本文将帮助您了解如何选择最佳的SOLIDWORKS服务…

推荐3款电脑上不可或缺的神仙软件

Allen Explorer Allen Explorer是一款功能强大的文件管理软件&#xff0c;旨在替代Windows系统的“我的电脑”。它采用了类似Chrome的界面设计&#xff0c;简洁美观&#xff0c;支持多标签页、双窗口、收藏夹等功能&#xff0c;极大地优化了文件操作体验。用户可以对文件项目进…

使用 JavaScript 对图像进行量化并提取主要颜色

前言 前段时间在 Halo 的 应用市场 中遇到希望主题和插件的封面图背景色为封面图主色的问题&#xff0c;于是乎需要根据封面图提取主色就想到使用 K-Means 算法来提取。 在图像处理中&#xff0c;图像是由像素点构成的&#xff0c;每个像素点都有一个颜色值&#xff0c;颜色值…

Gstreamer结合腾讯云进行rtmp直播

直播效果&#xff1a; 一、注册腾讯云直播账户&#xff0c;生成rtmp推流地址 腾讯云直播地址&#xff1a; https://console.cloud.tencent.com/live 首先需要注册登录。然后电机生成直播地址&#xff1a; 输入自己的流名字&#xff0c;比如test 复制这个RTMP地址。 这时候&am…

【数据结构与算法】循环队列

循环队列 一.循环队列的引入二.循环队列的原理三.循环队列判断是否为满或空1.是否为空2.是否为满 四.循环队列入队五.循环队列出队六.循环队列的遍历七.循环队列获取长度八.总结 一.循环队列的引入 还记得我们顺序队列的删除元素嘛,我们有两种方式,一种是将数组要删除元素后面…

系统数据库

Mysql数据库安装完成后&#xff0c;自带了一下四个数据库&#xff0c;具体作用如下&#xff1a; 常用工具&#xff1a;

<数据集>工程机械识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;6338张 标注数量(xml文件个数)&#xff1a;6338 标注数量(txt文件个数)&#xff1a;6338 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Excavator, Loader, Dumb_truck, Mobile_crane, Roller, Bull_dozer, …

功能实现——采用 Hutool 工具发送邮件

目录 1.需求分析2.准备工作&#xff1a;开通邮箱的 SMTP 服务3.项目环境搭建4.代码实现mail.htmlEmployee.javaMailController.javaMailService.javaMailServiceImpl.java 5.测试 1.需求分析 采用 Hutool 工具来实现发送邮件的功能&#xff0c;具体来说&#xff1a;为新员工发…

准备笔试第21天,牛客.十字爆破牛客.比木名居的桃子牛客.chinka蜜柑01背包

目录 牛客.十字爆破 牛客.比木名居的桃子 牛客.chinka蜜柑 01背包 牛客.十字爆破 就是上下左右加上&#xff0c;但是会遇到的问题就是&#xff0c;这块并不容易去获取得分&#xff0c;如果可能要四重循环&#xff0c;遍历这一行&#xff0c;这一列&#xff0c;然后把他们存在…

解决Ubuntu报错:sudo: /etc/sudoers is world writable

1. 情况描述 /etc/sudoer这个文件的权限由440变成了777&#xff0c;由于账户下有多个子账户&#xff0c;导致子账户的sudo权限不能使用。报错如下&#xff1a; 2.解决办法 执行下面的语句就ok了 pkexec chmod 0440 /etc/sudoers 参考链接 3.总结 不要随便改系统文件的权…

模型组合、注意力机制在单步、多步、单变量、多变量预测中的应用

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模型-CSDN博客 独家原创 | 基于TCN-SENet BiGRU-GlobalAttention并行预测模型-CSDN博客 独家原创 | B…