Python零基础快速入门!

“人生苦短,我学python”是编程届的名言。用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言。拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的。编程理念都十分相似,只是看看语言的差异性。带着Java的基础,学习Python,准备上路了。

基础的运算

安装好python环境后,运行win+R,输入python直接进入python的交互页面,这边可以进行数学运算。

>>> 2+2
4

表1 数学操作符,优先级从高到低

操作符操作例子
**指数2 ** 38
%取模/取余数22 % 86
//整除/商数取整22 // 82
/除法22 / 82.75
*乘法3 * 515
-减法5 - 23
+加法2 + 24

由上面可以看出python前两个基础类型 整数、 浮点类型。这两个和java中的概念差不多。

字符串

作为基础的类型,当然少不了字符串了,和java一样,字符串可以进行拼接操作。例如:

>>> 'AAA' + 'BBB'
'AAABBB'
>>> 'CCC'+25
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> 'DEF'*3
'DEFDEFDEF'

如上,‘AAA’+'BBB'可以直接进行字符串的拼接。但是与java不同的是 python不会进行类型强制转化,所以当用字符串‘CCC’+int型的25的时候就会报错。对python进行*操作,字符串会进行复制。

变量名

这边插一段,在java中进行变量声明的时候,需要指定变量类型,在python中不需要,但是python变量名也需要一定的规则。

  1. 只能是一个词。
  2. 只能包含字母、数字和下划线。
  3. 不能以数字开头。

类型转化

为了让int型的5可以转化成字符串类型,从而和字符串拼接,python提供了一些内置函数。
表2 一些python内置函数

函数作用示例
str()转化类型为字符串str(5)
int()转化类型为整数int('5')
float()转化类型为浮点数float('5')
print()打印函数
input()读取用户输入数据myName = input()
len()内容长度len(myName)

控制流

布尔值

现在引入第四个数据类型,布尔值。python的布尔值也是有真或者假,但是python中的真为True(注意T必须大写),假为False(F也必须为大写),同样的布尔类型不能与其他类型相比较。

>>> True
True
>>> true
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> True = 1File "<stdin>", line 1
SyntaxError: can't assign to keyword在这里说一下 光理论还是不够的,重点还是要实战,如果你没有最新的python入门到实战教程,可以去小编的Python解答交流群:1148633274 免费领取。相互讨论学习

比较类型

表3 比较类型

操作符含义
==等于
!=不等于
<小于
>大于
<=小于等于
>=大于等于

同时python也可以使用二元操作符 and、or、not同java中的与、或、非。

条件与代码块

你前面看到的布尔表达式可以看成是条件,它和表达式是一回事。“条件”只是在 控制流语句的上下文中更具体的名称。条件总是求值为一个布尔值,True 或 False。控制 流语句根据条件是 True 还是 False,来决定做什么。几乎所有的控制流语句都使用条件。

代码块

python没有java中那种{}来区分代码块,python中所有的代码块都是通过缩进进行的。

  1. 缩进增加时,代码块开始。
  2. 代码块可以包含其他代码块。
  3. 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。
>>> if 'a'=='b':
...     print('真')
... else:
...     print('假')
...
假

以上是一个if else 的控制流,条件后面加上冒号,并且代码块需要缩进方式。

while循环的格式如下:

spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1

另外 python 也有break 和continue 关键字可以使用。

for循环

for循环单另儿拿出来以示尊重,for循环的格式如下:

for 关键字;
一个变量名;
in 关键字;
调用 range()方法,最多传入 3 个参数;
冒号;
从下一行开始,缩退的代码块(称为 for 子句)。

for i in range(5):print('Jimmy Five Times (' + str(i) + ')')

i分别执行0、1、2、3、4.

range()方法其实有三个参数,只是可以省略其中两个。range(start、end、gap),可以指定开始、结束和步长。

>>> for i in range(0,10,3):
...     print(i)
...
0
3
6
9

函数

导入模块

Python 程序可以调用一组基本的函数,这称为“内建函数”,包括你见到过的print()、input()和 len()函数。Python 也包括一组模块,称为“标准库”。每个模块都是一个 Python 程序,包含一组相关的函数,可以嵌入你的程序之中。例如,math模块有数学运算相关的函数,random 模块有随机数相关的函数,等等。
利用import或者from import语句

