03-Python的运行方式

《Python 教程》总结
持续更新中,学习交流请加作者微信: python-baby

脚本和模块

脚本(Scripts)

在计算机术语中,脚本是指一个包含逻辑顺序的文本文件,我们可以运行脚本来完成特定任务。这些逻辑顺序通常用脚本语言表示,脚本语言是一种编程语言,允许我们操作、定制或自动化任务。

脚本语言通常在运行时(runtime)解释,而不是在编译时。所以脚本通常由某种解释器运行,解释器的工作就是按顺序执行脚本中的代码。

Python 就是一门解释型语言。一般来讲,Python 代码被称为脚本(或者在更复杂的应用程序中称为入口点脚本)。

模块(Modules)

另一方面,包含 Python 代码的文件(例如 A.py)可以被另一个 Python 文件(例如 B.py)导入和使用,这种文件(A.py)就被称为模块。

模块和脚本的主要区别在于:

  • 模块:存储可导入(Importable)的代码。定义了某些内容但不执行特定操作的代码,例如函数或类的定义。
  • 脚本:存储可执行(Executable)的代码。例如函数的调用、循环、条件判断等。

命令行运行

在 Python 编程中,我们可以以纯文本文件来编写 Python 程序。需要注意的是,包含 Python 代码的文件用 .py 做后缀名。

运行 Python 脚本

首先我们创建一个 Python 脚本 hello.py

print("Hello, World!")
使用 Python 命令

以 Windows 为例,我们需要打开 Windows 终端(win + R 然后输入 cmd),然后敲入下面的命令:

# 相对路径
>>> python .\hello.py
Hello, World!>>> py .\hello.py
Hello, World!# 绝对路径
>>> python D:\python\hello.py
Hello, World!>>> py D:\python\hello.py
Hello, World!

在 Windows 中,我们还可以使用 py 命令,这个命令会触发控制台应用程序的 py.exe 启动器。在某些 Linux 发行版中,可能需要使用 python3 命令。

重定向输出

终端或 shell 运行 Python 脚本还有一个功能就是:可以使用重定向将 Python 执行结果输出到某个文件中,方便我们将结果保存下来并对其进行分析。

>>> python D:\python\hello.py > D:\python\output.txt

在上面的命令中,> 表示将输出(即 Python 脚本的执行结果 “Hello, World!”)重定向到 output.txt 文件中,而不是标准输出到屏幕中。如果 output.txt 不存在,系统会自动创建它;如果存在:> 会覆盖,>> 会追加。

直接使用脚本的文件名

以 Windows 为例,我们可以直接使用脚本的文件名来执行脚本。

# 绝对路径
>>> D:\python\hello.py# 相对路径
>>> .\hello.py

如果是 Linux,需要先给脚本赋可执行权限,否则很有可能报【没有权限】的错误。

chmod +x hello.py

赋权之后,在脚本中添加一个 shebang 行:

#!/usr/bin/env python3print("Hello, World!")

添加 shebang 行之后运行:

[root@localhost ~]# ./hello.py

使用 -m 选项运行 Python 模块

语法:

python -m <module-name>

-m 会在 Python 的模块搜索路径、sys.path 中搜索模块名称并运行对应内容。

以 Linux 为例:

[root@localhost ~]# python -m hello
Hello, World!

注意 <module-name> 是模块的名称,而不是文件名(即不包含 .py 后缀)。

交互式运行

Python 是一门解释型语言,执行 Python 脚本的时候解释器会按顺序把 Python 代码解释成机器语言。

什么是 Python 解释器

解释器是在你的程序和计算机硬件之间工作的一层软件,能够使你的代码运行。常见实现包括:

  • C:如 CPython,是最常用的一种实现。
  • Python 本身:如 PyPy,它是一个带有即时(JIT)编译器的快速实现。
  • Java:如 Jython,可以利用 Java 生态。

无论使用哪种解释器,我们编写的代码都将在上面运行。Python 解释器可以在两种不同的模式下运行代码:

  1. 脚本或程序
  2. 交互式或 REPL(Read-Eval-Print Loop)

交互式运行(REPL)

Python 的 REPL 运行代码。以 Windows 为例,启动 REPL,会看到标准主提示符由三个右尖括号 >>> 组成:

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

唯一的缺点是,当关闭会话时,代码将消失。与脚本模式相比,脚本是持久的。

