python 基础知识100问

目录

1 Python中函数的输入参数类型‌:

2 python 第一个方法参数 self cls

3 类和面向对象

4 Python 中__init__.py 作用

5 pyhon语法糖

6 Metaclass

7 数据库事务

8 常用web框架

9 待新增

10 设计模式

11  python 线程池

12 机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)


Python中函数的输入参数类型‌:

  1. 位置参数(Positional Arguments)‌:这是最常见的参数类型,按照顺序传递参数。例如,在函数定义中,第一个参数是a,第二个参数是b,调用时必须按照这个顺序传递值。如果调用时少传了一个参数,程序会报错‌12。

  2. 默认参数(Default Arguments)‌:在函数定义时可以为参数指定一个默认值。如果在调用函数时没有提供该参数的值,则使用默认值。例如,函数test(name, message='Boy')中,如果调用时没有提供message参数,则使用默认值'Boy'‌12。

  3. 关键字参数(Keyword Arguments)‌:这种参数通过名称传递,允许在调用函数时指定参数名,这使得参数的顺序可以与声明时不同,增加了代码的可读性。例如,function(a=2, b=3)即使ab的顺序与定义时不同,也能正确传递值‌24。

  4. 可变位置参数(Arbitrary Positional Arguments)‌:通过在参数前加一个星号*来实现,可以接收任意数量的位置参数。例如,def function(*args): return sum(args)可以接收任意数量的位置参数‌25。

  5. 可变关键字参数(Arbitrary Keyword Arguments)‌:通过在参数前加两个星号**来实现,可以接收任意数量的关键字参数。例如,def function(**‌kwargs): return kwargs可以接收任意数量的关键字参数‌25。

  6. python  函数的返回类型注解放在参数列表后面的->符号之后,紧接着是返回值的类型

    def greet(name: str) -> str:
        return f"Hello, {name}!"

2 python 第一个方法参数 self cls

  • 类方法使用@classmethod并接收cls参数。

  • 静态方法使用@staticmethod并不接收clsself参数。

  • 实例方法自动接收self参数,用于访问实例属性和方法。

3 类和面向对象

1. __init__构造方法

构造方法是一个特殊方法,用于在对象创建时自动调用,通常用于初始化实例变量。

2. __str__:定义对象的字符串表示

当使用 print() 或 str() 输出对象时,会调用 __str__ 方法,返回人类可读的字符串。

3. __eq__ 用于比较两个对象是否相等。

.__repr__ 返回对象的详细信息,主要用于调试。

5. 类方法 和 静态方法 是与普通方法不同的两种方法类型:类方法(@classmethod):操作类级别的数据,接收 cls 参数表示类本身。静态方法(@staticmethod):不依赖类或对象,只是与类相关的工具函数。

6. @abs.abstractmethod注解,在抽象类中使用@abstractmethod装饰器来定义抽象方法。这些方法没有具体的实现,只是声明了接口。‌子类实现抽象方法‌:继承抽象类的子类必须实现所有的抽象方法,否则子类也会被视为抽象类,不能被实例化。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof!"

class Cat(Animal):
    def sound(self):
        return "Meow!"

# 实例化子类并调用方法
dog = Dog()
print(dog.sound())  # 输出: Woof!
cat = Cat()
print(cat.sound())  # 输出: Meow!

7.__subclasses__

在Python中,如果你想从父类获取所有子类,可以通过使用__subclasses__()方法。这个方法会返回一个列表,其中包含了该类的所有直接子类。但是,如果你想获取所有子类,包括间接子类(即孙子类、重孙子类等),你需要递归地调用这个方法。

class Parent:
    pass
 
class Child1(Parent):
    pass
 
class Child2(Parent):
    pass
 
# 获取Parent的直接子类,注意 孙子类,还需要继续迭代
print(Parent.__subclasses__())  # 输出: [<class '__main__.Child1'>, <class '__main__.Child2'>]

4 Python 中__init__.py 作用

在 Python 中,__init__.py 文件是用于定义 包(Package) 的特殊文件。它的存在告诉 Python 解释器,该目录应被视为一个包。__init__.py 文件可以是空的,也可以包含初始化代码或定义包的属性和方法。

__init__.py 的作用
标识包:

如果一个目录中包含 __init__.py 文件,Python 会将其视为一个包。

没有 __init__.py 的目录会被视为普通目录,无法通过包的方式导入。

初始化包:

__init__.py 文件在包被导入时自动执行,可以用于初始化包或设置包级别的变量。

定义包的接口:

可以在 __init__.py 中导入模块或子包,简化用户导入包时的操作。

控制包的导入行为:

通过 __all__ 变量,可以控制使用 from package import * 时导入哪些模块。

  • import module:适用于需要使用整个模块,避免命名冲突,提高代码可读性。
  • from module import name:适用于只需要模块中部分对象的情况,简化代码,但需注意命名冲突。
  • from module import *:尽量避免使用,可能导致命名冲突和代码混淆。

5 pyhon语法糖

       Python语法糖‌是指那些能够使代码更加简洁、易读的特殊语法结构,它们并没有引入新的功能,但通过简化代码书写,提高了开发效率。以下是一些常用的Python语法糖及其使用示例:‌
 ‌     列表推导式‌:用于快速创建列表。例如,[x**2 for x in numbers]可以创建一个包含原始列表中每个元素平方的新列表。
 ‌    字典推导式‌:用于快速创建字典。例如,{x: x**2 for x in numbers}可以创建一个键和值都来自原始列表的字典。
 ‌     集合推导式‌:用于创建集合。例如,{x**2 for x in numbers}可以创建一个包含原始列表中每个元素平方的集合。
