3 Python 语法教程

1 输入和输出

input()
input(prompt: str)

  内置函数。如果存在prompt实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。例如:

>>> s = input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"

2 函数

  Python 定义函数使用关键字def,后跟函数名与括号内的形参列表。函数语句从下一行开始,并且必须缩进。例如:

>>> def func(prompt: str) -> None:
...     print(prompt)
...
>>> prompt = "这是一个函数!"
>>> func(prompt=prompt)
这是一个函数!

3 模块

3.1 模块的定义

  Python 可以把各种定义和语句存入一个文件,在脚本或解释器的交互式实例中使用,这个文件就是模块。其文件名是模块名加后缀 .py。模块中的定义可以导入到其它模块。模块中的语句用于初始化模块,且仅在 import 语句第一次遇到模块名时执行。或者文件作为脚本运行时,也会执行这些语句。
  每个模块都有自己的私有命名空间,它会被用作模块中定义的所有函数的全局命名空间。因此,模块作者可以在模块内使用全局变量而不必担心与用户的全局变量发生冲突。要访问一个模块内的变量,可以通过点运算符 .

3.2 模块的属性

3.2.1 导入相关的模块属性

  导入机制会在加载期间,根据模块的规格说明填充每个模块对象的以下属性,并在加载器执行模块之前完成。

__file__ -> str

  该属性存储模块所在文件的路径,其值为字符串格式。例如,打印当前代码文件所在的路径 print(__file__),或打印 os 模块所在文件的路径 print(os.__file__),从而找到文件源代码。

3.3 模块的搜索路径

  假设我们要导入一个名为 test 的模块,解释器首先会搜索具有该名称的内置模块,这些模块的名称在 sys.builtin_module_names 中列出。如果未找到,它将在变量 sys.path 所给出的目录列表中搜索名为 test.py 的文件。其中,sys.path 初始化后,程序可以任意更改其值。

4 包

4.1 包的定义

  为了避免模块名冲突,Python 引入了按目录组织模块的方法,称之为包。包是一种用 “点式模块名” 构造 Python 模块命名空间的方法。例如,模块名 A.B 表示名为 A 的包中名为 B 的子模块。
  简单来说,包是含有 Python 模块的文件夹。并且需要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包来处理,其下的多个模块构成一个整体。
  __init__.py 文件用于组织包,方便管理各个模块之间的引用、控制着包的导入行为。在最简单的情况下,__init__.py 可以只是一个空文件。当我们导入一个包时,实际上是导入它的 __init__.py 文件,该文件自动运行。

4.2 导入模块的方式

  导入包时,Python 搜索 sys.path 里的目录,查找包的子目录。可以从包中导入单个模块和函数或变量。
  一种方式是使用 import 语句。例如,import os.path 语句导入了 os.path 模块,使用时必须通过其全名来引用,例如 print(os.path.__file__)
  另一种方式是使用 from ... import ... 语句。例如,from os import path 语句同样导入了 os.path 模块,但使用时不必加包前缀,例如 print(path.__file__)
  使用 from ... import * 这种语法时,需要在文件中提供 __all__ 变量,它用来指定此包的哪些模块会被导入,不在 __all__ 列表中的模块不会被其它程序引用。否则,将花费很长的时间,并且可能会产生不想要的副作用。

5 系统相关的模块

5.1 sys 模块——系统相关的形参和函数

  该模块提供了一些系统相关的形参和函数。这些形参可能被解释器使用,也可能由解释器提供。这些函数会影响解释器。

5.1.1 路径相关

sys.path -> list

  该参数是一个由字符串组成的列表,用于指定模块的搜索路径。sys.path 是从以下位置初始化的:

  • 被命令行直接运行的脚本所在的目录(或未指定文件时的当前目录)。
  • 环境变量 PYTHONPATH,格式与终端的 PATH 相同,即一个或多个由 os.pathsep 分隔的目录路径名称。
  • 依赖于安装的默认值(按照惯例包括一个 site-packages 目录,由 site 模块处理)。

PYTHONPATH 增加模块文件默认搜索路径,并默认忽略不存在的目录。例如:

>>> import sys
>>> print(sys.path)  
[
	'', 
	'D:\\ProgramData\\anaconda3\\python312.zip', 
	'D:\\ProgramData\\anaconda3\\DLLs', 
	'D:\\ProgramData\\anaconda3\\Lib', 
	'D:\\ProgramData\\anaconda3', 
	'D:\\ProgramData\\anaconda3\\Lib\\site-packages', 
	'D:\\ProgramData\\anaconda3\\Lib\\site-packages\\win32', 
	'D:\\ProgramData\\anaconda3\\Lib\\site-packages\\win32\\lib', 
	'D:\\ProgramData\\anaconda3\\Lib\\site-packages\\Pythonwin'
]    # 已手动换行

  程序可以出于自己的目的随意修改此列表。应当只将字符串添加到 sys.path 中,所有其它类型的数据都将在导入期间被忽略。当我们要添加自己创建的模块到搜索路径时,可以使用列表的 append(),这样就可以在其它目录中导入该创建的模块。例如,我们在模块代码文件中添加以下代码,以将该模块所在路径添加到搜索路径:

import sys
sys.path.append('../')    # 将该代码文件所在模块路径添加到搜索路径

5.1.2 输入输出

sys.stdinsys.stdoutsys.stderr

  解释器用于标准输入、标准输出、标准错误的文件对象:

  • stdin用于所有交互式输入(包括对input()的调用)。
  • stdout用于print()和表达式语句的输出,以及用于input()的提示符。
  • 解释器自身的提示符和它的错误消息都发往stderr

这些流都是常规文本文件,与open()返回的对象一致。要从stdin中获取值可以使用for语句。例如,输入一行字符串:

import sys

for line in sys.stdin:
	print(line)               # 每次获取一行输入

连续输入两行字符串:

import sys

a, b = [i.strip() for i in sys.stdin]
print(a)            # 输入的第一行字符串
print(b)            # 输入的第二行字符串

6 路径操作

6.1 os.path 模块——常用的路径操作

  该模块实现了一些路径名称相关的函数。

6.1.1 获取路径

os.path.abspath(path: str) -> str

  返回路径 path 的绝对路径(标准化的)。

os.path.dirname(path: str) -> str

  返回路径 path 的目录名称。例如:

>>> import os

>>> path = r'D:\ProgramData\anaconda3\Lib\os.py'
>>> print(os.path.dirname(path))
D:\ProgramData\anaconda3\Lib

>>> path = r"D:\ProgramData\anaconda3\Lib"
>>> print(os.path.dirname(path))
D:\ProgramData\anaconda3
  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值