Python 基础合集7:类和实例

2023-10-27

一、前言

本小节主要梳理类和实例的基本知识,包含类及其属性、方法的定义和调用,类的实例及其属性、方法的定义和调用,还介绍了3个魔法函数__init__()__str__()__repr__()和私有化变量的使用。

环境说明:Python 3.6、windows11 64位

二、类及其实例和对象相关的基本概念

2.1 类

类的定义:类是定义新类型的程序结构,里面有数据属性,以及用于操作数据属性的方法。类的方法和函数类似。
类的定义可以通过现实世界的类别来类比理解,像狗类、鸟类、鱼类、人类等。每一个类别都有一些普遍的特征,如狗粘人、鸟会飞、鱼会游、人会直立走
这些特征就好比类的属性和方法,属于类特有的一些特征。

2.1.1 创建一个类

创建一个类一般使用class关键字,语法如下:

# 定义一个Myclass类
class Myclass:
    pass

这是一个“光秃秃”的类,接下来给你加一些“枝干”——属性和方法。
类的属性类似变量,定义方式和变量的定义大同小异,通过[属性名]=值进行定义。如果是在类方法内部则需要再加上一个cls声明。
类的方法类似函数,定义方式和函数的定义大同小异,都是通过def关键字声明,不同的是类方法还需要通过@classmethod装饰器进行修饰,@classmethod改变了调用方法的方式,同时需要将类本身作为第一个参数,而不是实例(主要和后面讲的实例self做区分)。
示例如下:

# 定义My_class类
class My_class:
    my_name = 'Xindata'		   		# 定义类属性
    
    @classmethod
    def my_func1(cls):	    		# 定义类方法
        cls.my_eye = 'black'		# 定义类属性

常见装饰类的装饰器除了@classmethod,还有@staticmethod@staticmethod装饰的方法叫静态方法,它也会改变方法的调用方式,但是第一个参数不是特殊的值。静态方法类似普通的函数。由于不像@classmethod装饰的类方法的第一个参数是类本身,所以静态方法在定义类属性时,需要使用类名。

# 定义My_class类
class My_class:
    my_name = 'Xindata'		      # 定义类属性,属性名
    
    @classmethod
    def my_func1(cls):			  # 类方法,默认参数cls是类本身
        cls.my_eye = 'black'      # 定义类属性,cls.属性名
        
    @staticmethod
    def my_func2():               # 静态方法,无默认参数
        My_class.t_shirt = 'white'# 定义类属性,类名.属性名

以上都是在类内部的定义,在类外部也可以进行一些属性方法的定义

# 定义My_class类
class My_class:
    my_name = 'Xindata'		      # 定义类属性,属性名
    
    @classmethod
    def my_func1(cls):			  # 类方法,默认参数cls是类本身
        cls.my_eye = 'black'      # 定义类属性,cls.属性名
        
    @staticmethod
    def my_func2():               # 静态方法,无默认参数
        My_class.t_shirt = 'white'# 定义类属性,类名.属性名
        
My_class.hair = 'black'           # 定义类的属性

@classmethod
def func4(cls):                   # 被@classmethod装饰过的函数
    cls.skill_1 = 'Python'
    print(self.skill_1)
My_class.my_func4 = func4         # 定义类方法

2.1.2 类的调用

注意,在类方法和静态方法中定义的类属性,必须调用类方法之后才能调用相关的属性,否则会报错(可以把一下代码第17和19行的方法调用注释掉,重跑试试)。
类的属性和方法的调用都是通过类名.然后加上对应的名称。

# 类的定义
class My_class:
    my_name = 'Xindata'
    
    @classmethod
    def my_func1(cls):
        cls.my_eye = 'black'
        print(cls.my_eye)
        
    @staticmethod
    def my_func2():
        My_class.t_shirt = 'white'
        print(My_class.t_shirt)

My_class.hair = 'black'

@classmethod
def func4(cls):
    cls.skill_1 = 'Python'
    print(cls.skill_1)
My_class.my_func4 = func4 
        
# 类的调用
print(My_class.my_name)    # 调用属性my_name
My_class.my_func1()        # 调用方法my_func1()
print(My_class.my_eye)     # 调用属性my_eye,须先调用my_func1()
My_class.my_func2()        # 调用方法my_func2()
print(My_class.t_shirt)    # 调用属性t_shirt,须先调用my_func2()
print(My_class.hair)       # 调用属性hair
My_class.my_func4()        # 调用方法my_func4()
print(My_class.skill_1)    # 调用属性skill_1

2.2 类的实例

2.2.1 创建类的实例