‌      条件表达式‌:even_odd = "even" if x % 2 == 0 else "odd"可以在一行中根据条件设置变量的值。
 ‌     with语句‌:用于自动管理资源(如文件操作),无需手动关闭文件。
 ‌     装饰器‌:@decorator可以将装饰器函数应用到另一个函数上,以便在函数调用前后执行额外的逻辑。
 ‌     解构赋值‌:x, y = 10, 20可以一次性给多个变量赋值。
 ‌    生成器表达式‌:适合处理大量数据。例如,(x**2 for x in numbers)创建一个生成器,适合惰性求值。
 ‌     三元运算符‌:x > 5 and 'yes' or 'no'在一行中实现简单的if-else逻辑。
‌解包‌:用于将序列或字典中的值分配给多个变量,例如*args, **kwargs用于函数参数传递。

1.元类与装饰器    

class ModelRegistry:
    _registry = {}
 
    @classmethod
    def register_model(cls, name):
        def decorator(model_cls):
            cls._registry[name] = model_cls
            return model_cls
        return decorator
 
# 使用装饰器注册模型
@ModelRegistry.register_model(name='resnet')
class ResNet:
    pass
 
@ModelRegistry.register_model(name='densenet')
class DenseNet:
    pass

2 列表解析语法

squares = [x**2 for x in range(1, 6)]  # 从1到5的平方
print(squares)  # 输出: [1, 4, 9, 16, 25]

3 元组返回:比如函数method返回结果为(x,y),则可以这样写 x,y=method(**)

6 Metaclass

Python中的metaclass,是时候了解一下了!

7 数据库事务

Python 如何处理数据库事务_python 数据库事务-优快云博客

8 常用web框架

ORM框架

9 待新增

10 设计模式

 23种设计模式,注解一般是用装饰器模式实现

11  python 线程池

在Python中,线程池是一种用于管理和复用线程的机制,可以有效地执行并发任务。`concurrent.futures` 模块提供了 `ThreadPoolExecutor` 类,用于创建和管理线程池。

   from concurrent.futures import ThreadPoolExecutor
   with ThreadPoolExecutor(max_workers=5) as executor:
   future = executor.submit(function, *args, **kwargs)
   #`function` 是要执行的函数,`*args` 和 `**kwargs` 是传递给函数的参数。
   result = future.result()

### 示例代码

以下是一个简单的示例,展示了如何使用 `ThreadPoolExecutor` 来并发执行多个任务:

from concurrent.futures import ThreadPoolExecutor
import time

def task(name):
    print(f"Task {name} started")
    time.sleep(2)  # 模拟耗时操作
    print(f"Task {name} finished")
    return f"Result from {name}"

# 创建线程池,最多同时运行3个线程
with ThreadPoolExecutor(max_workers=3) as executor:
    # 提交任务到线程池
    futures = [executor.submit(task, f"Task-{i}") for i in range(5)]

    # 获取任务结果
    for future in futures:
        print(future.result())

print("All tasks completed")

12 机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)

是人工智能的两个重要分支,深度学习是机器学习的一个子领域。以下是它们的主要区别:

### 1. **定义与范围**
- **机器学习**:通过数据训练模型,使计算机能够自动学习和改进,涵盖多种算法(如线性回归、决策树、支持向量机等)。
- **深度学习**:使用多层神经网络(通常是深度神经网络)进行学习,是机器学习的一个子集。

### 2. **模型结构**
- **机器学习**:模型相对简单,如线性模型、决策树等,通常需要手动设计特征。
- **深度学习**:模型复杂,包含多层神经网络,能够自动从数据中学习特征。

### 3. **数据需求**
- **机器学习**:对数据量需求相对较低,适合中小规模数据集。
- **深度学习**:需要大量数据进行训练,适合大规模数据集。

### 4. **计算资源**
- **机器学习**:计算资源需求较低,普通计算机即可训练。
- **深度学习**:计算资源需求高,通常需要GPU或TPU加速。

### 5. **特征工程**
- **机器学习**:依赖人工特征工程,需手动提取和选择特征。
- **深度学习**:自动进行特征提取,减少对人工特征工程的依赖。

### 6. **应用场景**
- **机器学习**:适用于结构化数据、中小规模数据集,如分类、回归、聚类等任务。
- **深度学习**:适用于非结构化数据、大规模数据集,如图像识别、自然语言处理、语音识别等复杂任务。

### 7. **可解释性**
- **机器学习**:模型通常较易解释,如决策树、线性回归等。
- **深度学习**:模型复杂,较难解释,常被视为“黑箱”。

### 8. **训练时间**
- **机器学习**:训练时间较短,适合快速迭代和原型开发。
- **深度学习**:训练时间较长,尤其是大规模数据集和复杂模型。

### 9. **算法示例**
- **机器学习**:线性回归、逻辑回归、支持向量机、决策树、随机森林、K均值聚类等。
- **深度学习**:卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)、生成对抗网络(GAN)等。

### 总结

- **机器学习**:涵盖多种算法,适合中小规模数据集和结构化数据,依赖人工特征工程,模型较易解释。
- **深度学习**:使用多层神经网络,适合大规模数据集和非结构化数据,自动进行特征提取,模型复杂且难解释。

选择机器学习还是深度学习取决于具体任务、数据量和计算资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhousenshan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值