Python记3(类与对象、路径、文件、异常处理、抽象基类

2023-11-04

1、Class

  • 对象是类的实例

1.1、声明类:

class 类名: 类
  属性=初值
  方法(self,参数2,参数3…)

1.2、类的特殊属性:

name 类的名字(字符串)
doc 类的文档字符串
bases 类的所有父类组成的元组
dict 类的属性组成的字典
module 类所属模块
class 类对象的类型

1.3、创建对象:

class Person():     #创建类
    money=10000     #类属性,所有实例共同享有
    def say_hello(self)
        print("Hello!")

x=Person()   #创建对象
y=Person()
z=Person()   #此时print(x.money)以及y、z的money均输出10000

x.major="computer"   #创建对象后,动态添加对象特有的属性,Person类、y、z都没有此属性

Person.money=99  #此时若print(x.money)或者y,z的money,输出都是99

x.money=88    #x创建了一个实例属性,已经与Person的money无关了
              #print(x.money)返回88,而y,z的money还是99
del y         #删除对象

对象有3个特性:身份(类似于内存地址),类型,值

# 查看id()
print(id(1))
a = 1
print(id(a))
# 输出
4396235880
4396235880

1.4、构造函数和析构函数

init(self,参数2,参数3,…) #构造函数
del() #析构函数,可省略

class Person():     #创建类
    def __init__(self,money):
        self.money=money 
    def say_hello(self)
        print("hello, money=",self.money)

1.5、类方法和静态方法、类变量与实例变量

  • 类方法和静态方法
#类方法:      
class 类名:
    @classmethod   
    def 类方法名(cls,...):    #通过类名、对象名调用,可以访问类属性,不能访问对象属性
        方法体
        
#静态方法:
class 类名:
    @staticmethod
   def 类方法名():    #通过类名、对象名调用,不能直接访问类属性和实例属性但可以通过类名引用类属性
       方法体        
  • 类变量与实例变量
class A:
    i = 1               # 类变量
    def __init__(self, x, y):   # self 就是实例
        self.x = x      # 实例变量
        self.y = y
        
a = A(2, 3)
print(a.x, a.y, a.i)    # 访问顺序:先在实例变量中查找,找不到再查询类变量

A.i = 4
print(a.i)              # 输出:4,因为上面A.i = 4

a.i = 5                 # 当使用 "实例.类变量" 赋值,会新建一个变量,独立于类变量A.i
A.i = 6
print(a.i, A.i)         # 输出:5 6,当a.i=5修改a的类变量,会新建一个实例变量a.i,优先访问实例变量a.i

b = A(7, 8)
print(b.i)              # 输出:6,而不是1,因为类变量时共享的,而上面修改了类变量

1.6、公有、保护、私有变量:通过下划线数量和位置区分

xxx 公有变量
__xxx 私有变量,不允许类的外部访问
_xxx 保护变量,允许本身和子类访问
xxx 专有变量,方法

1.7、继承

class 子类名(父类名):
    类属性=初值
    方法(参数列表)

1.7.1、多继承MRO(Method Resolution Order)

MRO是用来描述多继承中查找父类的顺序。Python3中使用“C3算法”来确定查找父类的顺序。

下面2种搜索属性的方法(深度/广度搜索),都会有不合理的地方。
请添加图片描述

在Python2.2之前,类的继承是经典类的继承方式,若不显示继承object类,则不会继承object类。而Python3之后这种经典类的继承方式已经没有了。Python3之后使用了“C3算法”的搜索方法。

2、相对/绝对路径、判断路径

C:\A\B是绝对路径,如果当前路径是C:\A,则 \B是相对于当前目录,则表示C:\A\B 。而 ..\D是相对路径,相对于当前目录的父目录,则表示 C:\D

2.1、常用操作路径

符号、函数 说明 例子
‘\\’ In [36]: os.path.exists(‘D:\\Users\\11137042’)
Out[36]: True
‘r’ In [37]: os.path.exists(r’D:\Users\11137042’)
Out[37]: True
‘/’ python路径可以用’/‘
’/'也表示从根目录开始
In [75]: os.path.exists(‘D:/Users/11137042’)
Out[75]: True
In [76]: os.listdir(‘/Users/11137042’) == os.listdir(‘D:/Users/11137042’)
Out[76]: True
‘./’ 表示从当前目录开始 In [77]: os.listdir(‘./dir1’)
Out[77]: [‘dir2’]
‘../’ 表示从上一级目录开始 In [78]: os.listdir(‘../Desktop/dir1/’)
Out[78]: [‘dir2’]
os.getcwd() 返回当前目录,cwd:current working directory(当前在桌面) In [68]: os.getcwd()
Out[68]: ‘D:\Users\11137042\Desktop’
os.path.exists(path)
os.path.isfile(path)
os.path.isdir(path)
判断文件(夹)是否存在 In [69]: os.path.exists(r’D:\Users\11137042\Desktop\dir1\dir2\text2.txt’) # 文件(夹)
Out[69]: True
In [81]: os.path.isfile(‘./dir1/text1.txt’) # 文件
Out[81]: True
In [82]: os.path.isdir(‘./dir1/’) # 文件夹
Out[82]: True
os.path.isabs(path) 判断path是否是绝对路径(注意相对路径带’.',如.\或..\) In [73]: os.path.isabs(r’D:\Users\11137042\Desktop\dir1’),os.path.isabs(‘.\dir1’)
Out[73]: (True, False)
os.path.abspath(“./”) 相对路径改为绝对路径
os.listdir(path) 获取目录path中的文件及目录 In [84]: os.listdir(‘./dir1’)
Out[84]: [‘dir2’, ‘text1.txt’]
os.makedirs(path) 创建子目录 In [85]: os.makedirs(‘./dir_test1/dir_test2’)
os.rmdir(path)
os.remove(path)
删除子目录
删除文件
In [86]: os.rmdir(‘./dir_test1/dir_test2’) # 这里只删除了dir_test2,没有删除dir_test1
sys.argv[0] 获取脚本当前路径 print(sys.argv[0]) # 输出:D:\Users\11137042\Desktop\tkinterTest.py
os.path.normpath() 路径规范化输出 In [41]: os.path.normpath(r"D:\Users\11137042\Desktop\test")
Out[41]: ‘D:\\Users\\11137042\\Desktop\test’

2.2、获取桌面路径

• 获取桌面路径:前两个方法是通过注册表来获取当前windows桌面绝对路径

方法 示例
winreg.OpenKey In [10]: import winreg # Python3以前是: _winreg
In [11]: key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
In [12]: winreg.QueryValueEx(key, "Desktop")[0].replace("\", "/")
Out[12]: "D:/Users/11137042/Desktop"
win32扩展方法1 In [14]: import win32api,win32con
In [15]: key =win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",0,win32con.KEY_READ)
In [16]: win32api.RegQueryValueEx(key,"Desktop")[0].replace("\", "/")
Out[16]: "D:/Users/11137042/Desktop"
win32扩展方法2 In [21]: from win32com.shell import shell, shellcon
In [22]: ilist =shell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_DESKTOP)
In [23]: shell.SHGetPathFromIDList(ilist)
Out[23]: b"D:\Users\11137042\Desktop"
此法在用户改变了桌面路径后,可能会失效 In [24]: import os
In [25]: os.path.join(os.path.expanduser("~"), "Desktop").replace("\\", "/")
Out[25]: "D:/Users/11137042/Desktop"
获取当前pc的主机名,一般情况下,windows系统启用第一次开始时会设置一个电脑名,这个电脑名会出现在C盘下的用户目录下,如我的电脑名是‘11137042’,那么会有一个目录路径:C:\Users\11137042,这时候我的桌面路径就是:C:\Users\11137042\Desktop(问题就是如果你随后修改了电脑名,这个方法就不生效了),代码表现的跟第四种很像 下面实测失效了:
In [36]: import socket, os
In [37]: hostname = socket.gethostname() #socket.getfqdn(socket.gethostname())
In [38]: basepath = os.path.join("C:\Users\", hostname)
In [39]: os.path.join(basepath, "Desktop").replace("\", "/")
Out[39]: "C:/Users/YF-11137042/Desktop"

3、文件

打开(创建)文件:open(文件名,访问模式)

语法:open(name[, mode[, buffering]])

属性 说明
name 一个包含了你要访问的文件名称的字符串值。
mode mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。
buffering 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

访问模式:

详细参考:https://www.runoob.com/python/python-func-open.html

命令 模式 文件不存在时 文件指针
‘r’ 读取模式,以只读方式打开文件 报错 文件开头
‘w’ 写入模式,以写入方式打开文件,会覆盖已经存在的文件 创建 文件开头
‘x’ 异或模式,文件存在则报错(防止覆盖) 创建 文件开头
‘a’ 追加模式,以写入方式打开文件 创建 在末尾追加写入
‘t’ 文本模式(默认)

拓展模式:

命令 说明
‘+’ plus,以可读写的方式打开文件
‘b’ bytes,以二进制模式打开文件

可以组合使用:
w,r,a,x
wb,rb,ab,xb
w+,r+,a+,x+
wb+,rb+,ab+,xb+

  • 读取文件:
文件对象.read()     读取整个文件,换行符以\n显示 
文件对象.readline()   每次读文件一行
指定字节数:文件对象.read(字节数) 、文件对象.readline(字节数),字节数是从"文件指针"开始计数的:
# read()
In [45]: fp = open("test.txt", mode='r', encoding='utf-8')     # 以只读模式打开
In [46]: fp.read()
Out[46]: 'The Zen of Python, by Tim Peters\n\nBeautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nSpecial cases aren’t special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nThere should be one-- and preferably only one --obvious way to do it.\nAlthough that way may not be obvious at first unless you’re Dutch.\nNow is better than never.\nAlthough never is often better than right now.\nIf the implementation is hard to explain, it’s a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nNamespaces are one honking great idea – let’s do more of those!\n'
In [47]: fp.close()

In [51]: fp = open("test.txt", mode='r', encoding='utf-8')     # 以只读模式打开
In [52]: fp.read(10)
Out[52]: 'The Zen of'
In [53]: fp.close()

# readline()
In [60]: fp = open("test.txt", mode='r', encoding='utf-8')     # 以只读模式打开
In [61]: fp.readline(10)
Out[61]: 'The Zen of'
In [62]: fp.readline()
Out[62]: ' Python, by Tim Peters\n'
In [63]: fp.readline()
Out[63]: '\n'
In [64]: fp.close()

# write()
In [67]: fp = open("test.txt", mode='w', encoding='utf-8')     # 以写模式打开
In [68]: fp.write("hello world")
Out[68]: 11		# 返回写入的字符数
In [69]: fp.close()
In [70]: with open("test.txt", 'r') as fp:
    ...:     print(fp.read())
hello world


# r+
In [78]: # test.txt原来内容:hello world!
    ...: with open("test.txt", 'r+') as fp:
    ...:     fp.write("123")
    ...:     print(fp.read())
    ...: with open("test.txt", 'r+') as fp:
    ...:     print(fp.read())
    ...:     
lo world!
123lo world!
  • 关闭文件: 文件对象.close()
    python有垃圾回收机制,会自动关闭不再使用的文件,但最好写入后马上关闭,防止文件缓存而未写入硬盘时出现意外

4、异常处理

try:
    语句块
except 异常1 as 错误原因   #"as 错误原因"可以省略
    处理代码块
except 异常2 as 错误原因
    处理代码块
...
finally:     #无论是否异常,最后都会执行,常用于释放资源等等
     语句块
try:
	f=open('c:/test.txt)
except IOError as e:
	print(e)
finally:
	f.close()
#如果出现异常,则显示:
[Errno 2]No such file or directory:'c:/test.txt'     
  • Python中常见的异常:
IOError            输入输出异常(基本上是无法打开文件)
ImportError        无法导入模块或包(基本上是路径问题或名称错误)
Indentation Error  缩进错误;代码没有正确对齐
NameError          没有声明、或初始化对象
KeyError           试图访问字典里不存在的键
AttributeError     试图访问一个对象没有的属性
TypeError          类型不匹配
ValueError         传入一个调用者不期望的值,即使值的类型是正确的
NotImplementedError 所在的方法没有被子类重写,但是调用了就会报错

Python中的异常类是继承关系的,而Exception是所有非系统退出类异常类的基类,可以通过捕获它来避免程序遇到错误而退出:(但不建议这么做,有些错误难以预料)

try:
    语句块
except Exception as e:
	异常处理语句块    

在这里插入图片描述

5、抽象基类

  • 抽象基类:

1、所有继承抽象基类的类都必须实现抽象基类中特定的方法
2、抽象基类无法实例化

  • Python是动态类型的语言,它的变量是“没有类型”,变量名仅是一个符号,不需要指明变量的类型(因而不能编译时检查变量类型,只能在运行时才能发现语言的错误)
  • 类中实现了某种魔法函数,它的对象就是某种指定的类型,这种特性也被称为协议

5.1、什么时候使用抽象基类

其实并不是十分推荐使用抽象基类,不容易理解,用的也比较少。

5.1.1、我们希望在某些情况之下判断某个对象的类型:

from collections.abc import Sized

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list
        
    def __len__(self):
        return len(self.employee)
    
    
com = Company(["bobby1", "bobby2"])

# 判断 Company类 的类型,更趋向于判断“该类是否属于某一类型”(isinstance),而不是判断“类中是否有某种方法”(hasttr)
print(hasattr(com, "__len__"))		# 输出True
print(isinstance(com, Sized))       # 输出True,判断对象com 是否是 类型Sized,这里是 虚基类 来实现的

com没有继承Sized,但是用isinstance(com, Sized)返回True!!主要是魔法函数__subclasshook__()的_check_methods(C, “__len__”)判断Company类是否实现了__len__()方法。

5.1.1.1、 关于Sized源码

  • typing.py:
    Sized = _alias(collections.abc.Sized, 0) # Not generic.

  • collections\abc.py:
    from _collections_abc import *

  • _collections_abc.py:
class Sized(metaclass=ABCMeta):		# ABCMeta后面元类编程会有

    __slots__ = ()

    @abstractmethod					# 可见使用虚基类实现
    def __len__(self):
        return 0

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Sized:
            return _check_methods(C, "__len__")
        return NotImplemented
  • 在Python中已经实现了一些通用的抽象基类,让我们可以了解Python数据的一些接口,它是放在collections.abc模块中:
# collections/abc.py文件:
from _collections_abc import *		# 调用 _collections_abc
from _collections_abc import __all__

# _collections_abc.py文件:
from abc import ABCMeta, abstractmethod
import sys

__all__ = ["Awaitable", "Coroutine",
           "AsyncIterable", "AsyncIterator", "AsyncGenerator",
           "Hashable", "Iterable", "Iterator", "Generator", "Reversible",
           "Sized", "Container", "Callable", "Collection",
           "Set", "MutableSet",
           "Mapping", "MutableMapping",
           "MappingView", "KeysView", "ItemsView", "ValuesView",
           "Sequence", "MutableSequence",
           "ByteString",
           ]
# 后面省略。。。

上面__all__列表中都是抽象基类,例如"Sized"(上文也有它源码),这些抽象基类很多都实现了__subclasshook__()方法 。

5.1.1.2、关于isinstance()

isinstance除了上面会用抽象基类判断子类,还会找到继承链来进行判断,而type()不能判断某个对象的类型是否继承自某个父类。

class A:
    pass

class B(A):
    pass

b = B()

print(type(b))              # 输出:<class '__main__.B'>
print(type(b) is B)         # 输出:True

print(type(b) is A)         # 输出:False,is相当于是判断函数的id(),type(b)相当于是模板类B
print(isinstance(b, A))     # 输出:True,判断继承的类型用isinstance,而不是type

5.1.2、设计一个抽象基类,使得其子类必须实现某些方法:

当子类没有重写抽象基类的方法,两种检测方法:
初始化对象不报错,函数调用时才报错

class FatherClass():
    def fun(self):
        raise NotImplementedError

class SonClass(FatherClass):
    pass
    
obj = SonClass()        # 创建对象时不会报错
obj.fun()               # 调用fun函数就会报错

# 报错:
Traceback (most recent call last):

  File "C:\Users\ZHUIAO\Desktop\untitled1.py", line 9, in <module>
    obj.fun()

  File "C:\Users\ZHUIAO\Desktop\untitled1.py", line 3, in fun
    raise NotImplementedError

NotImplementedError

初始化就开始报错:

import abc

class FatherClass(metaclass=abc.ABCMeta):   # metaclass在元类编程中介绍
    
    @abc.abstractmethod()
    def fun(self):
        pass

class SonClass(FatherClass):
    pass
    
obj = SonClass()        # 创建对象时就会报错
# obj.fun()

# 输出:
Traceback (most recent call last):

  File "C:\Users\ZHUIAO\Desktop\untitled1.py", line 3, in <module>
    class FatherClass(metaclass=abc.ABCMeta):   # metaclass在元类编程中介绍

  File "C:\Users\ZHUIAO\Desktop\untitled1.py", line 5, in FatherClass
    @abc.abstractmethod()

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

Python记3(类与对象、路径、文件、异常处理、抽象基类 的相关文章

  • 如何在 Debian 上的 virtualenv 中安装 numpy?

    注 参见这另一篇文章 https stackoverflow com questions 6442754 how to install h5py numpylibhdf5 as non root on a debian linux syst
  • 如何(重新)命名 pandas 数据框中的空列标题而不导出到 csv

    我有一个熊猫数据框df1带有一个索引列和一系列未命名的值 我想为未命名的系列指定一个名称 到目前为止 我知道的唯一方法是导出到df1 csv using df1 to csv df1 csv header Signal 然后使用以下命令重新
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • python Recipe:列出最接近等于值的项[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑像这样的列表 0 3 7 10 12 15 19 21 我想获得最接近任何值的最近的最小数字 所以如果我通过4 我会得到3 如果我
  • Seaborn 中没有线性拟合的散点图

    我想知道是否有办法关闭seaborn中的线性拟合lmplot或者是否有一个等效函数可以生成散点图 当然 我也可以使用 matplotlib 但是 我发现 seaborn 中的语法和美学非常吸引人 例如 我想绘制以下情节 import sea
  • UnicodeDecodeError:部署到 Heroku 时,“utf-8”编解码器无法解码位置 0 中的字节 0xff

    我尝试在heroku上部署我的简单django项目 但我不明白如何解决这个问题 这是git push heroku master remote Traceback most recent call last remote File tmp
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 没有名为“turtle”的模块

    我正在学习并尝试用Python3制作贪吃蛇游戏 我正在进口海龟 我正在使用 Linux mint 19 PyCharm python37 python3 tk Traceback most recent call last File hom
  • pandas.read_fwf 忽略提供的数据类型

    我正在从文本文件导入数据框 我想指定列的数据类型 但 pandas 似乎忽略了dtype input 一个工作示例 from io import StringIO import pandas as pd string USAF WBAN S
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • MoviePY 无法在 Windows 上检测 ImageMagick 二进制文件

    我刚买了一台新笔记本电脑 想要设置MoviePY在那新的Windows 64x Python3 7 0 机器 我对所有内容都进行了三次检查 但是当涉及到我的代码的文本部分时 它向我抛出了这个错误 OSError MoviePy Error
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • Puppeteer入门初探

    本文来自网易云社区 作者 唐钊 最近在看 node 爬虫相关的一些东西 我记得还是很久以前常用的 node 爬虫工具还是 superagengt cherrio 他们的思路是通过发起 http 请求然后截取 respone 的内容 但是随着
  • Vue集成百度的Ueditor 前端+后台

    1 vue安装命令 npm i vue ueditor wrap 2 下载插件 Ueditor官网地址为 Ueditor 3 插件位置 下载好之后 将Jsp版本解压 解压后文件夹改名为UEditor 将文件夹中的 jsp目录删掉 将UEdi
  • 【编程笔试】美团2021校招笔试-通用编程题第2场(附思路及C++代码)

    导览 练习地址 小团的配送团队 不一样的逆序数 小团的旅行路线 小团的车辆调度 总结 练习地址 点此前往练习 小团的配送团队 小团是美团外卖的区域配送负责人 众所周知 外卖小哥一般都会同时配送若干单 小团在接单时希望把同一个小区的单子放在一
  • Android事件监听器和回调方法

    事件是 Android 平台与用户交互的手段 当用户对手机进行操作时 会产生各种各样的输入事件 Android 框架捕获到这些事件 进而进行处理 Android 平台提供了多种用于获取用户输入事件的方式 考虑到用户事件都是在特定的用户界面中
  • 嵌入式的发展前景如何?

    嵌入式的发展前景呈上升的趋势 其本身的薪资待遇并不低 再加上技术更新迭代日新月异 发展前景非常好 目前 工业发展迅速 并紧跟时代的潮流积极引进嵌入式技术 推动工业发展向着全面自动化的方向发展 同时智能仪表 自动化数控设备 现代化技术等与嵌入
  • JS 监听浏览器各个标签间的切换-visibilitychange事件介绍

    JS 监听浏览器各个标签间的切换 以前看到过一些网页 在标签切换到其它地址时 网页上的标题上会发生变化 一直不知道这个是怎么做的 最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定 这里将介绍一下页面可见性 Pa
  • nfs使用mount -o传递用户名和密码参数需要修改的地方

    挂在的信息一般通过 nfs parse mount option 可以直接打印 会有很多信息 1 修改的地方在super c该文件涉及到获取超级快等操作 修改enum 在里面添加 Opt username Opt passwd 2 修改另一
  • 那些年我们遇到的坑(3)-basePackages和scanBasePackages

    1 SpringBootApplication启动时会默认扫描主类当前包及子包 如果需要扫描主类当前包外的其他包或不扫描当前包下的特定包或类 可通过下列属性实现 Class scanBasePackageClasses default 详细
  • Nginx + Spring Boot 实现负载均衡

    Python实战社群 Java实战社群 长按识别下方二维码 按需求添加 扫码关注添加客服 进Python社群 扫码关注添加客服 进Java社群 作者丨虚无境 来源丨博客园 http www cnblogs com xuwujing 前言 本
  • 【Java】Map和Set

    目录 一 搜索树 1 概念 2 操作 查找 3 操作 插入 4 操作 删除 难点 6 性能分析 二 搜索 1 概念及场景 2 模型 三 Map 的使用 1 关于Map的说明 2 关于Map Entry的说明 gt 3 Map 的常用方法说明
  • Shiro简单配置Springboot版(3)

    6 整合SpringBoot项目实战 6 0 整合思路 6 1 创建springboot项目 6 2 引入shiro依赖
  • 小雀和他的王国【牛客练习赛56 E】【Tarjan缩点+树的直径】

    题目链接 首先 如果它本身就是在环内了 那么 任意的破坏环上的任意条边 都是不会影响答案的 所以 我们可以知道 会映像答案的边只有那些桥 于是 做法就变成了Tarjan缩点 然后就变成了一棵树了 我们现在想要构成最大的环 于是任务就变成了找
  • python 查tensorflow版本_查看已安装tensorflow版本

    由于tensorflow版本不同 可能一些函数的调用也有变换 这时候可能需要查看tensorflow版本 可以在终端输入查询命令如下 python import tensorflow as tf tf version 查询tensorflo
  • Android内存优化的10条建议

    合理设置应用的minSdkVersion和targetSdkVersion 使应用可以运行在更多设备上 这可以提高内存利用效率 避免在Application和Activity的onCreate方法中做过多工作 这会占用过多内存 可以将不必要
  • Spring 定时器 No qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined

    最近项目里面 用了spring的定时任务 一直以来 项目运行的不错 定时器也能正常使用 可是 今天启动项目测试的时候 盯着启动Log看了一阵子 突然间发现 启动的Log中居然有一个异常 虽然一闪而过 但是那熟悉的异常格式还是让我浑身一颤 这
  • 启动hive报错_Power BI连接Hive数据库

    要想实现Powe BI连接Hive数据库 需要安装一个驱动进行配置 同时服务器开启hiveserver2在后台运行 1 下载ClouderaHiveODBC64 https downloads cloudera com connectors
  • windows安装mingw编译c程序

    这篇文章主要介绍在windows下安装mingw 编译c代码的详细步骤 mingw是在windows下面的gcc 有了mingw 以前在linux下面编写的c代码也能在window下面编译运行啦 1 第一步 下载mingw 下载mingw很
  • 从程序员的角度看待算法的学习与研究

    一 引言 算法的重要性和应用场景 提高效率 算法可以帮助我们设计和实现高效的解决方案 在有限的资源下 提高计算机程序或系统的执行速度和效率 解决复杂问题 算法可以提供有效的解决方案来解决各种复杂问题 例如图像处理 自然语言处理 数据分析等领
  • 微软疑断自由软件开发者“活路”,禁止在微软商店发布商业开源

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 几周前 微软更新了其应用商店的政策 增加了新的政策 将于下周开始生效 其中包括以下文字 所有定价 都不能 企图从开源或其他普遍免费的软件中获取经济利益 图源SFC 原本大家以
  • Python记3(类与对象、路径、文件、异常处理、抽象基类

    目录 1 Class 1 1 声明类 1 2 类的特殊属性 1 3 创建对象 1 4 构造函数和析构函数 1 5 类方法和静态方法 类变量与实例变量 1 6 公有 保护 私有变量 通过下划线数量和位置区分 1 7 继承 1 7 1 多继承M