python笔记(一)


一、什么是 Python??

Python是一种高级编程语言,它由Guido van Rossum于1991年首次发布。Python的设计哲学强调代码的可读性和简洁性,其语法清晰简单,使得学习和使用变得相对容易。


二、.编译器和解释器

编译器和解释器是将高级编程语言翻译成计算机可执行的机器语言的两种主要方式。它们在翻译和执行代码的方式上存在显著差异。

1.编译(Compilation)

编译是一种将整个源代码一次性翻译成机器语言的过程。使用编译器的语言通常被称为**编译型语言。

工作流程

  1. 读取源代码:编译器读取程序员编写的高级语言代码。
  2. 词法分析和语法分析:将代码分解为标记(tokens),并解析其语法结构。
  3. 生成中间代码:通常会生成一种中间形式(如三地址码或字节码)。
  4. 优化:对中间代码进行优化以提高性能或减少资源消耗。
  5. 生成目标代码:将优化后的代码翻译为目标平台的机器语言(二进制文件)。
  6. 链接:如果需要,将生成的目标代码与库函数或其他模块链接起来,形成最终的可执行文件。

特点

  • 一次性翻译:源代码在运行之前被完全翻译成机器语言。
  • 高性能:由于代码已经被编译成机器语言,执行速度更快。
  • 独立性:编译后的程序不依赖编译器即可运行。
  • 跨平台问题:编译后的程序通常是针对特定硬件架构和操作系统的,因此不具备可移植性。

常见编译型语言

C、C++、Rust、Go 等。

2.解释(Interpretation)

解释是一种逐行翻译和执行源代码的过程。使用解释器的语言通常被称为解释型语言

工作流程

  1. 读取源代码:解释器逐行读取源代码。
  2. 翻译和执行:将每一行代码翻译成机器语言,并立即执行。
  3. 循环处理:重复上述步骤,直到所有代码都被执行完毕。

特点

  • 逐行翻译:代码在运行时动态翻译,无需提前编译。
  • 灵活性高:可以快速测试和调试代码,适合开发阶段。
  • 执行速度慢:由于每次运行都需要重新翻译,执行效率较低。
  • 依赖解释器:解释型语言的程序需要解释器才能运行。
  • 跨平台性强:只要目标平台上有相应的解释器,程序就可以运行,具有良好的可移植性。

常见解释型语言

Python、JavaScript、Ruby、PHP 等。

3. 混合模式

一些现代编程语言结合了编译和解释的优点,采用了一种混合模式。例如:

  • Java:源代码首先被编译成字节码(Bytecode),然后由 Java 虚拟机(JVM)解释或通过即时编译(JIT, Just-In-Time Compilation)将其转换为本地机器语言。
  • C#:类似于 Java,C# 的代码也被编译成中间语言(IL),然后由 .NET 运行时环境解释或 JIT 编译。

混合模式的特点

  • 平衡性能和灵活性:既保留了解释型语言的跨平台特性,又通过 JIT 提升了执行性能。
  • 动态优化:JIT 编译器可以根据程序运行的情况动态优化代码。

4. 总结对比

特性编译型语言解释型语言
翻译方式一次性翻译逐行翻译
执行速度较慢
依赖工具不依赖编译器需要解释器
跨平台性差(需重新编译)强(只要有解释器即可运行)
开发效率较低(需编译和调试)高(实时反馈)
适用场景性能要求高的应用快速开发、脚本、Web 应用

三、Python 的特点

简单易学、易读性高、跨平台性、解释型语言、 语法非常清晰(不是一种格式自由的语言。例如,必须严格向右缩进)、动态类型系统(变量类型在运行时自动确定,不需要显式声明变量类型)、可扩展性、丰富的标准库、庞大的社区支持、速度慢、源代码加密困难。

四、Python 语言的书写规则

