当前位置: 首页 > news >正文

python 个人学习笔记

个人学习笔记

关键字

if __name__ == '__main__

if __name__ == '__main__': 是 Python 中一个常用的代码结构,它的作用是判断当前脚本是否作为主程序直接运行,还是被作为模块导入到其他脚本中使用。 以下详细解释:

__name__ 是 Python 中的一个内置变量,它表示当前模块的名称。

当一个 Python 脚本被直接运行时,__name__ 的值会被设置为 '__main__';

而当这个脚本被作为模块导入到其他脚本中时,__name__ 的值会是这个模块的名字(也就是脚本的文件名,不包

含 .py 后缀)。 以下是代码示例:

def main():print("This is the main function.")if __name__ == '__main__':main()

在上述代码中: 定义了一个 main 函数,函数内打印一句话。

接着使用 if __name__ == '__main__': 判断,当脚本直接运行时,__name__ 等于 '__main__',条件成立,会执行 main() 函数。

假设我们有另一个脚本 test.py,内容如下:

import module  # 假设上面代码保存为module.py# 这里并不会执行module.py中的main函数

在 test.py 中导入了 module 模块,由于 module 模块是被导入使用,此时 module 模块中的 __name__ 是 'module',不等于 '__main__',所以 module 模块中 if __name__ == '__main__': 块内的代码不会执行。

if __name__ == '__main__': 的好处主要有:

代码组织清晰:将主程序逻辑放在 if __name__ == '__main__': 块内,可以使代码结构更清晰,便于区分哪些代码是在模块被导入时执行,哪些是在模块直接运行时执行。

便于测试:在开发模块时,可以在 if __name__ == '__main__': 块内编写测试代码,这些测试代码在模块被导入时不会执行,只有在直接运行该模块时才会执行,方便对模块进行功能测试。

__init__

  1. 定义
    • 在 Python 中,__init__是一个特殊方法(也称为魔法方法或双下划线方法)。它是类中的构造函数,用于初始化类的实例对象。当创建一个类的新实例时,__init__方法会被自动调用。
  2. 语法和参数
    • 它的第一个参数总是self,代表类的实例本身。在__init__方法内部,可以通过self来定义和初始化实例的属性。除了self之外,还可以有其他参数,这些参数用于接收在创建实例时传递的值。例如:
class MyClass:def __init__(self, parameter1, parameter2):self.attribute1 = parameter1self.attribute2 = parameter2
  • 这里的parameter1parameter2是在创建MyClass的实例时需要传递的参数,通过__init__方法,它们被赋值给了实例的属性self.attribute1self.attribute2

用途举例

  • 初始化实例属性:假设要创建一个表示矩形的类Rectangle,可以在__init__方法中初始化矩形的长和宽这两个属性。
class Rectangle:def __init__(self, length, width):self.length = lengthself.width = width
  • 当创建Rectangle类的实例时,就可以传入长和宽的值,这些值会被用来初始化实例的属性。例如rect = Rectangle(5, 3),这里5被赋值给rect.length3被赋值给rect.width
  • 执行其他初始化操作:除了初始化属性,__init__方法还可以用于执行其他一些在实例创建时需要完成的任务,比如打开文件、建立数据库连接等。不过需要注意的是,在__init__方法中尽量保持简洁,复杂的操作可以放在其他方法中。

class ProductData:def __init__(self, price, quantity):self.price = priceself.quantity = quantityself.highest_price = priceself.lowest_price = pricedef update_price(self, new_price):self.price = new_priceif new_price > self.highest_price:self.highest_price = new_priceelif new_price < self.lowest_price:self.lowest_price = new_pricedef get_total_value(self):return self.price * self.quantity# 示例使用
product = ProductData(10, 5)
print(f"初始价格: {product.price}")
print(f"初始数量: {product.quantity}")
print(f"初始最高价: {product.highest_price}")
print(f"初始最低价: {product.lowest_price}")product.update_price(15)
print(f"\n更新后的价格: {product.price}")
print(f"更新后的最高价: {product.highest_price}")
print(f"更新后的最低价: {product.lowest_price}")total_value = product.get_total_value()
print(f"\n总价值: {total_value}")

继承类