实例的属性跟类的属性非常相似,不同的是对象不一样,在类中,一般使用self.属性名创建实例对象;而实例方法的创建更加简单,不需要装饰器修饰,直接定义,并使用类的实例对象self作为第一个参数。
同样地,在类外部也可以创建实例的属性和方法,只不过创建属性前需要先对类进行实例化,实例化调用可以通过类名()实现。
具体例子如下:(作为对比,保留以上代码)

# 类的定义
class My_class:
    my_name = 'Xindata'
    
    @classmethod
    def my_func1(cls):
        cls.my_eye = 'black'
        print(cls.my_eye)
        
    @staticmethod
    def my_func2():
        My_class.t_shirt = 'white'
        print(My_class.t_shirt)

    def my_func3(self):           # 创建实例方法
        self.hobby = 'writting'   # 创建实例属性
        print(self.hobby)

My_class.hair = 'black'

@classmethod
def func4(cls):
    cls.skill_1 = 'Python'
    print(cls.skill_1)
My_class.my_func4 = func4 

# 创建实例属性和方法
my_eg = My_class()     # 类的实例化,实例my_eg拥有类的所有属性和方法
my_eg.height = 175

def func5(self):
    self.skill_2 = 'SQL'
    print(self.skill_2)
My_class.my_func5 = func5 # 注意这里还是My_class,而不是my_eg

注:**cls****self**是习惯用法,改用其他的参数名也可以,重点是作为首位参数。

2.2.2 实例化调用

实例化之后,类的实例对象都拥有类的相同属性和方法,可以通过实例对象进行调用,类就相当于一个模板,每个实例都是它的复刻版本。在调用的实例方法内部的属性,同样需要先调用方法。
实例可以调用类的属性和方法,但是类不能调用实例的属性和方法。如下第47~51行,注释掉代码运行时会报错。

# 类的定义
class My_class:
    my_name = 'Xindata'
    
    @classmethod
    def my_func1(cls):
        cls.my_eye = 'black'
        print(cls.my_eye)
        
    @staticmethod
    def my_func2():
        My_class.t_shirt = 'white'
        print(My_class.t_shirt)
        
    def my_func3(self):           
        self.hobby = 'writting'   
        print(self.hobby)

My_class.hair = 'black'

@classmethod
def func4(cls):
    cls.skill_1 = 'Python'
    print(cls.skill_1)
My_class.my_func4 = func4 

# 创建实例属性和方法
my_eg = My_class()        # 实例化调用类,实例拥有类的所有属性和方法
my_eg.height = 175

def func5(self):
    self.skill_2 = 'SQL'
    print(self.skill_2)
My_class.my_func5 = func5 

# 类的调用
print(My_class.my_name)
My_class.my_func1()    
print(My_class.my_eye) 
My_class.my_func2()    
print(My_class.t_shirt)
print(My_class.hair)   
My_class.my_func4()       
print(My_class.skill_1)  

# 实例的属性和方法不属于类,类不能对其进行调用
# My_class.my_func3()        # 报错,调用类的实例方法my_func3()
# print(My_class.hobby)      # 报错,调用类的实例属性hobby
# print(My_class.height)     # 报错,调用类的实例属性
# My_class.my_func5()        # 报错,调用类的实例方法my_func5()
# print(My_class.skill_2)    # 报错,调用类的实例属性

# 如果类需要对相关的实例进行调用,需要传入类的实例给到参数self
# my_eg = My_class()        # 上文已实例化,直接使用
My_class.my_func3(my_eg)
print(my_eg.hobby)
print('-----------------------')
# 类的实例化,全部调用一遍
# my_eg = My_class()        # 上文已实例化,直接使用
print(my_eg.my_name)      # 调用的实例对象属性my_name
my_eg.my_func1()          # 调用的实例对象方法my_func1()
print(my_eg.my_eye)       # 调用的实例对象属性my_eye,须先调用my_func1()
my_eg.my_func2()          # 调用的实例对象方法my_func2()
print(my_eg.t_shirt)      # 调用的实例对象属性t_shirt,须先调用my_func2()
my_eg.my_func3()          # 调用的实例对象方法my_func3()
print(my_eg.hobby)        # 调用的实例对象属性hobby,须先调用my_func3()
print(my_eg.hair)         # 调用的实例对象属性hair
my_eg.my_func4()          # 调用的实例对象方法my_func4()
print(my_eg.skill_1)      # 调用的实例对象属性skill
print(my_eg.height)       # 调用的实例对象属性height
my_eg.my_func5()          # 调用的实例对象方法my_func5()
print(my_eg.skill_2)      # 调用的实例对象属性skill