自定义函数

除了内建函数,大部分的函数都是自定义的。(即使从模块中导入的函数也是别人自定义好的,让你使用的)

def hello(name):print('Hello ' + name)

def 函数名(参数):
    函数体

None

在Python中有一个值称为None,它表示没有值。None是NoneType数据类型的唯一值(其他编程语言可能称这个值为null、nil或 undefined)。就像布尔值True和False一样,None必须大写首字母 N。

异常处理

def temp_convert(var):try:return int(var)except ValueError, Argument:print "参数没有包含数字\n", Argument

类似于java,python捕获处理一场用的是try,except,只不过在except后面除了可以跟异常类(比如例子中的ValueError),还可以跟上引发一场的参数(比如例子中的Argument,其实就是try中的var)

列表

列表可以看作java中的数组集合,可以存放一些元素,比如>>> spam = ['cat', 'bat', 'rat', 'elephant']。我们可以通过index获取某个元素,比如spam[0]=‘cat’,同时可以从后往前拿数据,比如spam[-1]='elephant'。

切片

除了直接操作index,获取某个元素之外,还可以通过切片获得一段子列表。

>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']

列表的拼接与复制

与java不同的是,python的列表可以自由的拼接复制。

>>> [1, 2, 3] + ['A', 'B', 'C']
[1, 2, 3, 'A', 'B', 'C']
>>> ['X', 'Y', 'Z'] * 3
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']

列表结合某些关键字和方法

  1. 删除某列表中的某元素,可以直接用del关键字。

  2. 也可以结合for循环

>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>> for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
  1. 利用 in 、not in 直接判断某元素是否在列表中
>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
  1. index()方法判断某元素在列表中的第一次出现的下标,没有的话就报错。
>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1
复制代码
  1. 用 append()和 insert()方法在列表中添加值
    append()方法调用,将参数添加到列表末尾。insert()方法可以在列表任意下标处插入一个值。insert()方法的第一个参数是新值的下标,第二个参数是要插入的新值。

  2. 用remove()方法从列表中删除值

  3. 用sort()方法将列表中的值排序

元组

在java中,我们知道String 是被final修饰的,所以String本身是不能修改的,如果对String进行修改,其实是在内存中新建了一个新的String。类似的python中也有一个不可修改的数据类型——元组。元组和列表差不多,很多方法都是共通的。只不过,元组是用"()"表示,并且元组内的元素不能被修改,也不能对元组进行增加删除操作。

元组和列表的转化

函数list()和tuple()将返回传递给它们的值的列表和元组版本。

>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

引用与引用函数

>>> spam = [0, 1, 2, 3, 4, 5]
>>> cheese = spam
>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]

看上面的代码,非常好理解,spam将引用复制给cheese,而不是复制的对象,所以对某个引用操作,都会改变那唯一的对象。如果想为cheese引用生成一个新的对象,就需要用到拷贝函数copy()和deepcopy()。其实就是java中的浅拷贝和深拷贝。

>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

deepcopy()深拷贝是指,不仅生成一个与spam一样新的对象,连spam内部的数据也一起复制一堆新的对象出来。就好比说把'A','B'这种元素分别换成一个个子列表,浅拷贝不会对他们复制,而深拷贝会对这些对象进行复制。

字典

像列表一样,“字典”是许多值的集合。但不像列表的下标,字典的索引可以使用许多不同数据类型,不只是整数。字典的索引被称为“键”,键及其关联的值称为“键-值”对。所以可以说字典就是java中的Map。

 myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
复制代码

与列表不同的是,字典没有顺序的概念,所以不能通过操作index获取某元素,不能使用切片,不能使用排序函数。

操作字典

基本操作

所以操作字典,就需要另辟蹊径,使用函数keys()、values()和 items()。顾名思义,分别是获取字典的key值们,val值们,和键值对本身们。

>>> spam = {'color': 'red', 'age': 42}
>>> for v in spam.values():print(v)
red
42
>>> for k in spam.keys():print(k)
color
age
>>> for i in spam.items():print(i)
('color', 'red')
('age', 42)

