python学习


一、基础语法

(1)变量与数据类型

变量:用于存储数据的标识符,无需事先声明类型,根据赋值自动确定。

数据类型:包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、集合(set)和字典(dict)等。

一、不可变类型(Immutable)

不可修改对象的值,修改时会创建新对象。

整型(int)示例:x = 10

特点:支持大整数运算(无溢出问题)

浮点型(float)示例:y = 3.14

注意:存在精度问题(如 0.1 + 0.2 != 0.3)。

布尔型(bool)示例:flag = True

本质:True 和 False 是 int 的子类(True == 1, False == 0)。

字符串(str)示例:s = "hello"

操作:切片 s[1:3],方法如 split(), strip(), format()。

特性:不可修改,s[0] = 'H' 会报错。

元组(tuple)示例:t = (1, 2, "a")

特点:不可变,用于存储固定数据(如坐标、数据库记录)。

字节序列(bytes)示例:b = b"hello"(仅ASCII字符)

用途:二进制数据存储或传输。

二、可变类型(Mutable)

对象的值可直接修改,内存地址不变。

列表(list)示例:lst = [1, 2, 3]

操作:

增删:append(), insert(), pop()

切片:lst[1:3] = [20, 30]

排序:sort(), sorted()

字典(dict)

示例:d = {"name": "Alice", "age": 25}

规则:

键必须是不可变类型(如 str, int, tuple)。

操作:keys(), values(), get("key", default)

用途:快速键值查找(哈希表实现)。

集合(set)示例:s = {1, 2, 3}

特性:元素唯一、无序,支持集合运算(并集 |,差集 -)。

方法:add(), remove(), intersection().

字节数组(bytearray)示例:ba = bytearray(b"hello")

特性:类似 bytes,但可修改(如 ba[0] = 72)。

三、特殊类型

None

表示空值:x = None用途:初始化变量或函数默认返回值。

复数(complex)示例:c = 3 + 4j

属性:c.real 获取实部,c.imag 获取虚部。

四、类型转换

函数

说明

示例

int()

转整型(截断小数)

int(3.9) → 3

float()

转浮点型

float(5) → 5.0

str()

转字符串

str(100) → "100"

list()

转列表

list("abc") → ['a','b','c']

tuple()

转元组

tuple([1,2]) → (1,2)

set()

转集合(去重)

set([1,1,2]) → {1,2}

dict()

创建字典

dict([("a",1)]) → {"a":1}

五、重要特性

可变 vs 不可变

不可变对象 作为函数参数时,函数内修改不会影响外部变量。

可变对象(如列表、字典)作为参数时,函数内修改会影响外部变量。

pythondef modify(lst):    lst.append(4)  # 原列表会被修改 a = [1, 2, 3]modify(a)print(a)  # 输出 [1, 2, 3, 4]

深浅拷贝

浅拷贝:copy() 方法或 list(), dict() 构造函数,仅复制外层对象。

深拷贝:import copy; copy.deepcopy(x),递归复制所有嵌套对象。

  1. 函数

基本语法

pythondef 函数名(参数):    """文档字符串(可选)"""    代码块    return 返回值  # 可选

示例:pythondef add(a, b):    return a + bresult = add(3, 5)  # 调用

返回值

可返回多个值(实际返回元组):pythondef get_data():    return 1, "hello", Truex, y, z = get_data()  # 元组解包

  • 参数传递

参数类型

位置参数:按顺序传递,如 add(3, 5)。

关键字参数:指定参数名,如 add(b=5, a=3)。

默认参数:定义时赋值,如 def greet(name="Guest"):。

可变参数:

*args:接收任意数量位置参数(元组)。

**kwargs:接收任意数量关键字参数(字典)。

pythondef func(a, b=0, *args, **kwargs):    print(a, b, args, kwargs) func(1, 2, 3, 4, key="value")# 输出:1 2 (3,4) {'key': 'value'}

参数传递规则

不可变对象(如整数、字符串):函数内修改不会影响外部变量。

可变对象(如列表、字典):函数内修改会影响外部变量。

pythondef modify_list(lst):    lst.append(4) my_list = [1, 2, 3]modify_list(my_list)print(my_list)  # 输出 [1, 2, 3, 4]

三、作用域与闭包

作用域规则(LEGB)

Local → Enclosing → Global → Built-in。

使用 global 或 nonlocal 修改外部变量:pythonx = 10def change_x(): global x    x = 20闭包

内部函数引用外部函数变量:pythondef outer():    n = 1    def inner():        nonlocal n        n += 1        return n    return inner counter = outer()print(counter())  # 输出 2

  • 面向对象(OOP)

类与对象

定义类:class MyClass:,构造函数 __init__(self, ...)。

