Python学习大纲总结及注意事项

news2024/11/8 8:33:09

1. Python基础

•	Python基础语法:变量、常量、数据类型(字符串、整数、浮点数、布尔值)、运算符、表达式。

•	控制结构:条件语句(if-elif-else)、循环语句(for循环和while循环)、循环控制语句(break、continue、pass)。
•	数据结构:
•	列表:列表的创建、增删改查、切片、列表推导式。
•	元组:不可变序列,适用于不需要修改的数据。
•	集合:集合操作(交集、并集、差集)、去重、集合推导式。
•	字典:键值对存储、增删改查、字典推导式。
变量与数据类型:
x = 10            # 整数
y = 3.14          # 浮点数
name = "Alice"    # 字符串
is_student = True # 布尔值
print(x, y, name, is_student)


控制结构:
age = 18
if age >= 18:
    print("Adult")
else:
    print("Minor")

for i in range(5):   # 循环打印0到4
    print(i)


数据结构:

# 列表
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")
print(fruits)    # 输出 ['apple', 'banana', 'cherry', 'orange']
# 字典
person = {"name": "Alice", "age": 25}
print(person["name"])   # 输出 Alice

2. 函数编程

•	函数的定义和调用:参数传递(位置参数、关键字参数、默认参数、可变参数)、返回值。
•	匿名函数:lambda表达式的使用。
•	函数的高级用法:闭包、装饰器、递归函数。
•	内置函数:常用内置函数(如map、filter、reduce、zip等)。
函数定义:
def greet(name):
    return f"Hello, {name}!"
print(greet("Alice"))   # 输出 Hello, Alice!
匿名函数:
add = lambda x, y: x + y
print(add(5, 3))   # 输出 8
常用内置函数:
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)   # 输出 [2, 4, 6, 8, 10]

3. 面向对象编程(OOP)

•	类与对象:类的定义、实例化对象、构造函数__init__。
•	类的成员:类属性、实例属性、方法(普通方法、类方法、静态方法)。
•	继承和多态:继承的概念、方法重写、super()函数的使用。
•	特殊方法:__str__、__repr__、__len__、运算符重载等。
•	封装、继承、多态:类的封装性、访问控制(公有、私有、受保护属性)、多态性。
类和对象:
class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        print(f"{self.name} is barking!")
my_dog = Dog("Buddy")
my_dog.bark()   # 输出 Buddy is barking!

继承:
class Animal:
    def speak(self):
        print("Animal sound")
class Dog(Animal):
    def speak(self):
        print("Woof!")
dog = Dog()
dog.speak()   # 输出 Woof!

4. 模块和包

•	模块的创建和导入:import、from...import语句、as起别名。
•	标准库的使用:math、random、datetime、os、sys等模块。
•	包的管理:创建包、__init__.py文件的作用、包的导入。
导入模块:
import math
print(math.sqrt(16))   # 输出 4.0

自定义模块:创建一个名为mymodule.py的文件
# mymodule.py
def greet(name):
    print(f"Hello, {name}!")
# 使用自定义模块
import mymodule
mymodule.greet("Alice")   # 输出 Hello, Alice!

5. 文件操作

•	文件读写:文件的打开与关闭、read、write、readlines、writelines等方法。
•	文件的模式:文本模式、二进制模式、追加模式等。
•	文件路径操作:使用os模块、文件与目录的创建与删除。
文件读写:
# 写入文件
with open("example.txt", "w") as f:
    f.write("Hello, world!")
# 读取文件
with open("example.txt", "r") as f:
    content = f.read()
    print(content)   # 输出 Hello, world!

6. 异常处理

•	异常的捕获:try-except结构、捕获多种异常、else和finally子句的使用。
•	自定义异常:创建自定义异常类,使用raise抛出异常。
•	常见异常类型:IndexError、KeyError、ValueError、TypeError等。
捕获异常:
try:
    x = int(input("Enter a number: "))
except ValueError:
    print("That's not a valid number!")

7. 高级特性

•	生成器:yield、生成器表达式、生成器的应用场景。
•	迭代器:__iter__和__next__方法、创建自定义迭代器。
•	装饰器:函数装饰器、类装饰器。
•	上下文管理器:with语句、__enter__和__exit__方法的实现。
生成器:

def countdown(n):
    while n > 0:
        yield n
        n -= 1

for number in countdown(3):
    print(number)   # 输出 3 2 1