如果要修改实例化属性可以在实例化之后进行重新赋值;
如果要修改方法的功能,可以重新定义一个函数,然后通过上述my_func5的方式进行修改。
具体例子如下:
由执行结果可以看出,给方法重新赋值前的方法是来自于类内部的my_func3,赋值后变成了func6,说明赋值成功了,相关的功能也变成了赋值后的方法的功能。

# 类的定义
class My_class:
    my_name = 'Xindata'
        
    def my_func3(self):           
        self.hobby = 'writting'   
        print(self.hobby)

def func6(self):
    self.hobby = 'writting' 
    print('My hobby is %s'%self.hobby)


my_eg = My_class()        # 实例化调用类
print(my_eg.my_name)      # 调用属性my_eg.my_name
my_eg.my_name = 'Xin学数据'# 给my_name重新赋值
print(my_eg.my_name)      # 再次调用my_eg.my_name

my_eg.my_func3()          # 调用类的实例方法my_func3()
print(my_eg.my_func3)
My_class.my_func3 = func6 # 重新给my_func3()赋值
my_eg.my_func3()          # 再次调用my_func3()
print(my_eg.my_func3)

# 结果为:
# Xindata
# Xin学数据
# writting
# <bound method My_class.my_func3 of <__main__.My_class object at 0x0000020FAD8D2880>>
# My hobby is writting
# <bound method func6 of <__main__.My_class object at 0x0000020FAD8D2880>>

2.2.3 魔法方法

在python中方法名诸如__xxx__()的,都有特殊的功能,因此被叫做“魔法”方法。本小结主要讲三个魔法方法:__init__()__str__()__repr__()

每次要使用实例方法的属性都要调用对应的方法才能使用,有没有实例化类之后就可以直接使用的呢?有,这就是接下来上场的函数,叫初始化函数:__init__()

基本格式如下,由 init 左右两边加双下划线组成。

class A():
    def __init__(self):
        self.name = 'Xindata'
        print('执行初始化函数。')
a=A()
print(a.name)
# 结果为:
# 执行初始化函数。
# Xindata

初始函数的特性之一是当对类进行实例化调用的时候,该函数会自动执行,无须额外调用
利用这个特性,在编写习惯上,我们会在初始化函数内部完成类实例属性的创建,为类实例属性设置初始值,这样类中的其他方法就能直接、随时调用。

class A():
    def __init__(self):
        self.name = 'Xindata'
        print('执行初始化函数。')
        
    def my_func1(self):
        print(self.name)
a=A()
a.my_func1()
# 结果为:
# 执行初始化函数。
# Xindata

初始函数带除了self之外的参数时,在类实例化调用时,需要进行传参。
比如我将'Xindata'作为初始函数的参数name的参数值进行传递,然后将参数name再赋值给类实例属性self.name,最后在调用my_func1()函数时进行打印。

class A():
    def __init__(self,name):
        self.name = name
        print('执行初始化函数。')
        
    def my_func1(self):
        print(self.name)
a=A('Xindata')
a.my_func1()
# 结果为:
# 执行初始化函数。
# Xindata

初始函数的特性二:不return。即没有返回值。
如下代码会报错。

class A():
    def __init__(self,name):
        self.name = name
        print('执行初始化函数。')
        return self.name      # 加上return返回self.name,结果报错

a=A('Xindata')

如果需要返回值,怎么办?可以通过__str__()函数。
__str__()函数也是调用即执行。返回值可以在打印实例的时候看到相关的结果(如下,打印结果为Xindata)。但是当不通过打印,而是通过测试环境返回实例a,或者在Jupyter notebook直接写a(效果等同于测试环境返回a),返回的结果确是<__main__.A at 0x290f383a6d0>
这个区别主要是用于面向用户和测试者或开发者返回不同的内容,打印出来的内容用于呈现给用户,而测试环境返回的内容用于呈现给测试者或开发者。

class A():
    def __init__(self,name):
        self.name=name
        print('执行初始化函数。')
    def __str__(self):
        return self.name

a=A('Xindata')
print(a)
a
# 结果为:
# 执行初始化函数。
# Xindata
# >>><__main__.A at 0x290f383a6d0>

image.png
如果要使得打印和测试环境返回的结果都一样,可以通过__repr__()函数来实现,具体有两种方法:

  • 方法一:直接加上__repr__ = __str__
  • 方法二:只定义__repr__()函数
# 方法一
class A():
    def __init__(self,name):
        self.name=name
        print('执行初始化函数。')
    def __str__(self):
        return self.name
    __repr__ = __str__
    