继承:class Child(Parent):,重写方法,super()调用父类。

特殊方法

__str__(字符串表示)、__len__、__getitem__等。

封装与属性

私有变量:_protected(约定)或 __private(名称修饰)。

  • 常用模块与库

os(文件/目录操作),re(正则表达式)

文件操作

1.文本文件2.二进制文件

读写文件:with open("file.txt", "r") as f: content = f.read()。

模式:r(读)、w(写)、a(追加)、b(二进制)。

#对文件的操作

打开和关闭文件

使用 open() 函数打开文件,其基本语法为:open(file, mode='r', encoding=None),其中:file:表示要操作的文件名(可以是相对路绝对路径)。

mode:指定打开文件的模式,常见的模式有 'r'(只读)、'w'(写入,会覆盖原文件内容)、'a'(追加,在文件末尾添加内容)、'x'(创建新文件,若文件已存在则报错) 、'rb'(以二进制模式读取)、'wb'(以二进制模式写入)等。

encoding:指定文件的编码方式,如 'utf-8'、'gbk' 等。

使用 close() 方法关闭文件,示例如下:

python

file = open('example.txt', 'w', encoding='utf-8')# 执行文件操作file.close()

更推荐使用 with 语句,它会在代码块结束时自动关闭文件,示例如下:

python

with open('example.txt', 'w', encoding='utf-8') as file:

    # 执行文件操作

    pass

读取文件内容

常见的读取方法有:

read():读取整个文件内容,返回一个字符串。

readline():读取文件的一行内容,返回一个字符串。

readlines():读取文件的所有行,返回一个包含每行内容的列表。

示例如下:python

with open('example.txt', 'r', encoding='utf-8') as file:

    content = file.read()

    print(content)

    file.seek(0)  # 将文件指针移动到文件开头

    line = file.readline()

    print(line)

    file.seek(0)

    lines = file.readlines()

    for line in lines:

        print(line, end='')

写入文件内容

使用 write() 方法写入字符串到文件中,示例如下:

python

with open('example.txt', 'w', encoding='utf-8') as file:

    file.write("Hello, world!\n")

    file.write("This is a new line.")

正则表达式

re.match(pattern, string, flags=0)

从字符串的起始位置开始匹配,如果匹配成功,返回一个匹配对象;否则返回 None。示例如下:

python

import re

pattern = r'hello'

string = 'hello world'

result = re.match(pattern, string)if result:

    print("匹配成功:", result.group())else:

    print("匹配失败")

re.search(pattern, string, flags=0)

在字符串中搜索匹配的模式,若找到第一个匹配项,返回匹配对象;否则返回 None。示例如下:

python

import re

pattern = r'world'

string = 'hello world'

result = re.search(pattern, string)if result:

    print("匹配成功:", result.group())else:

    print("匹配失败")

re.findall(pattern, string, flags=0)

查找字符串中所有匹配的模式,并以列表形式返回所有匹配结果。示例如下:

python

import re

pattern = r'\d+'

string = 'abc123def456'

result = re.findall(pattern, string)print("匹配结果:", result)

re.sub(pattern, repl, string, count=0, flags=0)

用于替换字符串中所有匹配的模式。repl 是替换的字符串。示例如下:

python

import re

pattern = r'world'

string = 'hello world'

new_string = re.sub(pattern, 'Python', string)print("替换后的字符串:", new_string)

re.split(pattern, string, maxsplit=0, flags=0)

根据匹配的模式分割字符串,并返回分割后的列表。示例如下:

python

import re

pattern = r'[ ,.]+'

string = 'hello, world. python'

result = re.split(pattern, string)print("分割结果:", result)

匹配对象的方法

当使用 re.match() 或 re.search() 等函数匹配成功后,会返回一个匹配对象,该对象有一些常用方法:

group():返回匹配的字符串。

start():返回匹配字符串的起始位置。

end():返回匹配字符串的结束位置。

span():返回一个元组,包含匹配字符串的起始和结束位置。

示例如下:

python

import re

pattern = r'hello'

string = 'hello world'

result = re.search(pattern, string)if result:

    print("匹配的字符串:", result.group())

    print("起始位置:", result.start())

    print("结束位置:", result.end())

print("起始和结束位置:", result.span())

五、异常处理

Python 内置了多种异常类型,常见的有:

SyntaxError:语法错误,通常是代码书写不符合 Python 语法规则。

IndentationError:缩进错误,Python 对代码缩进有严格要求。

NameError:使用未定义的变量或函数。

TypeError:操作或函数应用于不兼容类型的对象。

ValueError:传入无效的参数值。

FileNotFoundError:尝试打开不存在的文件。

异常处理语句

try-except 语句