class Code_Tag:def __init__(self, code='0', name = '0', current_price=0):self.code_tag_dic = {'code' : code, # 标的代码'name' : name, # 标的名称'current_price' : 0, # 当前价格}class TradingCodeTag(Code_Tag):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.trade_operations = []  # 用于存储交易操作记录

这段代码定义了一个名为 TradingCodeTag 的类,它继承自 Code_Tag 类。下面是对这段代码的详细解释:

  1. 类定义

    class TradingCodeTag(Code_Tag):
    

    这里定义了一个新的类 TradingCodeTag,它继承自 Code_Tag 类。这意味着 TradingCodeTag 类将拥有 Code_Tag 类的所有属性和方法。

  2. 构造函数

    def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.trade_operations = []  # 用于存储交易操作记录
    

    这是 TradingCodeTag 类的构造函数。构造函数在创建类的实例时被调用。super().__init__(*args, **kwargs) 调用了父类 Code_Tag 的构造函数,确保父类的初始化逻辑被执行。然后,self.trade_operations = [] 创建了一个空列表 trade_operations,用于存储交易操作记录。

  3. 在Python中,*args 和 **kwargs 是用于处理可变数量参数的特殊语法。它们允许函数接受任意数量的位置参数(*args)和关键字参数(**kwargs)。

总结来说,TradingCodeTag 类是 Code_Tag 类的一个子类,它在继承父类属性和方法的基础上,增加了一个用于存储交易操作记录的列表 trade_operations。这个列表可以用来记录每次买入或卖出操作的详细信息。

*args、**kwargs

*args

  • *args 用于接收任意数量的位置参数,这些参数会被打包成一个元组(tuple)传递给函数。例如:

    def example_function(*args):for arg in args:print(arg)example_function(1, 2, 3, 4)
    

    输出:

    1
    2
    3
    4

**kwargs

  • **kwargs 用于接收任意数量的关键字参数,这些参数会被打包成一个字典(dictionary)传递给函数。例如:

    def example_function(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")example_function(name="Alice", age=30, city="New York")
    

    输出:

    name: Alice
    age: 30
    city: New York
    

*args、**kwargs

在类的构造函数中,*args 和 **kwargs 通常用于确保子类的构造函数能够接受父类构造函数所需要的所有参数。例如:

class ParentClass:def __init__(self, arg1, arg2):self.arg1 = arg1self.arg2 = arg2class ChildClass(ParentClass):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 子类的其他初始化逻辑

在这个例子中,ChildClass 的构造函数使用 *args 和 **kwargs 来接收任意数量的参数,并将它们传递给父类 ParentClass 的构造函数。这样,ChildClass 的实例就可以接受父类构造函数所需的所有参数,同时也可以添加自己的初始化逻辑。


http://www.mrgr.cn/news/83405.html

相关文章:

  • 深度学习的原理和应用
  • 排序的本质、数据类型及算法选择
  • Java Web开发进阶——Spring Security基础与应用
  • 关于智能个人生活助手的一些想法
  • [Unity]发包前遇到的坑之GridLayoutGroup
  • 易支付二次元网站源码及部署教程
  • RabbitMQ基础(简单易懂)
  • day06_Spark SQL
  • 【源码解析】Java NIO 包中的 ByteBuffer
  • 【Rust自学】11.7. 按测试的名称运行测试
  • Python|基于DeepSeek大模型,实现文本内容仿写(8)
  • MySql按年月日自动创建分区存储过程
  • 使用Struts2遇到的Context[项目名称]启动失败问题解决(Java Web学习笔记)
  • 《CPython Internals》阅读笔记:p96-p96
  • 20、Citrix 云桌面常见VDA注册问题汇总
  • HTTP 核心概念
  • 10.STM32F407ZGT6-内部温度传感器
  • 【论文+源码】一个基于Vue.js的MOBA类游戏攻略分享平台
  • Java SpringBoot + Vue + Uniapp 集成JustAuth 最快实现多端三方登录!(QQ登录、微信登录、支付宝登录……)
  • C++中 为什么要把基类指针指向子类对象?
  • Java 应用程序CPU 100%问题排查优化实战
  • 图像模糊度(清晰度)检测 EsFFT 算法详细分析
  • Java Web开发进阶——Spring Boot与Thymeleaf模板引擎
  • 计算机的错误计算(二百零八)
  • 一分钟学会文心一言API如何接入,文心一言API接入教程
  • 1.两数之和--力扣