从 Python 代码中运行

import 语句

当我们从另一个模块、脚本或交互式会话导入模块时,Python 会加载其中的内容供以后访问和使用。

>>> import hello
Hello, World!

多次执行 import 语句时,每个会话只会运行一次模块中的代码。

importlib

importlib 是 Python 标准库中的一个模块,可以通过 importlib 以编程的方式导入模块。

>>> import importlib
>>> importlib.import_module("hello")

要重新加载模块并再次运行其中的代码,可以使用 reload() 函数:

>>> import importlib
>>> importlib.reload(hello)

exec() 函数

还可以使用内置 exec() 函数来执行:

>>> with open("hello.py") as hello:
...     exec(hello.read())

IDE / 代码编辑器运行

为了开发大型和复杂的应用程序,我们应该使用集成开发环境(IDE)或高级文本编辑器。这些程序中的大多数都有一些选项,允许我们在环境本身内部运行程序。

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

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

相关文章

如何在Java中使用protobuf

写在前面 本文看下在Java中如何使用protofbuf。 1&#xff1a;介绍 1.1&#xff1a;什么是protobuf 是一种数据格式&#xff0c;同json&#xff0c;xml&#xff0c;等。但是一种二进制数据格式。 1.2&#xff1a;强在哪里&#xff1f;为啥要用&#xff1f; 小&#xff0c…

org.apache.commons.lang.math.NumberUtils#isNumber 解释

