2.1 Python3 基础语法

        Python 3 是一种易学易用的高级编程语言,具有简洁清晰的语法结构。

目录

1. 编码

2. 标识符

3. 关键字

4. 注释

5. 行与缩进

6. 多行语句

7. 数字(Number)类型

8. 字符串(String)

9. 语句代码组

10. 输入/输出

11. 导入模块

12. 命令行参数


1. 编码

  • 默认编码

    • Python3 源码文件默认使用 UTF-8 编码

    • 所有字符串都是 Unicode 字符串

  • 编码声明

    • 当文件包含非 ASCII 字符(如中文、日文等)时,建议在文件开头声明编码

    • 声明方式:

      #!/usr/bin/env python3
      # -*- coding: utf-8 -*-
    • 必须放在文件第1行或第2行(如果有shebang)

   #!/usr/bin/env python3 这一行(称为 Shebang 或 Hashbang在 Unix/Linux/macOS 系统上会被执行,但在 Windows 上不会被执行。它的作用是指定脚本的解释器路径。

具体行为:

  1. 在 Unix/Linux/macOS 系统上

    • 当你直接运行脚本(例如 ./script.py)时,操作系统会读取 Shebang 行,并使用 /usr/bin/env python3 来查找并调用 python3 解释器执行脚本。

    • 如果 python3 在 PATH 环境变量中,/usr/bin/env python3 会自动找到它,这样可以避免硬编码 Python 的绝对路径(更灵活)。

  2. 在 Windows 系统上

    • Windows 不依赖 Shebang 行来确定如何执行脚本。

    • 通常是通过文件关联(如 .py 文件默认用 Python 解释器运行)或显式调用 python script.py 来执行。

    • 但 Shebang 行会被 Python 解释器忽略(因为它只是注释),所以不影响脚本运行。

   # -*- coding: utf-8 -*- 是 Python 2/3 源码文件的 编码声明(Encoding Declaration),用于指定该文件的字符编码格式。

思考:

在 Python 中,# 确实是单行注释符号,它后面的内容会被 Python 解释器忽略。但 # -*- coding: utf-8 -*- 是一个特殊注释,Python 解释器会主动解析它,以确定源码文件的编码方式。

