Python开发中基础中的基础,快速上手学习
这是目录,可以直接点击跳转
Python开发中基础中的基础,快速上手学习1.变量2.函数2.1 函数定义,函数调用
2.2 函数操作全局变量3.如何像C程序一样,以main函数的方式来定义程序入口,并使用这个main入口函数来开始调用前面的函数。4.如何使用if和elif判断5.如何使用for和while循环6.在python中使用延时函数,延时2秒输出打印的自定义内容。7.如何使用python分文件编写,比如a.py文件调用b.py里定义的函数8.串口通信操作8.1 Python使用windows系统的串口8.2 Python使用Linux的串口。8.2.1 Linux中串口与Windows通信 8.2.2 龙芯派串口通信 9.如何使用多线程编程10. 如何使用多进程编程
虽然是基础,但是并不会从安装python环境和IDE开始讲解,以下内容可使用:
Python版本3.7,PyCharm新建工程
1.变量
变量定义,赋值,和全局变量使用
比如实现:定义a和b变量,赋值a=10,b=20,并定义c打应出来两者的和。(尝试把a,b的值换成字符串试试。)
下面是一个不使用函数、直接顺序执行的 Python 程序,实现了上述需求:
对比普通的程序,最大的不同就是不使用函数,而是直接将变量的定义、赋值和全局变量的使用代码放在了一起。程序依然先定义了变量 a 和 b,并赋值为字符串 "10" 和 "20"。接着,我们使用 int() 函数将 a 和 b 转换为整数类型,并求和赋值给变量 c。最后,我们输出 a 和 b 的和即可。
只移除int()函数后看看什么结果。
如果将变量 a 和 b 的值改为数字 10 和 20,程序仍然可以正常运行,只需要将 int() 函数的使用移除即可。
2.函数
2.1 函数定义,函数调用
在 Python 中,我们使用
def
关键字来定义函数。函数可以接受参数,也可以不接受参数。函数中的语句将被执行一次或多次,可以返回一个值或者不返回值。下面是一个简单的 Python 函数的例子:
在这个例子中,我们定义了一个名为
greet
的函数,它接受一个参数:name
,表示要问候的人的名字。函数中的语句将输出一个问候语,其中使用了字符串拼接。print(f"Hello, {name}!")
使用了 Python3 引入的一种新式的字符串格式化语法,称为 f-字符串(f-string,也称格式化字符串字面量)。这种语法允许使用 {} 标识符来引用变量,Python 将自动将其替换为相应的变量值。使用 f-字符串的好处是,代码更简洁、易读,并且更容易传递变量到字符串中。要调用这个函数,我们可以使用以下代码:
运行上述代码,会输出如下内容:
这就是一个简单的 Python 函数的例子。使用
def
关键字定义函数,并在函数体中添加一些执行语句,然后再调用函数来运行这些语句,实现特定的功能。请自行练习:定义个函数用于交换a,b的值,形参传入a,b。返回值为a,b的和,并打应出交换的结果。
2.2 函数操作全局变量
下面是一个常用的 Python 程序,演示了如何使用全局变量:
在程序中,我们首先创建了两个全局变量 x 和 y,并将它们的值初始化为 1 和 2。接着,我们定义了一个函数 add,使用全局变量 x 和 y,并返回它们的和。我们还定义了一个函数 modify,使用 global 关键字声明全局变量 x 和 y,并分别将它们的值修改为 3 和 4。在修改完成后,我们输出一条信息来提示 x 和 y 的值已经被修改。
最后,我们调用了函数 modify 来修改全局变量 x 和 y 的值,并输出了 x 和 y 的值,以及调用函数 add 的结果。运行程序,输出结果如下:
从输出结果可以看出,调用函数 modify 后,全局变量 x 和 y 的值被成功修改为 3 和 4,然后在调用函数 add 时,使用了修改后的全局变量 x 和 y,返回了它们的和 7。
请自行练习:定义一个函数,将全局变量a,b的值进行交换,返回值是a和b的差值。并后续打印出交换数值的a,b。
3.如何像C程序一样,以main函数的方式来定义程序入口,并使用这个main入口函数来开始调用前面的函数。
if __name__ == "__main__":
是 Python 中一个常见的代码块,它用来判断当前脚本是直接被执行还是被导入到其他脚本中执行。
具体来说,当 Python 脚本被直接执行时,Python 解释器会将该脚本的 __name__
变量设置为 "__main__"
,并且执行 if __name__ == "__main__":
代码块中的内容。而当该脚本被其他脚本导入时, __name__
变量的值不是 "__main__"
,因此 if __name__ == "__main__":
代码块中的内容不会被执行。
这里举一个简单的示例程序,当我们直接执行该脚本时,输出一句话;当将该脚本作为模块导入到其他脚本中时,则不会输出。
如果我们直接运行该脚本文件,就会输出下面的内容:
但是,如果我们将该脚本作为模块导入到其他脚本中,就不会输出这些信息。例如,我们新建一个文件 namedemo.py,并导入该模块:
这时候运行 namedemo.py文件,就只会输出 add 函数的结果,而不会输出 example.py 中的测试语句。
当然,
if __name__ == "__main__":
最常见的用途还是作为模块的测试,我们可以在该语句块中编写一些测试代码,用于测试模块中的函数、方法、类等是否运行正常,这种方法也被称为 “单元测试”。4.如何使用if和elif判断
好的,下面是一个简单的 Python 示例,演示了如何使用
if
和 elif
来判断:这个示例中定义了
age
变量,并使用 if
和 elif
来判断 age
变量所代表的年龄段,并输出相应的结果。在 Python 中,
if
和 elif
用于根据条件表达式是否为 True
来选择要执行的代码块。如果条件表达式为 True
,则执行相应的代码块;如果为 False
,则跳过相应的代码块执行。在此示例中,首先判断年龄是否小于 18 岁,如果是,则输出 "对不起,您还未到法定年龄"。如果年龄不小于 18 岁,则继续执行第二个条件表达式,判断年龄是否大于等于 18 年且小于 60 年,如果是,则输出 "您已到达法定年龄,现在可以参加工作"。如果年龄不在这个范围内,则将执行最后一个
else
代码块,输出 "您已到达退休年龄,可以退休啦!"。这个示例演示了如何使用
if
和 elif
来根据条件表达式的结果来执行相应的代码块。实践中,if
和 elif
在判断条件、选择要执行的代码块等方面都有广泛的应用。5.如何使用for和while循环
编写一个 Python 程序,使用循环打印从 1 到 10 的所有整数。要求使用两种不同的循环结构实现:一种使用 for 循环,一种使用 while 循环。
6.在python中使用延时函数,延时2秒输出打印的自定义内容。
这里主要是为了熟悉import的用法和引用的包函数引用
7.如何使用python分文件编写,比如a.py文件调用b.py里定义的函数
在 Python 中,可以通过模块化的方式将代码分散到不同的文件中,以提高代码的组织性和可复用性。具体实现步骤如下:
创建一个新的 Python 文件,命名为 b.py,用于定义函数。
在Python中,f-string是一种用于创建字符串的语法。在f-string中,我们可以在字符串中使用大括号{}来插入变量、表达式等内容,其中f代表着格式化字符串,它可以将变量的值插入到字符串中。通过在字符串的前面添加f,Python解释器会在运行时查找{}中的变量,并将其替换为实际的值,从而实现格式化输出。
在上面的代码中,f就是代表这是一个f-string格式的字符串,{}中的{name}表示要插入一个变量。当代码运行时,Python解释器会将f-string中的{name}替换为实际的变量值,并输出 "Hello, {实际的变量值}!"的字符串。
在上面的示例代码中,我们定义了一个名为
greet
的函数,用于输出一条问候语。在需要调用该函数的 Python 文件(例如 a.py)中,使用
import
语句引入 b.py 文件中的函数。在上面的示例代码中,我们使用
import
语句引入了 b.py 文件,并调用了其中定义的 greet
函数,输出了一条问候语。需要注意的是,在使用
import
语句时,需要注意文件路径和命名空间的问题。具体来说,如果需要引入的文件和当前文件位于同一目录下,则可以直接使用文件名进行引入。如果需要引入的文件位于其他目录下,则需要使用相对路径或绝对路径进行引入。此外,使用 import
语句引入模块后,需要使用模块名来访问其中的函数,即使用 模块名.函数名
的形式进行调用。通过以上方式,就可以在一个 Python 文件中调用另一个文件中定义的函数了。
8.串口通信操作
使用虚拟串口工具进行虚拟两个电脑的串口,然后虚拟连接在一起,
(使用文件夹中我放的虚拟串口助手:Virtual+Serial+Port+Driver+6.9,下载URL:点击这个下载链接直接下载软件或者百度云链接https://pan.baidu.com/s/1ZP-zIexPJycspsPcrPMsdg?pwd=7myr(这个软件做后面的Linux与Windows互相串口通信的时候也有用。)
,内有破解教程,复制里面两个文件后去覆盖安装目录的文件,安装破解打开后使用此工具将COM1和COM2互相连接在一起)
8.1 Python使用windows系统的串口
如何python打开windows系统的串口,并发送数据、接收数据,然后升级程序,使其将收到的串口数据又发送出去。
在Python中,可以使用
pyserial
库实现串口通信,具体步骤如下:- 安装
pyserial
库
在pycharm中,点击文件,设置,项目,python解释器,”+“号,搜索
serial
安装即可;或者在python的终端命令行中使用以下命令安装
pyserial
库:- 打开串口
使用
serial.Serial()
函数打开串口,并配置相关参数,例如:其中,
COM1
为串口号,9600
为波特率,timeout
为读取超时时间。- 发送数据
使用
serial.write()
函数发送数据,例如:注意,需要把需要发送的字符串转成 bytes 类型。
- 接收数据
使用
serial.read()
之类的函数读取从串口接收到的数据,例如:ser.readline()
函数是 pyserial
库中用于读取串口数据的一个函数,其作用是从串口接收缓存区中读取一行数据,并返回一个字节串(bytes)对象。ser.readline()
函数在读取数据时,会自动查找数据分割符(默认为 \\n
或 \\r\\n
),并在找到分割符时停止读取,返回一个包含分割符之前所有数据的字节串对象。如果在指定的超时时间内没有找到分割符,则函数会返回一个空字节串对象。需要注意的是,在使用
ser.readline()
函数读取数据时,需要确保分割符已经被正确地设置,否则可能会出现读取不完整的数据的情况。此外,需要注意控制超时时间,以避免在读取数据时出现阻塞的情况。- 升级程序
根据接收到的数据,编写程序进行相关逻辑处理,例如循环将接收到的数据发送回去,实现代码如下:
使用完最后关闭串口:
这样就完成了使用 Python 打开 Windows10 系统的串口、发送数据、接收数据和升级程序的流程。其中,具体的串口号、波特率和通讯协议需要根据实际情况选择。
8.2 Python使用Linux的串口。
如何python打开Linux系统的串口,并发送数据、接收数据,然后升级程序,使其将收到的串口数据又发送出去。
在 Linux 系统中,同样可以使用
pyserial
库实现串口通信,具体步骤如下:和上一步打开windows系统使用的函数基本一样,除了配置相关参数,例如:
其中,主要是需要将windows中的
COM1
等串口号改为/dev/ttyS0
等Linux中的串口设备文件名称。(可能会有/dev/ttyS0,/dev/ttyS1,/dev/ttyS3,/dev/ttyS4,等等)其余步骤与windows相同。
这样就完成了使用 Python 打开 Linux 系统的串口、发送数据、接收数据和升级程序的流程。需要注意的是,在 Linux 系统中,需要注意串口设备文件的访问权限问题。如果没有权限,可以在命令行中使用
sudo
命令提升用户权限操作串口。8.2.1 Linux中串口与Windows通信
Linux中串口与Windows通信8.2.2 龙芯派串口通信
龙芯派串口通信了解更多请看下面的页面跳转:
串口编码与解码 9.如何使用多线程编程
在 Python 中,可以使用
threading
模块实现多线程编程,该模块提供了一些用于实现多线程应用程序的类和函数。下面是一个简单的示例,演示如何使用 threading
模块实现多线程编程:在上述示例中,我们定义了两个线程函数
thread_func_1()
和 thread_func_2()
,其中 thread_func_1()
打印输出线程编号,然后睡眠 500 毫秒,而 thread_func_2()
则睡眠 1000 毫秒。我们创建了两个线程对象 t1
和 t2
,并将这两个线程对象的目标函数设置为上述定义的两个线程函数,然后通过 start()
函数启动线程。最后,使用 join()
函数等待线程结束。需要注意的是,在多线程编程中,由于多个线程同时访问公共资源会产生数据同步问题,因此需要采取相应的并发控制措施,例如使用锁或信号量等。在实际开发中,需要注意设计多线程程序的并发控制策略,以确保程序的正确性和可靠性。
10. 如何使用多进程编程
Python提供了
multiprocessing
模块来支持多进程编程。以下是一个简单的例子,演示如何使用multiprocessing
模块创建和启动一个进程:在这个例子中,
worker()
函数是进程执行的任务。我们首先创建了一个进程对象 p
,并将 worker()
函数指定为其目标函数。然后调用 p.start()
来启动这个进程。在上述例子中,我们使用了 if __name__ == '__main__':
来防止在子进程中再次启动新的进程。如果没有这个语句,程序可能会无限递归,导致运行异常。