read code and make summer
- ==标题==:语法
- ==标题==:类的定义
- ==标题==:继承
- ==标题==:多态
- ==标题==:__all__ = ['create_dataset', 'create_dataloader']
- ==标题==:yield
- ==标题==: f-string(格式化字符串)
- ==标题==:getattr()
- ==标题==:logging
- ==标题==:seed
- ==标题==:slice
- ==标题==:assert
- ==标题==:iter()
- ==标题==:isinstance
- ==标题== :torch
- ==标题==:torch.Generator()
- ==标题== :numpy
- ==标题==:numpy.random
- ==标题== :importlib
- ==标题==:importlib.import_module(f'basicsr.data.{file_name}')
- ==标题==:os
- ==标题==:osp.dirname(osp.abspath(__file__))
- ==标题==:osp.relpath(entry.path, root)
- ==标题==:osp.splitext(osp.basename(v))[0]
- ==标题==: 异常
- ==标题==:raise TypeError('"suffix" must be a string or tuple of strings')
- ==标题==:random
- ==标题==:math.ceil
- ==标题==:工具包
- ==标题==:获取指定的目录下包含指定内容的文件或者目录的名字
标题:语法
标题:类的定义
在 Python 中,定义一个类的语法非常简洁和灵活。下面是一个典型的类定义的基本语法:
class ClassName:# 类的属性和方法pass
详细解释
class
: 关键字用于声明一个类。ClassName
: 类的名称,遵循标识符命名规则。:
: 冒号表示类定义的开始。- 类的主体部分缩进,通常是四个空格。
pass
: 是一个占位符,表示在类主体中没有任何内容。你可以在这里定义类的属性和方法。
示例
class Person:# 类的属性species = "Homo sapiens"# 类的方法def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")# 实例化对象
john = Person("John", 30)
john.greet() # 输出: Hello, my name is John and I am 30 years old.
在这个示例中,Person
类有一个类属性 species
和两个方法 __init__
和 greet
。__init__
方法是类的构造函数,在创建对象时调用。greet
方法用于打印问候语。
类的构造函数 __init__
类的构造函数 __init__
是一个特殊的方法,用于初始化新创建的对象。在类实例化时,构造函数会自动调用,并传递参数给对象的属性。
class Person:def __init__(self, name, age):self.name = nameself.age = age# 实例化对象并传递参数
john = Person("John", 30)
print(john.name) # 输出: John
print(john.age) # 输出: 30
self 参数
在类的方法中,第一个参数通常是 self
,它表示当前对象实例本身。通过 self
,你可以访问对象的属性和方法。
class MyClass:def __init__(self, x):self.x = xdef print_value(self):print(self.x)obj = MyClass(10)
obj.print_value() # 输出: 10
类的继承
Python 支持类的继承,一个类可以继承另一个类的属性和方法。语法如下:
class ChildClass(ParentClass):# 子类的属性和方法pass
示例
class Animal:def speak(self):print("Animal speaks")class Dog(Animal):def bark(self):print("Dog barks")dog = Dog()
dog.speak() # 输出: Animal speaks
dog.bark() # 输出: Dog barks
在这个示例中,Dog
类继承了 Animal
类的 speak
方法,并添加了自己的 bark
方法。
总结
在 Python 中,类的定义通过简洁的语法实现了面向对象编程的基本特性。通过定义类和实例化对象,可以创建具有属性和方法的对象,实现代码的组织、复用和扩展。
标题:继承
在 Python 中,继承是面向对象编程的重要概念之一,允许一个类(子类)基于另一个类(父类)定义新的类。子类继承了父类的属性和方法,同时可以添加自己的属性和方法,或者重写父类的方法。
基本语法
class ParentClass:# 父类的属性和方法class ChildClass(ParentClass):# 子类的属性和方法
示例
# 定义一个父类
class Animal:def __init__(self, name):self.name = namedef speak(self):print(f"{self.name} makes a sound")# 定义一个子类,继承自父类 Animal
class Dog(Animal):def speak(self):print(f"{self.name} barks")# 实例化子类对象
dog = Dog("Buddy")
dog.speak() # 输出: Buddy barks
在这个示例中,Dog
类继承了 Animal
类的属性和方法,并且重写了 speak()
方法,使其输出狗的声音。
方法重写(Override)
子类可以重写(Override)父类的方法,即在子类中重新定义父类中已有的方法。
class Cat(Animal):def speak(self):print(f"{self.name} meows")cat = Cat("Whiskers")
cat.speak() # 输出: Whiskers meows
调用父类方法
子类可以通过 super()
函数调用父类的方法。
class Fish(Animal):def speak(self):super().speak()print("But fishes don't make sounds")fish = Fish("Nemo")
fish.speak() # 输出: Nemo makes a sound \n But fishes don't make sounds
多重继承
Python 支持多重继承,即一个类可以同时继承自多个父类。
class A:def method(self):print("A method")class B:def method(self):print("B method")class C(A, B):passobj = C()
obj.method() # 输出: A method
在多重继承中,Python 使用方法解析顺序(Method Resolution Order,MRO)来确定方法调用的优先顺序。
继承与组合
继承是一种"is-a"(是一个)关系,表示一个对象是另一个对象的一种类型。而组合是一种"has-a"(有一个)关系,表示一个对象包含另一个对象作为其一部分。
class Engine:def start(self):print("Engine started")class Car:def __init__(self):self.engine = Engine()def start(self):self.engine.start()print("Car started")my_car = Car()
my_car.start() # 输出: Engine started \n Car started
在这个示例中,Car
类使用组合来包含一个 Engine
对象,而不是继承自 Engine
类。
使用继承的优点
- 代码重用:避免了重复编写相同的代码。
- 可扩展性:子类可以在不改变父类的情况下添加新功能。
- 代码组织:将相似的类归为一类,使代码更易于理解和维护。
总结
继承是 Python 中实现代码重用、扩展和组织的重要机制之一。通过继承,可以构建具有层次结构的类,使代码更加清晰、灵活和可维护。
标题:多态
多态是面向对象编程的一个重要概念,它允许不同类的对象对同一消息做出不同的响应。简而言之,多态性允许不同类的对象对同一个方法具有不同的实现,从而使得代码更加灵活和可扩展。
多态的实现方式
多态性主要通过继承和方法重写来实现。
- 继承和方法重写:子类可以重写父类的方法,从而使得不同的子类对象在调用相同方法时表现出不同的行为。
class Animal:def speak(self):print("Animal speaks")class Dog(Animal):def speak(self):print("Dog barks")class Cat(Animal):def speak(self):print("Cat meows")# 多态性的体现
animals = [Dog(), Cat()]
for animal in animals:animal.speak()
在这个示例中,Dog
类和 Cat
类都继承了 Animal
类,并且分别重写了 speak
方法。当我们将 Dog
对象和 Cat
对象放入同一个列表中,并且遍历调用它们的 speak
方法时,它们表现出了不同的行为。
- 鸭子类型:不依赖继承,而是依赖于对象的实现。
class Duck:def speak(self):print("Duck quacks")class Human:def speak(self):print("Human talks")# 多态性的体现
def make_sound(entity):entity.speak()duck = Duck()
human = Human()make_sound(duck) # 输出: Duck quacks
make_sound(human) # 输出: Human talks
在这个示例中,Duck
类和 Human
类都实现了 speak
方法,尽管它们没有共同的父类,但是它们都可以作为参数传递给 make_sound
函数,并且根据对象的实际类型调用相应的方法,这就是多态性的体现。
多态的优点
- 代码重用:多态性可以使得不同类的对象对同一消息做出不同的响应,从而避免了重复编写相似的代码。
- 可扩展性:通过添加新的子类并重写父类的方法,可以很容易地扩展现有的代码功能。
- 简化代码:多态性使得代码更加简洁、灵活和易于理解。
总结
多态是面向对象编程中的一个重要概念,通过继承和方法重写实现,使得不同类的对象可以对同一个消息做出不同的响应。多态性使得代码更加灵活、可扩展和易于理解,是面向对象编程的核心之一。
标题:[new_element for element in iterable if condition]
[new_element for element in iterable if condition]
new_element: 新列表中的元素,可以是对 element 的某种变换。
element: 迭代中的每个元素。
iterable: 可迭代对象(如列表、字符串、range 等)。
condition: 条件表达式,只有满足该条件的元素才会被包含在新列表中。
生成一个包含所有偶数的列表:
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers) # 输出: [0, 2, 4, 6, 8]
生成一个包含所有字符串长度大于3的单词的列表:
words = ["apple", "banana", "cherry", "date"]
long_words = [word for word in words if len(word) > 3]
print(long_words) # 输出: ['apple', 'banana', 'cherry']
生成一个字典,其中键为数字,值为数字的平方,只包含偶数:
squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(squares) # 输出: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
生成一个集合,包含所有字符串长度大于3的单词:
words = {"apple", "banana", "cherry", "date"}
long_words_set = {word for word in words if len(word) > 3}
print(long_words_set) # 输出: {'banana', 'apple', 'cherry'}
生成一个生成器对象,包含所有偶数:
even_numbers_gen = (x for x in range(10) if x % 2 == 0)
print(list(even_numbers_gen)) # 输出: [0, 2, 4, 6, 8]
创建一个嵌套列表,其中包含从1到9的所有数,但排除掉5:
nested_list = [[x for x in range