1. 注释

  • 单行注释:以 # 开头,用于解释代码。注释可以是独立的行,也可以出现在行中。

    # 这是一个单行注释
    print("Hello, World!")  # 这也是单行注释
    
  • 多行注释:Python 并没有专门的多行注释语法,但通过使用成对的三引号('''"""),可以实现类似多行注释的效果。
    这并不是真正的多行注释,而是利用了 Python 的字符串特性。Python 中的三引号('''""")实际上是用于定义多行字符串的。如果一个三引号字符串没有被赋值给变量或用作其他用途,解释器会忽略它,因此可以用来模拟多行注释。

'''
这是一个多行字符串,
但它没有被赋值给任何变量,
因此可以当作注释使用。
'''

2. 缩进

  • 强制缩进:Python 使用缩进来定义代码块,而不是像其他语言那样使用大括号 {}
    • 缩进以冒号开始。
    • 通常每级缩进为 4个空格
    • 混合使用 Tab 和空格会导致错误,建议始终使用空格。
  • 示例:
    if True:
        print("条件为真")  # 正确缩进
    else:
        print("条件为假")  # 正确缩进
    

3. 空白行

  • 空白行不会影响程序的运行,但可以提高代码的可读性。
  • 函数或类之间通常用空白行分隔。

4. 标识符命名规则

  • 标识符是变量、函数、类等的名字。
    • 只能包含字母、数字和下划线 _
    • 必须以字母或下划线开头,不能以数字开头。
    • 区分大小写。
    • 避免使用 Python 中的保留字。
    • 标识符中不能包含空格、@%$ 等特殊字符。
    • 汉字可以做标识符,但不建议过度使用。

常见的保留字

False, None, True, and, as, assert, 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

可以通过以下代码查看所有保留字:

import keyword
print(keyword.kwlist)

示例

valid_identifier = "合法标识符"
_invalid = "以单下划线开头"
my_var_2 = "包含数字"
2var = "非法标识符"  # 非法:以数字开头

if = 5  # 非法:if 是保留字
class = "MyClass"  # 非法:class 是保留字

my var = "非法标识符"  # 非法:包含空格
my@var = "非法标识符"  # 非法:包含 @
特殊标识符的规则

(1) 单下划线开头 _pr

  • 含义:是一种约定俗成的标记,并不是强制性的语法限制,通常表示“内部使用”或“私有”的成员(变量、方法等)。
  • 行为
    • 使用 from module import * 导入模块时,以单下划线开头的标识符不会被导入。
    • 除非模块中定义了 __all__ 列表明确包含这些标识符。

(2) 双下划线开头 __ff

  • 含义:表示类的私有成员。
  • 行为:Python 会对其进行名称改写(name mangling),防止子类意外覆盖。

(3) 双下划线开头和结尾 __ff__

  • 含义:用于 Python 的特殊方法或属性,称为“魔术方法”(magic methods)。
  • 常见例子
    • __init__:构造函数,用于初始化对象。
    • __str__:定义对象的字符串表示形式。
    • __len__:定义对象的长度。
    • __add__:定义加法操作。

示例:

class MyClass:
    def __init__(self, value):
        self.value = value
    
    def __str__(self):
        return f"MyClass({self.value})"
    
    def __add__(self, other):
        return MyClass(self.value + other.value)

obj1 = MyClass(5)
obj2 = MyClass(10)
print(obj1)  # 输出:MyClass(5)
print(obj1 + obj2)  # 输出:MyClass(15)

5. 语句与换行

  • 每条语句通常占一行。
  • 如果语句太长,可以使用反斜杠 \ 来续行。
    long_string = "这是一个很长的字符串" \
                  "它被分成了两行"
    
  • 在括号(圆括号 ()、方括号 []、花括号 {})内的内容可以自动换行,无需反斜杠。
    my_list = [1, 2, 3,
               4, 5, 6]
    

6. 字符编码

  • 默认情况下,Python 3 使用 UTF-8 编码。
  • 如果需要在文件中使用非 ASCII 字符,可以在文件顶部添加编码声明:
    # -*- coding: utf-8 -*-
    

7. 空语句

什么是空语句?

在编程中,有时需要一个占位符来表示“这里什么都不做”。例如:

  • 定义了一个函数、类或条件分支,但暂时不想实现具体内容。
  • 需要满足语法要求,避免程序报错。

Python 提供了 pass 关键字来实现这个功能。pass 是一种特殊的占位符语句,它不会执行任何操作,但可以让代码结构合法。

使用 pass 避免语法错误

if a < b:
    pass  # 表示这里什么都不做
else:
    print("a >= b")

如果不写 pass,直接留空会导致语法错误:

if a < b:
    # 这里没有内容
else:
    print("a >= b")

运行时会报错:

IndentationError: expected an indented block

因此,在需要占位符的地方必须使用 pass

五、基本输入输出的使用

1. 输入(input()

  • input() 是 Python 提供的一个内置函数,用于从用户那里获取输入。
  • 它会暂停程序的执行,等待用户在控制台中输入内容。
  • 用户输入的内容会被作为字符串返回。

示例代码:

name = input("请输入您的名字: ")
print(f"您好, {name}!")

input(prompt) #  prompt:可选参数,是一个提示信息,显示在控制台上,告诉用户需要输入什么内容。

输入数据类型的转换

input() 函数总是返回一个字符串。如果需要其他类型的输入(如整数或浮点数),需要进行类型转换。

age = int(input("请输入您的年龄: "))
print(f"您今年 {age} 岁了。")

处理多输入

可以使用 split() 方法同时接收多个输入。

num1, num2 = map(int, input("请输入两个整数(用空格分隔): ").split())
#使用 `split()` 将字符串分割成列表 `["10", "20"]`。
#使用 `map(int, ...)` 将每个元素转换为整数。
print(f"两数之和为:{num1 + num2}") # 接收两个整数

2. 输出(print()

  • print() 是 Python 提供的一个内置函数,用于向控制台输出信息。
  • 它可以输出任何类型的数据,包括字符串、数字、列表等。

基本语法

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • *objects:要输出的内容,可以是单个对象,也可以是多个对象。
  • sep:分隔符,默认为空格。
  • end:输出结束后的字符,默认为换行符 \n
  • file:指定输出的目标,默认为标准输出(控制台)。
  • flush:是否强制刷新缓冲区,默认为 False

示例代码:

print("这是一个输出示例")
print(42)
print([1, 2, 3])
输出多个值
name = "Alice"
age = 25
print("姓名:", name, "年龄:", age)
自定义分隔符和结束符
print("A", "B", "C", sep="-", end="!\n")
格式化输出

Python 提供了多种格式化输出的方式,包括 f-string.format()

方法 1:f-string

name = "Alice"
age = 25
print(f"姓名: {name}, 年龄: {age}")

方法 2:.format()

name = "Alice"
age = 25
print("姓名: {}, 年龄: {}".format(name, age))

方法 3:百分号格式化

  • 语法" %[flags][width][.precision]type" % value

    • %:这是起始符号,表示一个格式化说明符的开始。

    • [flags](可选):用于调整输出的对齐方式和其他选项:

      • -:左对齐,默认是右对齐。
        例:
      value = "Python"
      print("Default alignment: [%10s]" % value)  # 右对齐
      print("Left alignment:    [%-10s]" % value) # 左对齐
      

      输出:

      Default alignment: [    Python]
      Left alignment:    [Python    ]
      
      • +:对于数值,如果使用 + 标志,强制显示正负号。默认情况下只显示负号,而正数不显示符号。
      positive = 42
      negative = -42
      print("Without +: [%d, %d]" % (positive, negative))  # 默认
      print("With +:    [%+d, %+d]" % (positive, negative)) # 强制显示正负号
      

      输出

      Without +: [42, -42]
      With +:    [+42, -42]
      
      • 0:用零填充数字。如果指定了字段宽度,并且实际内容不足宽度时,默认会用空格填充。使用 0 标志后,会用零填充空白部分。
        例:
      number = 42
      print("Space padding: [%5d]" % number)  # 默认用空格填充
      print("Zero padding:  [%05d]" % number) # 用零填充
      

      输出

      Space padding: [   42]
      Zero padding:  [00042]
      
      • 空格: 如果数值是正数,在其前面添加一个空格;如果是负数,则正常显示负号。这个标志通常用于对齐正负数,使其占据相同的宽度。
        例:
      positive = 42
      negative = -42
      print("No space: [%d, %d]" % (positive, negative))  # 默认
      print("With space: [% d, % d]" % (positive, negative)) # 正数前加空格
      

      输出

      No space: [42, -42]
      With space: [ 42, -42]
      
    • [width](可选):指定最小字段宽度。如果输出短于该宽度,则按需要向左或向右填充(取决于标志)。可以是一个具体的数字。

    • [.precision](可选):对于浮点数,.precision 表示小数点后保留的位数;对于字符串,它限制最大字符数。

    • type:指示如何格式化数据。常见的类型包括:

      • s:字符串格式。
      • d:十进制整数。
      • f:浮点数。
      • eE:科学计数法(指数)。
      • gG:根据值自动选择固定点或指数表示形式。

方法 4:string.Template

  • 语法:需要从 string 模块导入 Template 类,并使用 $变量名 插值。
    示例
    from string import Template
    t = Template("Name: $name")
    print(t.substitute(name="David"))
    

格式说明符
无论是 %str.format() 还是 f-string,都可以使用类似的格式说明符来控制输出格式:

  • %s, {}:字符串。
  • %d, {:d}:整数。
  • %f, {:f}:浮点数。
  • %.2f:保留两位小数的浮点数。
  • %9.2f, {:>9.2f}:总宽度为9,保留两位小数,右对齐。
  • {:>10}, {:<10}, {:^10}:分别为右对齐、左对齐、居中对齐,宽度为10。
输出到文件

可以将 print() 的输出重定向到文件。

将输出写入文件

with open("output.txt", "w") as file:
    print("Hello, File!", file=file)

运行结果:

  • 文件 output.txt 中的内容为:
Hello, File!

六、python 文件名的命名

  1. 文件扩展名

    • Python 文件通常使用 .py 作为扩展名。
    • 例如:example.py
  2. 命名约定

    • 使用小写字母和下划线 (_) 来分隔单词,避免使用大写字母或特殊字符。
    • 例如:my_module.pydata_analysis.py
  3. 避免使用保留字

    • 不要使用 Python 的保留关键字(如 if, for, class 等)作为文件名。
  4. 描述性名称

    • 文件名应具有描述性,能够反映文件的内容或功能。
    • 例如:main.pyutils.pyconfig.py
  5. 长度适中

    • 文件名不宜过长,但也要足够描述文件的功能或内容。
  6. 一致性

    • 在同一个项目中保持文件名的一致性,有助于提高代码的可读性和维护性。

特殊文件名

  • __init__.py

    • 这是一个特殊的文件名,用于定义一个目录为 Python 包。它可以让目录中的其他文件被导入时自动执行某些初始化代码。
  • setup.py

    • 用于定义项目的安装配置,通常包含在 Python 包中,用于发布和安装包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值