本文将简要介绍火爆全网的NLP对话AI:ChatGPT的注册使用教程。
1、使用dl工具,使用全局模式,选us节点
2、打开Chrome浏览器无痕模式
3、访问 OpenAI ChatGPT 入口:https://chat.openai.com/auth/login
4、填写非国内邮箱地址
5、使用短信接收平台验证:https://sms-activate.org/
6、注册完成后,登录截图如下:
本文将简要介绍火爆全网的NLP对话AI:ChatGPT的注册使用教程。
1、使用dl工具,使用全局模式,选us节点
2、打开Chrome浏览器无痕模式
3、访问 OpenAI ChatGPT 入口:https://chat.openai.com/auth/login
4、填写非国内邮箱地址
5、使用短信接收平台验证:https://sms-activate.org/
6、注册完成后,登录截图如下:
MySQL SELECT 查询语句及各子句的执行顺序:
完
用代码来生成代码,或者说,用程序来生成程序,就叫元编程。Python能通过反射实现元编程。
与元编程相关的一个概念是元类。什么是元类呢,具体到Python,用来创建类的类,就叫元类。元类是制造类的工厂。
在Python中,一个普通类创建出来的东西是类的实例,实例是一个对象。而元类也是一种类,它创建出来的东西是另一个普通类,普通类也是一个对象(Python中一切皆对象),然后这个普通类,又可以创建出类的实例。所以说,元类是类的类。它们的构建过程如下图:
Python中:
1、所有非object类都继承自object类(包括type)
2、所有类的类型都是type(包括type、object、元类)
3、type类继承自object(符合第1句)
虽然type也继承自object,但是我们自己写的类,继承自object与继承自type,会有些不同。
type这个类,不仅可以获取Python中对象的类型,比如type(123),会告诉你123是int类型(int也是类)。
type也可以作为元类,来构建其他类。语法是:
type(name, bases, dict) -> a new type
返回一个新的类型
属性:这里表示类(或类的实例)中的变量与方法的统称。
所以搜索顺序包括:类的属性搜索顺序、类的实例的属性搜索顺序。
下面是所有魔术方法同时出现的情况下,类或实例的属性搜索顺序。
对于类,比如查找A.x。A是类,x是类的属性。
类属性的默认搜索顺序:A自己的x(即A的属性字典__dict__) ⟶ A的父类的x [1] ⟶ 父类的父类的x… ⟶ object的x
对于类的实例,比如查找a.x。a是A的实例,x是实例的属性。
实例的默认搜索顺序:a自己的x(即a的属性字典__dict__)⟶ a从父类的构造方法(__new__, __init__
)继承来的属性 ⟶ A自己的x ⟶ A的父类的x [1] ⟶ 父类的父类的x… ⟶ object的x
[1]:
如果A是单继承,直接不断向上找父类。如果A是多继承,由Python3的mro生成一个有序的继承列表,依次找父类。
与搜索顺序相关的魔术方法有:
1、反射相关的:__getattr__, __setattr__, __delattr__, __getattribute__
2、描述器相关的:__get__,__set__,__delete__
下面是所有魔术方法同时出现的情况下,类或实例的属性搜索顺序:
要讲清楚装饰器,首先要知道一些前置概念。下文涉及到这些概念的地方,会展开讲述。
装饰器是一种AOP(面向切面编程)的设计模式。
面向对象编程往往需要通过继承或组合依赖等方式调用一些功能,这样可能造成代码的重复,增加了耦合。
而AOP可以在需要的类或方法上切入,切入点可以增强功能,让调用者与被调用者解耦。
这种不修改原来的业务代码,给程序动态添加(或修改)功能的技术,就是装饰器。
装饰器可用于日志记录、监控、参数检查等地方。比如业务函数中不应该包含与业务无关的功能,那么可以构建一个logger装饰器,对业务函数增加日志功能。并且logger装饰器可以是通用的,需要日志功能的地方,都可以使用logger装饰器,达到复用的目的。
无参数装饰器:无参数装饰器实现的关键是“闭包”,即嵌套函数与自由变量。
带参数装饰器:带参数装饰器实现的关键是“柯里化”,多层嵌套函数可以实现柯里化。
在讲什么是闭包前,需要先讲一个概念:自由变量。什么是自由变量呢?
未在本地作用域中定义,就是出现在嵌套函数中,定义在某函数的外层函数的作用域中的变量,叫自由变量。
如果某函数(即内层函数)引用了外层函数的自由变量,这样就形成了闭包。
一个类中定义了如下一个或多个魔术方法,这个类的实例就是描述器:
__get__,__set__,__delete__
通常需要两个类来构建描述器:
如果类B的类属性x,指向另一个类A的实例。被指向的A的实例就是描述器对象。B.x是描述器,B也是描述器的属主(owner)。比如:
1 | class A: |
类属性的值,通常是一些已有类型的对象,比如字符串、列表等。
当使用了描述器,类属性就指向一个描述器对象,描述器通过三个魔术方法,可以自定义属性的行为。
下面的探讨主要针对Python3,在Python2中不一定适用。
Python的浮点数实现原理:
CPython实现有一个PyFloatObject的结构体,用来构造Python的浮点数类型:
typedef struct {
PyObject_HEAD # 这个对象包含:引用计数+对象类型,占8+8=16字节
double ob_fval; # 这个是存储浮点数的地方,Python的浮点数就是C的double,双精度
} PyFloatObject;
所以Python的浮点数类型占24字节:
引用计数+对象类型+双精度浮点数 = 8+8+8 = 24字节
不过Python3的整数长度无限,所以占字节数不定
用Python代码验证浮点数:
代码:
课程设计2
题目见 汇编语言 第四版 作者王爽 p312
这篇文章是《汇编语言 第四版》的完结篇。
1、vm虚拟机中安装win98se,以下称为win98
。
2、成功安装系统后,虚拟机添加一个新软盘(需要创建软盘映像.img文件)。
3、启动win98系统,将下文源码编译,然后执行程序(需要masm汇编器)。
4、关闭win98系统,在虚拟机中,设置软盘
为启动盘。
5、启动虚拟机,我们自己写的程序就能执行了。
如果用两个硬盘,即添加新硬盘代替软盘,然后设新硬盘为启动盘后,启动失败(暂不管此问题)!
软盘:第1扇区存放我们的引导程序,第2-3扇区存放主程序,实现4个功能。
硬盘1:是win98系统盘,第1扇区有mbr引导程序。
开机后,软盘为启动盘,加载我们自己的引导程序,执行引导程序,然后加载2-3扇区的主程序。
中断例程装载程序源码:
1 | ; 安装新的 7ch 中断例程,实现如下功能的子程序: |