为什么 # -*- coding: utf-8 -*- 会被 Python 解析?

        虽然它看起来是注释,但 Python 在解析文件的前两行时,会专门查找 coding: 声明,以确定文件的编码格式
        这是 Python 的语法规则,类似于 Shebang(#!/usr/bin/env python3)在 Unix 系统上的特殊作用。

Python 如何处理 # -*- coding: utf-8 -*- 

        Python 解释器在读取文件时:
            1.先检查文件的前两行,查找 coding: 或 coding= 这样的模式。
            2.如果找到,就按照指定的编码(如 utf-8、gbk 等)解码文件内容。
            3.如果没找到,Python 3 默认用 UTF-8,Python 2 默认用 ASCII。


2. 标识符

  • 命名规则

    • 首字符:字母(a-z, A-Z)或下划线 _

    • 其余部分:字母、数字和下划线

    • 大小写敏感(count ≠ Count

    • 长度无严格限制(建议20字符以内)

    • 不能使用关键字作为标识符

  • 合法标识符示例

    name = "Alice"
    _private = "secret"
    user1 = "Bob"
    MAX_SIZE = 100
  • 非法标识符示例

    2name = "error"     # 不能以数字开头
    class = "wrong"    # 不能使用关键字
    first-name = "bad"  # 不能包含连字符
  • Unicode 标识符

    • Python3 支持 Unicode 字符作为标识符

    变量 = "值"        # 中文变量名
    π = 3.14159       # 希腊字母

3. 关键字

  • 查看所有关键字

    >>> import keyword
    >>> keyword.kwlist
    ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
    >>>
  • 常见关键字

    类别关键字说明
    逻辑值True布尔真值
    False布尔假值
    None表示空值或无值
    逻辑运算and逻辑与运算
    or逻辑或运算
    not逻辑非运算
    条件控制if条件判断语句
    elif否则如果(else if 的缩写)
    else否则分支
    循环控制for迭代循环
    while条件循环
    break跳出循环
    continue跳过当前循环的剩余部分,进入下一次迭代
    异常处理try尝试执行代码块
    except捕获异常
    finally无论是否发生异常都会执行的代码块
    raise抛出异常
    函数定义def定义函数
    return从函数返回值
    lambda创建匿名函数
    类与对象class定义类
    del删除对象引用
    模块导入import导入模块
    from从模块导入特定部分
    as为导入的模块或对象创建别名
    作用域global声明全局变量
    nonlocal声明非局部变量(用于嵌套函数)
    异步编程async声明异步函数
    await等待异步操作完成
    其他assert断言,用于测试条件是否为真
    in检查成员关系
    is检查对象身份(是否是同一个对象)
    pass空语句,用于占位
    with上下文管理器,用于资源管理
    yield从生成器函数返回值

4. 注释

  • 单行注释

    # 这是一个单行注释
  • 多行注释(实际是多行字符串,常被用作注释):

    # 第一个注释
    # 第二个注释
     
    '''
    第三注释
    第四注释
    '''
    
    """
    这是多行注释
    可以跨越多行
    通常用于文档字符串
    """

5. 行与缩进

  • Python 使用缩进来表示代码块

  • 规则

    • 同一代码块必须保持相同缩进

    • 通常使用4个空格(推荐)

    • 不要混用空格和制表符

if True:
    print("正确")  # 缩进4个空格
    print("仍在if块内")
print("已退出if块")

6. 多行语句

        Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句

  • 显式续行(使用反斜杠):

    total = item_one + \
            item_two + \
            item_three

       

         在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \

  • 隐式续行(括号、方括号、花括号内自动续行):

    days = ['Monday', 'Tuesday', 'Wednesday',
            'Thursday', 'Friday']
  • 空行
  • 函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

  • 空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构

    记住:空行也是程序代码的一部分。


7. 数字(Number)类型

  • 基本类型

    • 整型 int10-50x1F(十六进制)

    • 浮点型 float3.14-2.53e8(科学计数法)

    • 布尔型 boolTrueFalse(实际上是int的子类)

    • 复数 complex1+2j

  • 类型转换

    int(3.14)   # 3
    float(3)    # 3.0
    bool(1)     # True

8. 字符串(String)

  • Python 中单引号 ' 和双引号 " 使用完全相同。
  • 使用三引号(''' 或 """)可以指定一个多行字符串。
  • 转义符 \。
  • 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n" 则 \n 会显示,并不是换行。
  • 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string
  • 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
  • Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • Python 中的字符串不能改变。
  • Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
  • 字符串切片 str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引。
  • 字符串的切片可以加上步长参数 step,语法格式如下:str[start:end:step]
#!/usr/bin/python3
 
str='123456789'
 
print(str)                 # 输出字符串
print(str[0:-1])           # 输出第一个到倒数第二个的所有字符
print(str[0])              # 输出字符串第一个字符
print(str[2:5])            # 输出从第三个开始到第六个的字符(不包含)
print(str[2:])             # 输出从第三个开始后的所有字符
print(str[1:5:2])          # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(str * 2)             # 输出字符串两次
print(str + '你好')         # 连接字符串
 
print('------------------------------')
 
print('hello\nrunoob')      # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob')     # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
  • 表示方式

    str1 = '单引号'
    str2 = "双引号"
    str3 = """多行
    字符串"""
  • 常用操作

    "Hello" + "World"  # 拼接
    "Hi" * 3           # 重复
    len("Python")      # 长度
    "Py" in "Python"   # 包含检查
  • 格式化(f-string,Python 3.6+推荐):

    name = "Alice"
    age = 25
    print(f"{name} is {age} years old")


9. 语句代码组

同一行显示多条语句

        Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割

#!/usr/bin/python3
 
import sys; x = 'runoob'; sys.stdout.write(x + '\n')

        

  • 复合语句(由头部和代码组组成):

        缩进相同的一组语句构成一个代码块,我们称之代码组。

        像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。 我们将首行及后面的代码组称为一个子句(clause)。

  • if condition:
        statement1
        statement2
    elif another_condition:
        statement3
    else:
        statement4

10. 输入/输出

  • 输入

    name = input("请输入你的名字:")
  • 输出

        print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":

print("Hello", name, end="!")  # end参数指定结尾字符
name = input("请输入你的名字:")
print("Hello", name, end="!")  # end参数指定结尾字符


11. 导入模块

  • 基本导入

    • 导入整个模块

    • 使用时需要通过模块名访问其中的内容:module_name.function_name

import math
print(math.sqrt(16))

  • 从模块导入特定内容

    • 从模块中导入特定的函数、类或变量

    • 使用时可以直接使用名称,无需模块名前缀

from math import sqrt, pi
print(sqrt(16))  # 4.0
print(pi)       # 3.141592653589793

  • 导入所有内容(不推荐)
    • 导入模块中的所有内容(除了以下划线开头的)
    • 可能导致命名冲突,不利于代码可读性

from math import *
print(sin(pi/2))  # 1.0
  • 给模块或导入项起别名

    • 当模块名或函数名太长或有冲突时使用

import numpy as np
  • 相对导入(在包内部使用)

    • 主要用于包内部的模块相互引用

    • 点号表示相对路径

from . import module_name      # 同目录下的模块
from .. import module_name     # 上级目录的模块
from .submodule import name    # 子模块中的内容

实践建议

  1. 优先使用 import module 形式,明确命名空间

  2. 需要频繁使用的函数/类可以使用 from module import name

  3. 避免使用 from module import *

  4. 长模块名使用 as 创建简短别名

  5. 按照 PEP 8 规范组织导入语句:

    • 标准库模块

    • 第三方库模块

    • 本地应用/库模块

    • 每组之间用空行分隔

import os
import sys

import numpy as np
import pandas as pd

from mypackage import utils
from . import helpers

12. 命令行参数

        

1. 动态配置程序行为

  • 允许用户在不修改代码的情况下调整程序运行方式。

  • python script.py --mode fast --output result.txt

    这里的 --mode 和 --output 可以改变程序的运行模式或输出位置。

2. 传递输入数据

  • 可以直接通过命令行传入数据,如文件名、数值、字符串等。

  • python process_data.py input.csv --format json

    这里 input.csv 是输入文件,--format json 指定输出格式。

3. 控制程序流程

  • 通过参数决定是否执行某些功能(如 --verbose 开启详细日志)。

  • python backup.py --all --compress

    这里的 --all 表示备份所有文件,--compress 表示启用压缩。

4. 提供帮助信息

  • 使用 -h 或 --help 自动生成帮助文档(argparse 默认支持)。

  • python script.py --help

    会显示所有可用参数及其说明。

5. 适用于自动化脚本

  • 在 Shell 脚本、Cron 任务或 CI/CD 流水线中,可以通过命令行参数灵活调用 Python 程序。

  • python deploy.py --env production --force

    这里的 --env 指定部署环境,--force 强制部署。


常见使用场景

场景示例说明
文件处理python convert.py input.txt --format PDF转换文件格式
数据分析python analyze.py data.csv --method regression选择分析方法
Web 爬虫python crawler.py --url example.com --depth 3控制爬取深度
机器学习python train.py --epochs 100 --batch_size 32调整训练参数
系统管理python backup.py --dir /home/user --zip备份并压缩目录

Python 命令行参数处理方式对比

方法适用场景特点
sys.argv简单脚本直接访问参数列表,但功能有限
argparse复杂参数(推荐)支持选项、默认值、帮助文档等
getopt类似 C 的 getopt()适用于短选项(-f)和长选项(--file
clickCLI 应用开发更高级,支持命令组、颜色输出等
fire快速生成 CLI自动将函数转换为命令行工具

总结

Python 命令行参数的主要作用是:

  1. 动态控制程序行为(如 --debug 开启调试模式)。

  2. 传递输入数据(如文件名、配置参数)。

  3. 增强脚本灵活性(适用于自动化任务)。

  4. 提供用户友好的交互(如 --help 显示帮助)。

  5. 适用于各种场景(数据分析、爬虫、系统管理等)。

对于大多数情况,推荐使用 argparse,因为它功能强大且易于使用。如果是更复杂的 CLI 工具,可以考虑 click 或 fire


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值