值得一提的是 spam.keys()获得的是元组,如果希望的到对应的列表就需要用list函数转化。

检查字典中是否存在键或值

可以利用in 或者not in 关键字判断数据是否在字典中。

>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys()
False
>>> 'color' not in spam.keys()
True
>>> 'color' in spam
False
get()和setdefault()方法

get()可以通过key值找到相对应的value值。get有两个参数,第一个参数是key值,第二个参数是在键值对不存在(或者说key不存在)的时候,给予的默认值。

>>> picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'
'I am bringing 0 eggs.'

setdefault()有两个参数,第一个是要插入键值对的key值,第二个是默认值。当原字典中有这个key值,就什么也不做,如果原字典中没有这个key值,就将默认值作为value,同key一起拼成键值对插入到字典中。

>>> spam = {'name': 'Pooka', 'age': 5}
>>> spam.setdefault('color', 'black')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}
>>> spam.setdefault('color', 'white')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}

字符串操作

我们早已经知道了字符串和其基本操作了,当我们又学习了列表、元组、字典之后再来看一下更加丰富的处理字符串的方法。

转移字符和原始字符

和java一样,python也是用 \ 对特殊字符进行转义。同时,还有原始字符 r。可以在字符串开始的引号之前加上r,使它成为原始字符串。“原始字符串”完全忽略所有的转义字符,打印出字符串中所有的倒斜杠。

>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.

注释与多行字符

python单行注释可以使用特殊字符#,同时多行注释可以使用""".

# 这是一行注释
"""
这是多行注释
这是多行注释
这是多行注释
"""