源码 /*** <p>Checks whether the String a valid Java number.</p>** <p>Valid numbers include hexadecimal marked with the <code>0x</code>* qualifier, scientific notation and numbers marked with a type* qualifier (e.g. 123L).</…

JS中this的指向问题、JS的执行机制、offset、client、scroll

JS中this的指向问题 1. 在全局环境下 在全局环境中&#xff08;在浏览器中是 window 对象&#xff0c;在Node.js中是 global 对象&#xff09;&#xff0c;this 指向全局对象。 console.log(this window); // 在浏览器中为 true console.log(this.document ! undefined); //…

如何练高音技巧

如何练高音技巧 高音的练习技巧有&#xff1a;练“a”(啊)音&#xff0c;让口腔打开&#xff0c;声带放松&#xff0c;反复几次&#xff1b;再练“u”(呜)音&#xff0c;这个音可以有按摩声带的功能&#xff0c;也使声带进一步放松&#xff1b;发“i”(衣)音&#xff0c;逐步加…

缓存失效问题-雪崩/击穿/穿透

1. 缓存雪崩 1.1. 定义 大量缓存同一时间失效&#xff0c;大量访问数据库。 1.2. 发生条件 大量key相同过期时间缓存服务器重启 1.3. 解决方案 设置随机的缓存过期时间缓存预热高可用缓存集群降级限流 2. 缓存击穿 2.1. 定义 一个热点数据在缓存里失效&#xff0c;很多…

k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s概述 2、Service在Kubernetes中的…

大模型本地化部署2-Docker部署MaxKB

大模型本地化部署2-Docker部署MaxKB 0、MaxKB简介1、安装docker2、在docker中拉取MaxKB镜像3、运行镜像4、访问MaxKB5、创建应用6、使用应用进行对话 0、MaxKB简介 MaxKB是一款基于LLM大预言模型的知识库问答系统。具有以下特点&#xff1a; 多模型支持&#xff1a;支持对接主…

开放式耳机怎么戴?佩戴舒适在线的几款开放式耳机分享

开放式耳机的佩戴方式与传统的入耳式耳机有所不同&#xff0c;它采用了一种挂耳式的设计&#xff0c;提供了一种新颖的佩戴体验&#xff0c;以下是开放式耳机的佩戴方式。 1. 开箱及外观&#xff1a;首先&#xff0c;从包装盒中取出耳机及其配件&#xff0c;包括耳机本体、充电…

什么是密码学?

什么是密码学&#xff1f; 密码学是一种通过使用编码算法、哈希和签名来保护信息的实践。此信息可以处于静态&#xff08;例如硬盘驱动器上的文件&#xff09;、传输中&#xff08;例如两方或多方之间交换的电子通信&#xff09;或使用中&#xff08;在对数据进行计算时&#…

软件造价之如何确定定开和成品软件的边界?

在软件项目中&#xff0c;我们常常面临选择&#xff1a;是直接购买并使用成品软件&#xff0c;还是根据特定需求定制开发&#xff1f;这一决策不仅关乎项目成本也关乎到我们成本测算方法的选择。因此&#xff0c;明确定开与成品软件的边界&#xff0c;是软件造价的首要任务。 …

设计模式-结构性模式-桥接模式

1.桥接模式定义 桥接模式就是将抽象部分与他的实现部分分离&#xff0c;使他们都可以独立的变化&#xff1b; 桥接模式用一种巧妙地方式处理多层继承存在的问题&#xff0c;用抽象关联来取代传统的多层继承&#xff0c;将类之间的静态继承关系转变为动态的组合关系&#xff0c;…

vs属性表生效顺序

vs属性表生效顺序 在VS中打开一个项目&#xff0c;在属性管理器中可以看到很多属性表&#xff0c;如下&#xff1a; Application Unicode Support Core windows Libraries相信很多人会有和我一样的疑惑&#xff0c;这么多属性表&#xff0c;最终的属性以哪个表为准呢&#xf…

Leetcode JAVA刷刷站(99)恢复二叉搜索树

一、题目概述 二、思路方向 要解决这个问题&#xff0c;我们可以采用中序遍历二叉搜索树&#xff08;BST&#xff09;的方法&#xff0c;因为中序遍历BST会返回一个有序的数组。由于只有两个节点被错误地交换了&#xff0c;所以中序遍历的结果中将有两个位置上的元素是逆序的。…

什么是数据库 DevOps?

原文地址 https://www.bytebase.com/blog/what-is-database-devops/ 在深入研究数据库 DevOps 之前&#xff0c;先回顾一下什么是 DevOps。它没有统一的定义&#xff0c;但我们知道它起源于软件开发方法与部署和运维的结合。 大约 2007 年和 2008 年&#xff0c;软件开发和 I…

.NET8 Web 利用BAT命令 一键部署 IIS - CI-CD基础

1. Windows Server 前置准备 1.1 IIS安装好 1.2 .NET8 Sdk 运行时 安装 官方下载地址&#xff1a;https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0 1.3 创建一个.NET8 WebMvc项目 生成发布包 微软MVC这个项目模板直接创建&#xff0c;发布 2. 利用 BAT 来一键部署…

Html5—表单

第三章 表单 表单 第三章 表单3.1表单元素3.1.1表单格式3.1.2表格元素格式3.1.3元素属性3.1.4元素标注3.1.5 表单初级验证 3.1表单元素 3.1.1表单格式 <!-- action:表单向何处发送method:get/post, 表单提交方式get:比较快&#xff0c;当不安全post:安全&#xff0c;比较慢…

【STM32】FMC

FMC功能与FSMC类似&#xff0c;但比FSMC更强大&#xff0c;但仅在F4 / F7 / H7等高级一点的MCU上支持&#xff0c;F1不支持。虽然我的是F103&#xff0c;但顺便都看了。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目…

Vue 和 Element Plus 弹框组件详解:从基本实现到异步数据加载与自定义内容(实战)

目录 前言1. 基本知识2. 模版3. 实战 前言 主要是通过一个按钮触发一个按钮框&#xff0c;多种方式的逻辑&#xff0c;多种场景 原先通过实战总结&#xff0c;基本的知识推荐阅读&#xff1a; 详细分析Element Plus中的ElMessageBox弹窗用法&#xff08;附Demo及模版&#x…

秋招复习笔记——嵌入式裸机开发

底层相关的内容&#xff0c;之前掌握的不扎实&#xff0c;现在重新把相关重点记录一下&#xff0c;做个笔记记诵。 相关基础知识 ST简单内容 用的F103ZET6&#xff0c;72MHz&#xff0c;FLASH是512KB&#xff0c;SRAM是64KB&#xff0c;144个引脚&#xff0c;2基本定时器&am…

MATLAB算法实战应用案例精讲-【采样路径规划算法】RRT算法(附MATLAB源码)

目录 前言 算法原理 算法流程 算法流程图 优缺点 伪代码 知识拓展 基于BINN算法的CCPP全路径覆盖算法 1、CCPP整体算法 2. 核心代码 代码 1.MATLAB 前言 RRT算法是适用于高维空间,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,较好的处理带有非…