try-except 语句用于捕获和处理异常,基本语法如下:

python

try:

    # 可能会抛出异常的代码块

    result = 1 / 0except ZeroDivisionError:

    # 处理特定类型异常的代码块

    print("除数不能为零!")

可以使用多个 except 子句来捕获不同类型的异常,示例如下:

Python

try:

    num = int(input("请输入一个整数: "))

    result = 10 / numexcept ValueError:

    print("输入不是有效的整数!")except ZeroDivisionError:

    print("除数不能为零!")

还可以使用一个 except 子句捕获多种类型的异常,示例如下:

python

try:

    num = int(input("请输入一个整数: "))

    result = 10 / numexcept (ValueError, ZeroDivisionError):

    print("输入无效或除数为零!")

try-except-else 语句

else 子句在 try 代码块没有抛出异常时执行,示例如下:

python

try:

    num = int(input("请输入一个整数: "))

    result = 10 / numexcept ValueError:

    print("输入不是有效的整数!")except ZeroDivisionError:

    print("除数不能为零!")else:

    print(f"结果是: {result}")

try-except-finally 语句

finally 子句无论 try 代码块是否抛出异常都会执行,常用于释放资源等操作,示例如下:

python

file = Nonetry:

    file = open('example.txt', 'r')

    content = file.read()

    print(content)except FileNotFoundError:

    print("文件未找到!")finally:

    if file:

        file.close()

抛出异常

使用 raise 语句可以手动抛出异常,示例如下:

python

def divide(a, b):

    if b == 0:

        raise ZeroDivisionError("除数不能为零!")

    return a / b

try:

    result = divide(10, 0)

    print(result)except ZeroDivisionError as e:

    print(e)

自定义异常

可以通过继承 Exception 类来创建自定义异常类,示例如下:

python

class MyCustomError(Exception):

    def __init__(self, message):

        self.message = message

    def __str__(self):

        return self.message

try:

    raise MyCustomError("这是一个自定义异常!")except MyCustomError as e:

    print(e)

通过合理运用异常处理机制,可以让 Python 程序在遇到错误时更稳定和可靠。

  • 进程和线程

进程

概念

进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间、系统资源等,进程之间相互独立,一个进程的崩溃通常不会影响其他进程。

使用方法

Python 的 multiprocessing 模块可以用来创建和管理进程。以下是一个简单的示例:

python

import multiprocessing

def worker(num):

    """进程要执行的任务"""

    print(f'Worker {num} started')

    result = num * num

    print(f'Worker {num} result: {result}')

if __name__ == '__main__':

    processes = []

    for i in range(3):

        p = multiprocessing.Process(target=worker, args=(i,))

        processes.append(p)

p.start()

    for p in processes:

        p.join()

    print('All processes finished')

在上述代码中:

multiprocessing.Process 用于创建一个新的进程,target 参数指定进程要执行的函数,args 参数是传递给该函数的参数。

p.start() 启动进程。

p.join() 用于等待进程执行完毕。

线程

概念

线程是进程中的一个执行单元,一个进程可以包含多个线程,这些线程共享进程的内存空间和系统资源。线程的创建和销毁开销相对较小,适合处理 I/O 密集型任务。

使用方法

Python 的 threading 模块可用于创建和管理线程。以下是一个简单的示例:

python

import threading

def worker(num):

    """线程要执行的任务"""

print(f'Thread {num} started')

    result = num * num

    print(f'Thread {num} result: {result}')

if __name__ == '__main__':

    threads = []

    for i in range(3):

        t = threading.Thread(target=worker, args=(i,))

        threads.append(t)

        t.start()

    for t in threads:

        t.join()

    print('All threads finished')

在上述代码中:

threading.Thread 用于创建一个新的线程,target 参数指定线程要执行的函数,args 参数是传递给该函数的参数。

t.start() 启动线程。

t.join() 用于等待线程执行完毕。

进程和线程的区别

资源占用:进程拥有自己独立的内存空间和系统资源,资源开销较大;线程共享进程的内存空间和系统资源,资源开销相对较小。

通信方式:进程间通信(IPC)需要使用特定的机制,如管道、队列、共享内存等;线程间通信相对简单,可以直接访问共享的全局变量。

并发性能:进程可以利用多核 CPU 的优势,实现真正的并行计算;由于 Python 的全局解释器锁(GIL),同一时刻只有一个线程可以执行 Python 字节码,对于 CPU 密集型任务,多线程并不能提高性能,但对于 I/O 密集型任务,多线程可以提高程序的并发性能。

健壮性:进程之间相互独立,一个进程的崩溃不会影响其他进程;线程共享进程的资源,一个线程的崩溃可能会导致整个进程崩溃。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值