装饰器:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

8. 数据处理与分析

•	第三方库:
•	NumPy:数值计算,数组操作。
•	Pandas:数据清洗与分析,DataFrame的操作。
•	Matplotlib & Seaborn:数据可视化,绘制图表。
•	数据读取与写入:读取CSV、Excel、数据库数据,数据导出等。
NumPy和Pandas:

import numpy as np
import pandas as pd

data = np.array([1, 2, 3, 4])
print(data * 2)   # 输出 [2 4 6 8]

df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
print(df)

9. 网络编程

•	网络请求:使用requests库进行HTTP请求,处理JSON数据。
•	Socket编程:Socket的基本概念、创建TCP和UDP连接。
•	爬虫入门:基础爬虫、正则表达式、BeautifulSoup和XPath。
	•	使用Requests库:

import requests

response = requests.get("www.baidu.con")
print(response.json())

10. 多线程与多进程

•	多线程:线程的创建、线程同步、线程锁、threading模块。
•	多进程:进程的创建、进程间通信、multiprocessing模块。
•	协程:异步编程、asyncio库。
多线程:

import threading

def print_numbers():
    for i in range(5):
        print(i)

thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()

11. 数据库操作

•	数据库基础:关系型数据库、SQL语句。
•	SQLite:内置数据库操作,数据的增删改查。
•	MySQL和PostgreSQL:使用pymysql或psycopg2库进行连接与操作。
•	ORM:使用SQLAlchemy等库进行ORM操作。
SQLite操作:

import sqlite3

conn = sqlite3.connect("example.db")
c = conn.cursor()

c.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
c.execute("INSERT INTO users (name) VALUES ('Alice')")
conn.commit()

for row in c.execute("SELECT * FROM users"):
    print(row)

conn.close()

12. 测试与调试

•	单元测试:unittest框架的使用,编写测试用例。
•	调试技巧:pdb模块、断点调试、日志记录(logging模块)。
•	代码规范:PEP8规范、文档字符串、类型注解。
单元测试:

import unittest

def add(x, y):
    return x + y

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(3, 4), 7)

if __name__ == '__main__':
    unittest.main()

13. 常用工具

•	虚拟环境:使用venv或virtualenv创建虚拟环境。
•	包管理:使用pip安装、更新、卸载包。
•	Git版本控制:基本操作(clone、commit、push、pull等),Git分支管理。
虚拟环境:
python3 -m venv myenv
source myenv/bin/activate  # 激活虚拟环境 (Linux/Mac)
myenv\Scripts\activate     # 激活虚拟环境 (Windows)

Git基本操作:
git init
git add .
git commit -m "Initial commit"
git push origin main

常见的注意事项:
1. 变量命名规范

•	遵循PEP 8命名规范,变量名使用小写字母并用下划线分隔,如total_sum、user_name。
•	常量使用全大写字母,并用下划线分隔,如MAX_SIZE。
•	类名使用首字母大写的驼峰命名法,如MyClass。

2. 避免使用可变默认参数

Python中的函数参数是按引用传递的,如果使用可变对象(如列表、字典等)作为默认参数,可能会导致意想不到的结果。
建议将默认参数设为None,在函数内部初始化。

def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

3. 注重代码的可读性

•	Python代码应尽量清晰、简洁,避免复杂的嵌套,使用空行和适当的注释。
•	适当使用空行分隔不同逻辑块,增加可读性。

4. 理解浅拷贝和深拷贝

使用copy模块的copy()和deepcopy()区分浅拷贝与深拷贝。
浅拷贝会复制对象本身,而深拷贝会递归复制所有嵌套的对象。

import copy

list1 = [1, [2, 3]]
list2 = copy.copy(list1)       # 浅拷贝
list3 = copy.deepcopy(list1)    # 深拷贝

5. 用is判断None

检查一个变量是否为None,推荐使用is而不是==,避免潜在的意外行为。

if my_var is None:
    print("my_var is None")

6. 条件表达式中的and和or短路

andor在Python中是短路求值,and在第一个条件为假时停止,or在第一个条件为真时停止。
利用短路特性可以优化代码,减少不必要的计算。

a = None
b = "Hello"
result = a or b     # 返回 "Hello",因为a为None

7. 理解迭代器与生成器

使用生成器(yield关键字)可以节省内存,特别适合大数据处理或无限序列。
生成器函数不会一次性生成所有数据,而是按需生成,减少内存占用。