有时候我们在使用print函数的时候,打印的字符串很长很长,为了页面好看,可以使用'''将大字符串拆分成好几行。

print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')

字符串下标和切片

一个字符串也可以当作列表来处理,其中元素可以看作是一个个字符。所以就可以对字符串进行下标操作或者切片操作。同样的就可以利用in、not in判断某字符是否在字符串内了。

>>> spam = 'Hello world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[6:]
'world!'

一些字符串内建方法

  1. upper() 字符串全部变大写
  2. lower() 字符串全部变小写
  3. isupper()字符串至少有一个字母,并且所有字母都是大写
  4. islower()字符串至少有一个字母,并且所有字母都是小写
  5. isalpha()字符串只包含字母,并且非空
  6. isalnum()字符串只包含字母和数字,并且非空
  7. isdecimal()字符串只包含数字字符,并且非空
  8. isspace()字符串只包含空格、制表符和换行,并且非空
  9. startswith()字符串以该方法传入的字符串开始
  10. endswith()字符串以该方法传入的字符串结束
  11. join()拼接字符串,可指定分隔符
  12. split()通过某值切割字符串
  13. rjust()左填充,如果输出数据不足,补充空格
  14. ljust()右填充,如果输出数据不足,补充空格
  15. center()字符串居中,左右数据不足,补充空格

结束

呜呼,python的基础语法就算过了一遍,当然这只是基础中的基础。像python怎么处理多线程、类的概念、内存管理等内容有时间再看吧。不忘初心,最开始学习python只是把它当作辅助语言,写写小脚本什么的,不打算研究太深,毕竟时间有限,java还有很多东西要去研究,并且,除了编程,这个世界还有很多美好的事情等待我去体验。学以致用,写爬虫也是我学习python的一个动力,写了一个小脚本爬取豆瓣电影TOP250.(好像这个是爬虫入门经典案例吧,哈哈)代码贴一下

import requests as rq
from bs4 import BeautifulSoup
import pandas as pddef get_data(url):print(url)html = rq.get(url).content.decode("utf-8")soup = BeautifulSoup(html,"lxml")divItems = soup.find_all("div","item")for item in divItems:name = item.find('span',{'class':'title'}).textrating_num = item.find('span',{'class':'rating_num'}).textnumber = item.find('em').textimgUrl = item.find("img").attrs['src']print("----------->")print("number:"+number)numbers.append(number)print("name:"+name)names.append(name)print("rating_num:"+rating_num)rating_nums.append(rating_num)print("imgUrl:"+imgUrl)imgUrls.append(imgUrl)print("----------->")data_df = pd.DataFrame()
numbers = []
names = []
rating_nums = []
imgUrls = []for num in range(0,10):get_data("https://movie.douban.com/top250?start={}&filter=".format(int(num)*25))data_df["序列"] = numbers
data_df["名称"] = names
data_df["评分"] = rating_nums
data_df["海报"] = imgUrls
writer = pd.ExcelWriter('movie_top250.xlsx')
data_df.to_excel(writer, 'page_1', float_format='%.5f')  # float_format 控制精度
writer.save()

当然,提前需要install的模块 requests
BeautifulSoup4
pandas
openpyxl
lxml(BeautifulSoup4 的解析器)

最后这里给大家免费分享一份Python学习资料,包含了视频、源码、课件,希望能够帮助到那些不满现状,想提示自己却又没用方向的朋友,也可以和我一起来交流呀!

编辑资料、学习路线图、源代码、软件安装包等!【点击这里】领取!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

 【点击领取】资料!

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

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

相关文章

Python函数的介绍;变量的作用域;递归函数

一、函数的创建和调用 1.1、什么是函数 函数就是执行特定任和以完成特定功能的一段代码 1.2、为什么需要函数 复用代码 隐藏实现细节 提高可维护性 提高可读性便于调试 1.3、函数的创建 def 函数名(输入函数)函数体(return XXX) 1.4、函数的调用 函数名 (实际参数) 二、…

当当网数据采集:Scrapy框架的异步处理能力

在互联网数据采集领域&#xff0c;Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库&#xff0c;如twisted&#xff0c;来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力&#xff0c;并展示如何在当当网数据采集项目中应用这一能…

理解 Objective-C 中 `+load` 方法的执行顺序

理解 Objective-C 中 load 方法的执行顺序 在 Objective-C 中&#xff0c;load 方法是在类或分类被加载到内存时调用的。它在程序启动过程中非常早的阶段执行&#xff0c;用于在类或分类被加载时进行一些初始化工作。理解 load 方法的执行顺序对于编写可靠的 Objective-C 代码…

docker build时的网络问题

docker build时无法yum安装包&#xff0c;因为无法访问外网&#xff0c;无法ping通外网。 解决办法&#xff1a; systemctl stop NetworkManager.service firewall-cmd --permanent --zonetrusted --change-interfacedocker0 systemctl start NetworkManager.service systemct…

C++开发示例、护照真伪查验接口、护照阅读器

在这个全球化的世界里&#xff0c;旅行已经成为了连接不同文化和国家的桥梁。然而&#xff0c;这也给不法分子提供了可乘之机&#xff0c;伪造或篡改护照成为了他们逃避责任的通行证&#xff0c;对此&#xff0c;为助力确保每一份护照的真实性&#xff0c;维护国家财产安全&…

用Java手写jvm之实现java -version的效果

写在前面 源码 。 本文来用纯纯的Java代码来实现java -version的效果&#xff0c;就像下面这样&#xff1a; 1&#xff1a;程序 这里输出类似这样的&#xff1a; java version "9" Java(TM) SE Runtime Environment (build 9181) Java HotSpot(TM) 64-Bit Serve…

[保姆级教程]uniapp安装使用uViewUI教程

文章目录 创建 UniApp 项目下载uView UI下载安装方式步骤 1: 安装 uView UI步骤 2: 查看uView UI是否下载成功步骤 3: 引入 uView 主 JS 库步骤 4: 引入 uView 的全局 SCSS 主题文件步骤 5: 引入 uView 基础样式步骤 6: 配置 easycom 组件模式注意事项 NPM方式步骤 1: 安装 uVi…

websocket状态机

websocket突破了HTTP协议单向性的缺陷&#xff0c;基于HTTP协议构建了双向通信的通道&#xff0c;使服务端可以主动推送数据到前端&#xff0c;解决了前端不断轮询后台才能获取后端数据的问题&#xff0c;所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…

力扣题解(组合总和IV)

377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 思路&#xff1a; 本题实质上是给一些数字&#xff0c;让他们在满足和是targ…

MATLAB绘制正弦波、余弦波、方波、三角波

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件&#xff0c;提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中&#xff0c;你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例&#xff0c;展示了如何使用MATLAB的命令来实现正弦…

基于dcm4chee搭建的PACS系统讲解(一)docker搭建精简版

文章目录 知识点PACSdcm4chedcm4chee部署dcm4chee方式 docker部署docker编排 总结 最近项目开始需要用到PACS系统&#xff0c;于是研究了一番&#xff0c;选用了dcm4chee搭建PACS系统&#xff0c;抛出 dcm-arc-light的git地址 。 知识点 PACS Picture Archiving and Communic…

【详细的springboot自动装载原理】

1.默认提供的核心配置模块 springboot提供了 spring-boot-autoconfigure模块&#xff0c;该模块为springboot自动配置的核心模块&#xff0c;它初始化好了很多我们平时需要的配置类&#xff0c;那么有了这些配置类就能生效了吗&#xff1f;得需要一个东西在启动的时候去把它加…

uniapp 小程序 嵌套 webview 返回需要点击两次

uniapp 小程序 嵌套 webview 返回需要点击两次 先 上图 小程序也监听不到 返回事件在网上找了一圈 都没有理想的答案&#xff0c;猜测 是因为嵌入的页面中有问题果然 小程序中嵌入的代码 <view><web-view :src"urlSrc" ></web-view></view>…

常用的python程序汇总——入门级

只用于记录最近的一些日常程序。 目录 前言 一、文件和目录管理 1.读取文件结构 读取所有文件夹和文件 读取到N级子文件夹和文件 只读取到N级子文件夹 2.遍历文件并处理&#xff08;复制、删除&#xff09; 说明&#xff1a; 二、数据分析和处理 三、数据可视化 四、…

关于银联支付交易状态码的一些分析

目录 关于银联支付 一些准备 交易状态码的一些分析 小结 关于银联支付 目前B2C购物支付场景下&#xff0c;支付宝和微信的在线支付已经成为我们经常遇到的支付方式。另外&#xff0c;银联支付也是我们日常的一种支付方式&#xff0c;本文所指的银联支付即指中国银联网关支…

NumPy算法封装:优化你的科学计算

NumPy算法封装&#xff1a;优化你的科学计算 作为一名资深的Python程序员&#xff0c;我深知NumPy库在科学计算中的重要性。NumPy不仅提供了强大的多维数组对象ndarray&#xff0c;而且封装了一系列高效的算法&#xff0c;极大地简化了我们的编程工作。本文将深入探讨NumPy的算…

IActionResult 介绍

IActionResult 是 ASP.NET Core MVC 中的一个接口&#xff0c;它代表了一个动作&#xff08;Action&#xff09;方法的返回类型。在 ASP.NET Core MVC 中&#xff0c;控制器&#xff08;Controller&#xff09;中的每个动作方法都可以返回一个 IActionResult 或其派生类型的实例…

jdk1.8 List集合Stream流式处理

jdk1.8 List集合Stream流式处理 一、介绍(为什么需要流Stream&#xff0c;能解决什么问题&#xff1f;)1.1 什么是 Stream&#xff1f;1.2 常见的创建Stream方法1.3 常见的中间操作1.4 常见的终端操作 二、创建流Stream2.1 Collection的.stream()方法2.2 数组创建流2.3 静态工厂…

深度学习之DeepMind的AlphaZero

AlphaZero 是 DeepMind 开发的一种人工智能程序,最初在 2017 年推出。它是一种通用的自我学习算法,能够通过自我对弈来学习并掌握各种棋类游戏,比如国际象棋、围棋和将棋。与传统的棋类 AI 不同,AlphaZero 不依赖于人工设置的规则或数据库中的棋局,而是通过自我对弈和深度…

理解进程status的二进制位表示及进程等待(是什么,为什么,怎么办)

信号编号&#xff1a;低7位 状态编号&#xff1a;次低8位 1.子进程退出后会变为僵尸进程&#xff0c;将退出结果写入自身的task_struct结构体中 2.wait/waitpid是一个系统调用->OS可以读取子进程的task_struct 1.为什么要进行进程等待&#xff1f; 1.将子进程&#xff…