a=A('Xindata')
print(a)
a
# 方法二
class A():
    def __init__(self,name):
        self.name=name
        print('执行初始化函数。')
    def __repr__(self):
        return self.name
    
a=A('Xindata')
print(a)
a

# 结果都是:
# 执行初始化函数。
# Xindata
# >>>Xindata

image.png
如果要使得打印和测试环境返回的结果都不一样,而且要进行自定义,则需要分别定义__str__()函数和__repr__()函数。

class A():
    def __init__(self,name):
        self.name=name
        print('执行初始化函数。')
    def __str__(self):
        return self.name
    
    def __repr__(self):
        return 'test: %s.'%self.name
    
a=A('Xindata')
print(a)
a
# 结果是:
# 执行初始化函数。
# Xindata
# >>>test: Xindata.

image.png
在查看__str__()函数和__repr__()函数返回的内容的时候,还可以直接使用其对应的方法str()repr(),具体如下:

class A():
    def __init__(self,name):
        self.name=name
        print('执行初始化函数。')
    def __str__(self):
        return self.name
    
    def __repr__(self):
        return 'test: %s.'%self.name
    
a=A('Xindata')
print(str(a))
print(repr(a))

image.png

2.2.4 私有化变量

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

class A():
    def __init__(self,name):
        self.__name=name
        print('执行初始化函数。')
    def my_func1(self):
        print(self.__name)
a = A('Xindata')
a.my_func1()         # 正常执行
print(a.name)        # 报错

如果外部需要获取到内部的属性name,可以通过写一个方法(如下get_name()),提供一个接口,给到外部调用。

class A():
    def __init__(self,name):
        self.__name=name
        print('执行初始化函数。')
    def my_func1(self):
        print(self.__name)
    def get_name(self):
        return self.__name
a = A('Xindata')
a.my_func1()         # 正常执行
name = a.get_name()
print(name)

2.2.5 拓展

通过类调用类的实例方法。
执行以下代码,会返回一个错误:

TypeError: get_name() missing 1 required positional argument: ‘self’

没有给self传参,那是不是给self传递一个参数就可以了呢?(是的!)还有要传什么参数呢?(self是类的实例,所以传递的参数应该也是类的实例,如下代码最后一行给self传递类实例A('Xindata'))。

class A():
    def __init__(self,name):
        self.name = name
        print('执行初始化函数。')
    def my_func1(self):
        print(self.name)
    def get_name(self):
        return self.name
A.get_name()

# A.get_name(A('Xindata'))

2.3 对象

对象是一个比较广义的概念。在现实世界中,随处可见的一个事物,比如某一棵大树、某一颗小草,就是对象。在Python中,对象是某个类的某一个具体实例,它包含类中的属性和方法。
在2.2 中讲的类的实例,它就是一种类的实例化对象。
类是对象的模板,描述不同对象的共同特征或行为,而对象是类的具体实例,这些实例都拥有类的所有特征和行为(即属性和方法)。

三、小结

知识点比较琐碎和繁杂,通过思维导图梳理一下:
类和实例.png




<下节预告:类的继承和多态>