def count_up_to(n):
    count = 1
    while count <= n:
        yield count
        count += 1

for number in count_up_to(5):
    print(number)

8. 避免过多的嵌套

•	嵌套过深会影响代码的可读性,建议用早返回、合并条件等方式简化逻辑。

不推荐

if condition1:
    if condition2:
        if condition3:
            do_something()

推荐

if not condition1 or not condition2 or not condition3:
    return
do_something()

9. 使用列表推导式提升效率

列表推导式能简化代码、提高可读性,但要避免过于复杂的推导式,保持代码清晰。

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers if x > 2]

10. 使用上下文管理器(with语句)

with语句自动管理资源的释放,适用于文件操作、数据库连接等。

with open("file.txt", "r") as f:
    content = f.read()

离开with块后文件自动关闭

11. 避免捕获所有异常

捕获异常时,尽量指定异常类型,不要直接用except:except Exception:
这样能避免意外捕获其他异常,导致问题难以排查。


try:
    result = 1 / 0
except ZeroDivisionError:
    print("Cannot divide by zero")

12. 使用合适的数据结构

•	根据数据类型和操作需求选择合适的数据结构,Python提供列表、集合、字典、元组等多种结构。
•	例如,若数据无重复需求,用集合set;若要频繁查找元素,用字典dict。

13. 避免在循环内重复计算

•	在循环中避免重复计算相同的值,可以提前计算并保存,提高效率。

不推荐

for _ in range(len(my_list)):
    do_something(len(my_list))

推荐

list_length = len(my_list)
for _ in range(list_length):
    do_something(list_length)

14. 用enumerate和zip提升循环效率

enumerate函数为循环提供索引,而zip可以同步遍历多个序列。

names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names):
    print(index, name)

list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
for a, b in zip(list1, list2):
    print(a, b)

15. 避免滥用全局变量

•	全局变量会增加代码的耦合性,使得函数的行为不易预测,推荐使用局部变量。

16. 使用f字符串

f字符串是Python 3.6后推荐的格式化字符串方式,效率更高且更简洁。

name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old")

17. 合理使用注释和文档字符串