- End -

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 基础合集7:类和实例 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 《Windows server 2019操作系统》搭建各种服务器综合运用

    搭建域服务器 要求主域名为wgzj com IP地址为192 168 1 200 主机名为sever 搭建DNS服务器 并创建正向查找区域和反向查找区域 搭建FTP服务器 主目录为C wwwroot 搭建Web服务器 主目录为C wwwro
  • 单点登录的简单实现

    1 什么是单点登陆 单点登录 Single Sign On 简称为 SSO 是目前比较流行的企业业务整合的解决方案之一 SSO的定义是在多个应用系统中 用户只需要登录一次就可以访问所有相互信任的应用系统 较大的企业内部 一般都有很多的业务支
  • 机器学习——高斯朴素贝叶斯 Gaussian naive bayes

    问 高斯朴素贝叶斯假设离散特征的取值符合高斯分布 答 错误 高斯朴素贝叶斯假设连续特征的取值符合高斯分布 而不是离散特征 对于离散特征 通常使用多项式朴素贝叶斯或伯努利朴素贝叶斯进行分类 在 sklearn 库中 基于贝叶斯定理的算法集中在
  • win10 自带的远程桌面控制 ubuntu,不是补全

    win10 远程桌面控制ubuntu tab 不能补全 的解决方案 默认 tab 是窗口切换功能 方法有两个 在ubuntu中或者远程桌面中 编辑 config xfce4 xfconf xfce perchannel xml xfce4
  • TCP/IP详解学习笔记1

    为什么会有TCP IP协议 在世界上各地 各种各样的电脑运行着各自不同的操作系统为大家服务 这些电脑在表达同一种信息的时候所使用的方法是千差万别 就好像圣经中上帝打乱了各地人的口音 让他们无法合作一样 计算机使用者意识到 计算机只是单兵作战
  • mciSendString的介绍

    转载至 http blog sina com cn s blog 149e9d2ec0102wzcn html 使用MCI API 源文件中需要包含头文件Mmsystem h 在Project gt Settings gt Link gt
  • Windows 10 自带录制工具

    从知乎上学来的 Windows 10上自带的游戏录制工具 按Win G呼出 可录制游戏和任何一个桌面程序 可以截屏 不能控制录制的质量 录制出来的视频大小适中 只能录制一个程序 切换程序会导致录制停止 输出格式是mp4 视频编码H 264
  • sqlplus连接、登录命令大全(选择实例登录、连接远程数据库实例等等)

    1 默认实例登录 sqlplus username password 如 sqlplus tas yn tas yn 2 选择实例登录 sqlplus username password net service name 如 sqlplus
  • vue 获取微信定位经纬度,并调用高德地图解析出详细地址

    第一步 安装weixin js sdk 命令 npm i S weixin js sdk 或者 npm install weixin js sdk 第二步 在需要的地方引用 import wx from weixin js sdk 第三步
  • 《C和指针》笔记27:递归

    递归所需要的两个特性 存在限制条件 当符合这个条件时递归便不再继续 每次递归调用之后越来越接近这个限制条件 这里没有用计算阶乘和菲波那契数列的例子说明递归 作者指出前者递归并没有提供任何优越之处 而后者效率之低是非常恐怖的 下面程序的目的是
  • matlab中more_sols,薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算最新章节_薛定宇著_掌阅小说网...

    2 4 联立方程组的精确求解 前面介绍过 利用图解方法只能求出给定方程的实数根 并不能求出方程的复数根 具体例子可以参见例2 12 另外 如果联立方程有多个实数根 则只能用图形方法绘制出根所在的位置 并不能直接得出根的具体值 需要逐个根进行
  • Java 获取文件Jar包中读取文件

    本文介绍java多种方式从classpath url以及jar中读取文件 文章目录 各种路径获取方式 IDEA中输出的结果 执行JAR包所输出的结果 外部类读取Jar包中的配置文件 判断 是class文件执行还是jar文件执行 各种路径获取
  • 如何画出一张优秀的软件文档视图

    技术传播的价值 不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径 加速业务的上线速率 也体现在优秀工程师的工作效率提升 产品性能优化和用户体验改善等经验方面的分享 以提高我们的专业能力 接下来 阿里巴巴技术专家三画 将分享自己和
  • 用户注意到用户计算机中千兆位网卡,网络设备互联考试习题

    1 下面那种网络互连设备和网络层关系最密切 C A 中继器 B 交换机 C 路由器 D 网关 2 下面那种说法是错误的 B A 中继器可以连接一个以太网UTP 线缆上的设备和一个在以太网同轴电缆上的设备 B 中继器可以增加网络的带宽 C 中
  • Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常采用串口进行通讯 Node js中可以使
  • VSCode查找和替换正则表达式转义字符整理

    你也可以通过我的独立博客 www huliujia com 获取本篇文章 使用VSCode进行查找 替换时 经常需要用到正则表达式 一段时间不用就忘了 每次要用的时候都要耽误很多时间去查找 所以整理了一份很全的放在这里 这个其实是 NET使
  • Telnet找不到时的安装(启动)教程 (Windows)

    目录 前言 启动Windows功能 Step1 打开控制面板 Step2 点击程序 注意 不是卸载程序 Step3 点击 启动或关闭Windows功能 Step4 勾选 Telnet客户端 Step5 点击确认 等待启动 Step6 启动完
  • java: 非法字符: ‘\ufeff’

    导入项目运行后会发现如下错误 java 非法字符 ufeff java 需要class interface或enum 原因 编码问题 将UTF 8换成GBK 然后再将GBK转换为UTF 8即可
  • 2.4 等比数列

    学习步骤 如果我要学习等比数列 我会按照以下步骤进行学习 定义和性质 首先了解等比数列的定义和性质 包括公比 首项 通项公式 求和公式等 例题练习 通过练习一些简单的例题来理解等比数列的概念和性质 并能够灵活应用公式解决问题 深入理解 通过
  • Python 基础合集7:类和实例

    一 前言 本小节主要梳理类和实例的基本知识 包含类及其属性 方法的定义和调用 类的实例及其属性 方法的定义和调用 还介绍了3个魔法函数 init str repr 和私有化变量的使用 环境说明 Python 3 6 windows11 64