为复杂的代码逻辑添加注释,保持代码易于理解。
使用三重引号(""")为模块、类、函数添加文档字符串,以便自动生成文档或帮助信息。

def add(a, b):
    """
    This function adds two numbers.
    Parameters:
        a (int): The first number.
        b (int): The second number.
    Returns:
        int: The sum of a and b.
    """
    return a + b

18. Python中的“真”与“假”

•	在Python中,0、空字符串、空列表、空字典、None等都被视为假值。
•	判断是否为空时,直接使用if not my_list而不是if len(my_list) == 0。

19. 尽量用any和all简化判断

anyall函数用于检查序列中是否存在任一项或全部项为真。

values = [0, 1, 2]
if any(values):     # 只要有一个非零值就为True
    print("At least one true value")

if all(values):     # 全部非零才为True
    print("All values are true")

20. 避免无意义的列表创建

•	使用生成器表达式代替不必要的列表创建,可以节省内存。

推荐

sum(x * x for x in range(10))

不推荐

sum([x * x for x in range(10)])

21. 合理使用断言(assert)

•	断言用于在开发和调试中捕获逻辑错误,而不是替代异常处理。
•	在发布代码时可以通过禁用断言提升性能,避免在生产环境中使用。
def calculate_square(n):
    assert n >= 0, "Number must be non-negative"
    return n * n

加油吧!卷卷卷

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

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

相关文章

IntelliJ IDEA 2023.2——配置说明

IntelliJ IDEA 2023.2——配置说明 IntelliJ IDEA 的官方下载地址 IntelliJ IDEA 官网下载地址 一路上NEXT 到结尾&#xff1a; 继续NEXT 下一步: 界面如下图所示 界面如下图所示 ctrl F 查找 “码猿趣事” 查找【idea99】

算法通关(4)-- 前缀树

前缀数原理和代码 原理 前缀树&#xff08;Trie树&#xff09;&#xff0c;也称为字典树&#xff0c;是一种用于高效存储和检索字符串的数据结构。它是一种树形结构&#xff0c;能够利用字符串的公共前缀来减少存储空间和查询时间。 现在有“acb”,"cba","ac…

【CSS】“flex: 1“有什么用?

flex 属性的组成 flex 属性是一个复合属性&#xff0c;包含以下三个子属性&#xff1a; flex-grow&#xff1a;决定元素在容器中剩余空间的分配比例。默认值为 0&#xff0c;表示元素不会扩展。当设置为正数时&#xff0c;元素会按照设定比例扩展。flex-shrink&#xff1a;决…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

神经网络基础--什么是正向传播??什么是方向传播??

前言 本专栏更新神经网络的一些基础知识&#xff1b;这个是本人初学神经网络做的笔记&#xff0c;仅仅堆正向传播、方向传播就行了了一个讲解&#xff0c;更加系统的讲解&#xff0c;本人后面会更新《李沐动手学习深度学习》&#xff0c;会更有详细讲解;案例代码基于pytorch&a…

【大模型系列】Grounded-VideoLLM(2024.10)

Paper&#xff1a;https://arxiv.org/pdf/2410.03290Github&#xff1a;https://github.com/WHB139426/Grounded-Video-LLMHuggingface&#xff1a;https://huggingface.co/WHB139426/Grounded-Video-LLMAuthor&#xff1a;Haibo Wang et al. 加州大学&#xff0c;复旦 动机&a…

IDEA2024下安装kubernetes插件并配置进行使用

【1】安装插件 其实2024.2.3下默认已经安装了kubernetes插件&#xff0c;如果你发现自己IDEA中没有&#xff0c;在市场里面检索并下载即可。 【2】kubernetes配置 ① 前置工作 首先你要准备一个config文件和一个kubectl.exe 。 config文件类似如下&#xff1a; apiVersi…

onnx-web + yolov8n 在视频流里做推理

顺着我上一篇文章 使用onnxruntime-web 运行yolov8-nano推理 继续说&#xff0c;有朋友在问能不能接入 视频流动&#xff0c;实时去识别物品。 首先使用 getUserMedia 获取摄像头视频流 getUserMedia API 可以访问设备的摄像头和麦克风。你可以使用这个 API 获取视频流&#…

Python练习11

Python日常练习 题目&#xff1a; 编写一个石头剪刀布游戏&#xff0c;该程序要求完成如下功能&#xff1a; (1) 显示游戏规则&#xff0c;提醒用户输入一个1-3的整数或者直接回车。 用户输入回车时游戏结束。 用户输入不合法&#xff08;包括输入的…

航展畅想:从F35机载软件研发来看汽车车载软件研发

两款经典战机的机载软件 F-22和F-35战斗机的研制分别始于1980年代和1990年代末&#xff0c;F-22项目在1981年启动&#xff0c;主要由洛克希德马丁&#xff08;Lockheed Martin&#xff09;和波音公司&#xff08;Boeing&#xff09;合作开发&#xff0c;以满足美军“先进战术战…

实践出真知:MVEL表达式empty的坑

目录标题 背景为什么呢&#xff1f;验证下empty的含义case1case2case3 结论具体解释&#xff1a; 背景 //是否白名单 if(goodInfo.?isWhite ! empty){showList.add(["label": "是否白名单","value":["text":(goodInfo.?isWhite tr…

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

Kaggle生物信息学挑战:酶稳定性预测大赛

背景介绍 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。 概念解释 X 残基&#xff1a;假设 它用 红色表示 &#xff0c; Y 残基&#xff1a;假设…

【开发工具——依赖管理工具——Maven】

1. Maven介绍 Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model&#xff0c;POM) 的概念&#xff0c;Maven 可以从一条中心信息管理项目的构建、报告和文档。 对于开发者来说&#xff0c;Maven 的主要作用主要有 3 个&#xff1a; …

vue3+vite搭建脚手架项目本地运行electron桌面应用

1.搭建脚手架项目 搭建Vue3ViteTs脚手架-CSDN博客 2.创建完项目后&#xff0c;安装所需依赖包 npm i vite-plugin-electron electron26.1.0 3.根目录下创建electron/main.ts electron/main.ts /** electron/main.ts */import { app, BrowserWindow } from "electron&qu…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

11月7日(内网横向移动(二))

利用系统服务 SCShell SCShell是一款利用系统服务的无文件横向移动工具。与传统的创建远程服务的方法不同&#xff0c;SCShell利用提供的用户凭据&#xff0c;通过ChangeServiceConfigA API修改远程主机上的服务配置&#xff0c;将服务的二进制路径名修改为指定的程序或攻击载…