精华内容
下载资源
问答
  • 详解Python中的可哈希对象与不可哈希对象(二)

    千次阅读 多人点赞 2019-10-30 16:49:52
    前言:我们经常会听见很多的概念,哈希值...鉴于篇幅较多,本次系列文章将分为两篇来说明,此为第二篇,会涉及到一下概念,可变对象mutable与不可变对象inmutable,可哈希hashable与不可哈希unhashable,为什么字典...

    前言:我们经常会听见很多的概念,哈希值,哈希表,可哈希对象,不可哈希对象,散列表,字典,映射,等等,那么这么多的概念后面到底又有什么区别和联系,它们的本质又是怎么样的,本此系列文章将针对这些概念进行说明,鉴于篇幅较多,本次系列文章将分为两篇来说明,此为第二篇,会涉及到一下概念,可变对象mutable与不可变对象inmutable,可哈希hashable与不可哈希unhashable,为什么字典dict的键Key一定要是可哈希的
    前一篇文章参考:详解Python中的可哈希对象与不可哈希对象(一)——哈希表与哈希值

    一、可哈希对象与不可哈希对象的直观理解

    前提:能够较好地理解什么是可变对象mutable与不可变对象inmutable。以及明白哈希值value的唯一性。

    1.1 什么是可哈希(hashable)?

    • 简要的说可哈希的数据类型,即不可变的数据结构(数字类型(int,float,bool)字符串str、元组tuple、自定义类的对象)

    (1)为什么不可变数据类型是可哈希hashable的呢?哈希有啥作用?

    对于不可变类型而言,不同的值意味着不同的内存,相同的值存储在相同的内存,如果将我们的不可变对象理解成哈希表中的Key,将内存理解为经过哈希运算的哈希值Value,这不正好满足哈希表的性质嘛。如下:

    a=100
    b=100
    c=101
    
    id(a) #1420082496
    id(b) #1420082496 # a,b是一样的
    id(c) #1420082528 # c是不一样的

    当然了,这不是说哈希值就是id地址,这还是不一样的,参见下面:

    In [21]: hash(a)
    Out[21]: 100     # 并不是说哈希值就是它本身哈,一个对象的哈希值是什么取决于__hash__魔术方法的运算过程
    
    In [22]: hash(b)
    Out[22]: 100
    
    In [23]: hash(c)
    Out[23]: 101

    再看一个例子:

    In [24]: x="ilove"
    
    In [25]: y="i"+"love"
    
    In [26]: z="iloveyou"
    
    In [27]: id(x),id(y),id(z)
    Out[27]: (3122841661600, 3122841661600, 3122841929584)  # x,y的id是一样的
    
    In [28]: hash(x),hash(y),hash(z)
    Out[28]: (4255912298523051991, 4255912298523051991, -3820205610162521985) # x,y 的哈希值是一样的

     

    1.2 什么是不可哈希(unhashable)?

    • 同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)

    对于可变对象而言,比如一个列表,更改列表的值,但是对象的地址本身是不变的,也就是说不同的Key,映射到了相同的Value,这显然是不符合哈希值的特性的,即出现了哈希运算里面的冲突。如下:

    a=[1,2,3]
    print(id(a))
    
    def func(p):
        p.append(4)
        return p
    
    b=func(a)
    print(id(b))
    '''
    2399750863880   是一样的哦
    2399750863880
    '''

    如果此时对a和b使用hash函数,则会出错,如下:

    TypeError: unhashable type: 'list'

    总结:上面的说明仅仅是感性上的认识哦,并不是本质原因哈!

     

    二、从实质上来理解hashable和unhashable对象

    2.1 什么是hashable(可哈希性)

    An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__()or __cmp__() method). Hashable objects which compare equal must have the same hash value.

    如果一个对象是可哈希的,那么在它的生存期内必须不可变(而且该对象需要一个哈希函数),而且可以和其他对象比较(需要比较方法).比较值相同的对象一定有相同的哈希值,即一个对象必须要包含有以下几个魔术方法:

    • __eq__():用于比较两个对象是否相等
    • __cmp__():用于比较两个对象的大小关系,它与__eq__只要有一个就可以了
    • __hash__():实际上就是哈希函数(散列函数),返回经过运算得到的哈希值

    前面既然说了整数int是可哈希对象,不放我们看一下它具不具备这几个魔术方法:

    In [51]: a=100
    
    In [52]: dir(a)
    Out[52]:
    [...
     '__eq__',
     ...
     '__hash__',
    ...
    ]

    我们发现他的确具有上面说的这几个魔术方法。

    列表是不可哈希的,我们看一下列表的魔术方法有哪一些:

    In [54]: a=[1,2,3]
    
    In [55]: dir(a)
    Out[55]:
    [...
     '__eq__',
    ...
     '__hash__',
    ...
    ']

    我们发现一个问题,为什么可变对象list明明是不可哈希的,为什么也有着两个方法呢?

    因为所有类型的基类object中实现了这两个魔术方法,但是并不是说有这两个方法就一定是可哈希的,关键是要如何实现__eq__()方法和__hash__()方法,list并没有实现,只是有这几个魔术方法而已,在实现的里面出发了上面的异常。我们可以看一下基类object的魔术方法,如下:

    In [56]: dir(object)
    Out[56]:
    [...
     '__eq__',
     ...
     '__hash__',
    ...
    ]

    2.2 自定义类型的对象是不是可哈希的呢?

    看一下如下代码:

    class Animal:
        def __init__(self, name):
            self.name=name
        def eat(self):
            print("i love eat !")
            
    a=Animal("dog")
    print(hash(a))  # 83529594295

    我们发现自定义的类的对象是可哈希的,虽然我们不知道这个哈希值是如何得到的,但是我们知道他的确是可哈希对象。

    前面说了哈希值的计算实际上是通过__hash__魔术方法来实现的,我们不妨自定义一下类的魔术方法,如下:

    class Animal:
        def __init__(self, name):
            self.name=name
        def __hash__(self):  # 自定义哈希函数
            return 1000      # 注意哈希函数的返回值要是integer哦!
        def eat(self):
            print("i love eat !")
            
    a=Animal("dog")
    print(hash(a))  # 返回 1000

    现在对于什么是python的可哈希对象和哈希函数如何实现应该有了比较清楚的了解了。

    三、为什么字典 key 必须是不可变的(可哈希hashable)?

    3.1 字典如何在 CPython 中实现?

    CPython 的字典实现为可调整大小的哈希表。与 B-树相比,这在大多数情况下为查找(目前最常见的操作)提供了更好的性能,并且实现更简单。

    字典的工作方式是使用 hash() 内置函数计算字典中存储的每个键的 hash 代码。hash 代码根据键和每个进程的种子而变化很大;例如,"Python" 的 hash 值为-539294296,而"python"(一个按位不同的字符串)的 hash 值为 1142331976。然后,hash 代码用于计算内部数组中将存储该值的位置。假设您存储的键都具有不同的 hash 值,这意味着字典需要恒定的时间 -- O(1),用 Big-O 表示法 -- 来检索一个键。

    3.2 字典 key 必须是不可变的(可哈希hashable)

    字典的哈希表实现使用从键值计算的哈希值来查找键

    (1)为什么可变对象不能作为键Key?

    先来看一个简单的例子:

    d = {[1, 2]: '100'}  # 构造一个字典,key是列表[1,2] ,是一个可变对象,是不可哈希的
    print(d[[1, 2]])     # 通过key去访问字典的值,触发keyerror异常

    为什么会触发异常呢?哈希按其地址(对象 id)列出的。在上面的两行代码中,第一行中的key是一个列表对象[1,2],第二行中要访问的的时候的那个key虽然也是[1,2],但是由于列表list是可变对象,虽然这两行的列表值一样,但是他们并不是同一个对象,它们的存储地址是不一样的,即id是不一样的,id不一样也导致了根据id计算得到的哈希值是不一样的,自然没有办法找到原来的那一个[1,2]的哈希值在哪里了。

    注意:这需要能够很好的理解可变对象与不可变对象的内存分配才好哦!

    (2)为什么不可变对象能作为键Key?

    将上面例子中的列表[1,2]换成元组(1,2),先来看一个简单的例子:

    d = {(1, 2): '100'}  # 构造一个字典,key是元组(1,2) ,是一个不可变对象,是可哈希的
    print(d[(1, 2)])     # 通过key去访问字典的值,打印 '100'

    为什么这里不会触发异常呢?哈希按其地址(对象 id)列出的。在上面的两行代码中,第一行中的key是一个元组对象(1,2),第二行中要访问的的时候的那个key也是(1,2),但是由于元组tuple是不可变对象,那么这两行的元组值一样,所以它们的存储地址是一样的,即id是一样的,id一样也导致了根据id计算得到的哈希值是一样的,哈希值一样我自然可以搜索得到那个100在哪个地方了。

    (3)总结:

    字典的key一定要是不可变对象,要是能够哈希的对象,即hashable对象,包括:

    数字类型(int,float,bool)字符串str、元组tuple、自定义类的对象,这几类,比如下面的字典:

    class Animal:
        def __init__(self, name):
            self.name=name
        def __hash__(self):  # 自定义哈希函数
            return 1000      # 注意哈希函数的返回值要是integer哦!
        def eat(self):
            print("i love eat !")
            
    a=Animal("dog")
    # print(hash(a))  # 返回 1000
    
    
    d={100:"a",     # 整数作为key
       100.1:"b",   # 浮点数作为key
       True:"c",    # 布尔值作为key
       "name":"d",  # 字符串作为key
       (1,2):"e",   # 元组作为key
       a:"f"}       # 自定义对象作为key
    
    for k in d.keys():
        print(d[k])
    '''
    a
    b
    c
    d
    e
    f
    '''

     

     

    展开全文
  • 可综合&不可综合

    千次阅读 2014-06-09 23:54:15
    Verilog HDL和VHDL相比有很多优点,有C语言基础的话很容易上手。搜集了一些网上大神的经验总结和书上的例子,所以对于和我一样的初学者,这篇博客应该还是很有提高作用的,至于具体语法,任何一本书都讲的很详细。 ...

    Verilog HDL和VHDL相比有很多优点,有C语言基础的话很容易上手。搜集了一些网上大神的经验总结和书上的例子,所以对于和我一样的初学者,这篇博客应该还是很有提高作用的,至于具体语法,任何一本书都讲的很详细。

    0. HDL历史

    HDL 是 Hardware Description Language 的缩写,中文名“硬件描述语言”,并不是“硬件设计语言(HardwareDescription Language)”。正是这个单词,决定了绝大多数部分电路设计必须遵循RTL的模式来编写代码,而不能随心所欲的写仅仅符合语法的HDL代码。

    VHDL 于1980年开始在美国国防部的指导下开发,完成于1983年,并于1987年成为IEEE 的标准。Verilog HDL也形成于差不多的年代,是由Gateway Design Automation 公司大约在1983年左右开发的。其架构同VHDL 相似,但主要被用来进行硬件仿真。探究HDL语言的历史,就能明白这两种最流行的用于电路设计的语言,没有一种是为了设计硬件而开发的(更何况80年代还没有现在的那些功能强大的EDA软件呢)。因此,当初制订 HDL语言标准的时候,并没有考虑这些代码如何用硬件来实现。换句话说,有些代码写起来简单,实现起来却可能非常复杂,或者几乎不可能实现。

    1. 可综合

    1. 所有综合工具都支持的结构

    [plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter  

    有些工具支持,有些工具不支持:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repreat,task,while

    2. 建立可综合模块的原则

    1. 不要用initial(FPGA上电时初始状态不定,一般需要上电复位信号,在复位信号有效的时候进行初始化,上电复位信号可以由外部手动输入,也可以系统自己产生,转一篇博客,P.S.现在的综合软件功能已经足够强大,即使写了initial语句,在ISE13.3中仍然是可综合的,而且没有warning和info的提示)
    2. 不使用#10(在仿真中有用,实际在硬件上不会实现)
    3. 不使用循环次数不定的循环语句,如forever、while等
    4. 不使用用户自定义原语(UDP原件)
    5. 除非是关键路径设计,一般不采用调用门级原件描述的设计的方法,建议采用行为语句完成设计
    6. 尽量使用同步方式设计电路
    7. 用always语句描述组合逻辑时,在敏感信号列表中要列出所有输入信号
    8. 所有的内部寄存器都应该可以被复位,在FPGA设计时应尽量使用器件的全局复位端信号作为系统的总复位
    9. 时序逻辑使用非阻塞赋值,组合逻辑使用阻塞赋值,同一过程块中不要同时使用阻塞和非阻塞两种方式
    10. 不要在不同的always过程块中对同一变量赋值(否则综合时会提示有多驱动源错误,multiple source),对同一赋值对象,不能既使用阻塞赋值,又使用非阻塞赋值
    11. 如果不打算把变量综合成锁存器,在if语句或case语句的所有分支中都要对变量明确赋值(不能省去else或default,原理:在省去的情况下,变量的值会保持原来的值不变,所以系统会综合出一个锁存器)
    12. 避免混合使用上升沿和下降沿触发器
    13. 同一变量的赋值不能受多个时钟控制,也不能受两种不同时钟条件(或不同时钟沿)控制
    14. 避免在case语句中使用x或z值

    2. 不可综合

    1. 所有综合工具都支持的结构

    [plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. time,defparam,$finish,fork,join,initial,delays,UDP,wait  

    2. 不可综合语句

    1. initial 只能在Testbench中使用,不能综合
    2. events 在Testbench中更有用,不能综合
    3. real 不支持real类型的综合
    4. time 不支持time类型的综合
    5. force 和release
    6. assign 和 deassign 不支持对reg类型的数据进行assign和deassign综合,支持对wire类型进行assign和deassign的综合
    7. fork join 不可综合,可以用非块语句达到同样的效果
    8. primitives 支持门级原语综合,不支持非门级原语综合
    9. table 不支持table和UDP的综合
    10. 敏感符列表中同时有posedge和negedge,如always @ ( posedge clk or negedge clk ) begin ...end
    11. 同一个reg被多个always块驱动
    12. 延时,不可综合为硬件电路延时,综合工具会忽略延时,但是不会报错
    13. 与x、z比较,综合工具会忽略,所以要保证信号只有两个状态,0或1

    3. 判断是否可综合

    用一句简单的话概括:电脑永远没有你聪明。具体来说,通常EDA软件对HDL代码的综合能力总是比人差。对于一段代码,如果你不能想象出一个较直观的硬件实现方法,那 EDA软件肯定也不行。一般来说:在 RTL 级的描述中,所有逻辑运算和加减法运算、以及他们的有限次组合,基本上是可综合的,否则就有无法综合的可能性。当然,这样的标准仍然有缺陷,更况且EDA的技术也在不断发展,过去无法综合的代码或许将来行,某些软件不支持的代码换个软件或许行。比如固定次数的循环,含一个常数参数的乘法运算等等,有些EDA软件支持对它们的综合,而有些软件不行。

    所以,正确的判断仍然要靠实践来积累经验。当你可以较准确判断代码的可综合性的时候,你对HDL的掌握就算完全入门了。

    展开全文
  • 我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 主要是为了 “ 效率 ” 和 “ 安全性 ” 的缘故。 若 String 允许...

    String是所有语言中最常用的一个类。我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。

    主要是为了 “ 效率 ”  “ 安全性 ” 的缘故。  String 允许被继承由于它的高度被使用率可能会降低程序的性能,所以 String 被定义成 final

     

    一:String 和其他基本类型不同 , 他是个对象类型既然是对象类型 , 如果是在静态方法下是必须调用静态方法或值的 , 如果是非静态的方法 , 就必须要实例化.

     

    main 函数是个 static 所以String 要能像其他的基本类型一样直接被调用这也是为什么在 main 函数下使用 String 类型不会报告错误的原因..

     

    一下就解释了两个心里的疑问..

     

    以前一直觉得奇怪 ,为什么 String 是对象类型在 main 函数下却是不需要实例化的再次佩服 java 设计人员想得真周到.

     

    二:当定义 String 类型的静态字段(也成类字段),可以用静态变量(非 final)代替常量(final)加快程序速度。 反之,对于原始数据类型,例如 int,也成立。

     

    例如,你可能创建一个如下的 String 对象:

     

    Privatestatic final Stringx="example";

    对于这个静态常量(由 final 关键字标识),你使用常量的每个时候都会创建一个临时的 String 对象。 在字节代码中,编译器去掉 ”x”,代替它的是字符串 “example”, 以致每次引用 ”x”  VM 都会进行一次哈希表查询。

     

    相比之下,度于静态变量 (  final 关键字 ),字符串只创建一次。 仅当初始化 “x” 时, VM 才进行哈希表查询。

     

    还有另一个解释 :

    带有 final 修饰符的类是不可派生的。  java 核心 API 中,有许多应用 final 的例子,例如 java.lang.String  String 类指定 final 防止了人们覆盖 length() 方法。

     

    另外,如果指定一个类为 final,则该类所有的方法都是 final java 编译器会寻找机会内联(inline)所有的 final 方法(这和具体的编译器实现有关)。 此举能够使性能平均提高 50%

     

    示例:

     

    publicclassTest{

    publicstaticvoidmain(String[]args){

    //

    }

    }

    如果 String 不是 final 那么就可以继承

     

    publicclassString2extendsString{

    //..

    //...

    }

    那我们的 main 也就可以写成

     

    publicclassTest{

    publicstaticvoidmain(String2[]args){//注意此处

    //

    }

    }

    英文参考:http://forums.sun.com/thread.jspa?threadID=636414

     

    另外补充一点:

    作用就是 final的类不能被继承,不能让别人继承有什么好处?

     

    意义就在于,安全性,如此这般:

    java 自出生那天起就是“为人民服务”,这也就是为什么java做不了病毒,也不一定非得是病毒,反正总之就是为了安全, 人家java的开发者目的就是不想让 java干这类危险的事儿,java并不是操作系统本地语言, 换句话说java必须借助操作系统本身的力量才能做事,JDK中提供的好多核心类比如 String,这类的类的内部好多方法的实现都不是java编程语言本身编写的, 好多方法都是调用的操作系统本地的API,这就是著名的“本地方法调用”,也只有这样才能做事,这种类是非常底层的, 和操作系统交流频繁的,那么如果这种类可以被继承的话,如果我们再把它的方法重写了,往操作系统内部写入一段具有恶意攻击性质的代码什么的, 这不就成了核心病毒了么?

     

    上面所述是最重要的,另外一个方面,上面2位老兄说的也都很对, 就是不希望别人改,这个类就像一个工具一样,类的提供者给我们提供了, 就希望我们直接用就完了,不想让我们随便能改,其实说白了还是安全性, 如果随便能改了,那么java编写的程序肯定就很不稳定,你可以保证自己不乱改, 但是将来一个项目好多人来做,管不了别人,再说有时候万一疏忽了呢?他也不是估计的, 所以这个安全性是很重要的,javaC++相比,优点之一就包括这一点;

     

    原因绝对不只有这么多,因为如果这些个核心的类都能被随便操作的话,那是很恐怖的,会出现好多好多未知的错误,莫名其妙的错误….

     

    String类不可变性的好处

     

    只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现(译者注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。

     

    如果字符串是可变的,那么会引起很严重的安全问题。譬如,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都是以字符串的形式传入。因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变字符串指向的对象的值,造成安全漏洞。

     

    因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。字符串自己便是线程安全的。

     

    类加载器要用到字符串,不可变性提供了安全性,以便正确的类被加载。譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。

     

    因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串 

    展开全文
  • comparison 可数 还是 不可

    千次阅读 2019-06-13 09:44:42
    1.不可数名词:比较 2.可数名词:相比; 对比; 对照 英语解释 relation based on similarities and differences examining resemblances or differences qualities that are comparable 例句 factor not ...

    名词
    1.不可数名词:比较
    2.可数名词:相比; 对比; 对照

    英语解释

    • relation based on similarities and differences
    • examining resemblances or differences
    • qualities that are comparable

    例句

    • factor not subject to comparison;Incomparable factor不可比因素
    • pear deficient in comparison;Be inferior by comparison;lose by comparison相形见绌
    • Don't fear that it won't be appreciated, it stands up well to comparison.不怕不识货,只怕货比货
    • As a drop of water unto the sea,and a gravestone in comparison of the sand;so is a thousand year to the day of eternity.千年对于永恒,如同大海一滴水,沙滩一粒沙。
    • An accomplice shall, in comparison with a principal offender, be given a lesser punishment or a mitigated punishment or be exempted from punishment.对于从犯,应当从轻、减轻处罚或者免除处罚。
    • "In comparison, the media war here appears tame and much less intense."相比之下,本地所引发的传媒战算是客气有余,拼劲不足。
    • Defy all comparison无与伦比
    • Seeing on the other hand, if I had all the world, and should lose the favour and blessing of god, there wou'd be no comparison in the loss.从另一方面来说,即使世人不丢弃我,但我若失去上帝的宠幸和保佑,还有什么能比这种损失更大呢?"
    • Comparison, more than reality, makes men happy or wretched. (Thomas Fuller, american inventor)使人高兴的或者沮丧的,与其说是事实,还不如说是攀比。(美国发明家富勒)
    • "The feudal period in Europe was, by comparison, shorter."比较而言,欧洲的封建制度历史较短。
    展开全文
  • 可数集合与不可数集合

    万次阅读 多人点赞 2015-07-22 00:16:30
    集合,set,就是将一些确定的东西...对于 S 中的元素 a,me 们说 a ∈ S (a 属于 S),当然如果 a 在 S 中,me 们就说 a ∉ S (a 属于 S)。 集合中元素的个数,有时候是有限 (finit) 的,有时候不是有限的,比如 {
  • mongodbmysql相比的优缺点

    万次阅读 2016-12-06 18:35:43
    关系型数据库相比,MongoDB的优点: ①弱一致性(最终一致),更能保证用户的访问速度: 举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值。这在...
  • SparkHadoop相比的优缺点

    万次阅读 2018-09-18 20:56:20
    1. Spark 概述 1.1. 什么是 Spark(官网... ...Spark 是一种快速、通用、扩展的大数据分析引擎,2009 年诞生于加州大学伯克利分校AMPLab,2010 年开源,2013 年 6 月成为 Apache 孵化项目,2014 年 2 月成为 Apache ...
  • 交换机路由器相比的五点优势

    千次阅读 2018-09-17 11:48:38
    下文介绍第三层交换机和路由器相比的五点优点: 1).子网间传输带宽任意分配:传统路由器每个接口连接一个子网,子网通过路由器进行传输的速率被接口的带宽所限制。而三层交换机则不同,它可以把多个端口定义成一个...
  • 不可变集合

    万次阅读 2017-03-30 07:13:55
    副作用会让代码的易懂性和正确性打折扣。用于转变全局或静态变量的方法就有副作用。用于转变其部分参数的方法也有副作用。... 若要回答这些问题,可以让实例不可变,这样就不会有副作用了。 通常,
  • MySQLPostgreSQL相比哪个更好?

    万次阅读 多人点赞 2017-03-23 09:17:34
    网上已经有很多拿PostgreSQLMySQL比较的文章了,这篇文章只是对一些重要的信息进行下梳理。在开始分析前,先来看下这两张图: MySQL MySQL声称自己是最流行的开源数据库。LAMP中的M指的就是MySQL。...
  • 蓝牙5.1蓝牙5.0相比有哪些改进

    万次阅读 2019-02-14 15:22:59
    大部分人对于蓝牙的印象,还停留在诺基亚时代的数据传输功能。那时候文件不大,手机...特别是在无线耳机横行的当下,蓝牙已经成为了手机中不可缺少的功能。时代在进步,蓝牙的应用范围也在不断扩展。未来,蓝牙或许...
  • C++C#相比,哪个更适合开发大型游戏? 首先,先说下,大部分游戏,甚至是应用,都极少只使用一种语言开发的。我觉得这个问题倒过来回答比较合适,先解答一下目前主流的大型游戏,都是使用什么语言开发的。再说说...
  • DataStore不可视数据窗口的使用

    千次阅读 2011-08-06 13:28:27
    datastore 关于DataStoreDatastore是PB中不可视的数据窗口控制,除此以外数据窗口相比各个方面都极其相似。 由于datastore具有对数据的交互操作,所以用它来代替在程序中经常使用的游标Cursors. 使用datastore检索...
  • 现在CentOS 7已经慢慢成为主流,之前使用最多的6相比,有以下区别: 一、系统初始化技术演变——开机启动流程 CentOS 6:采用了INIT技术,整个开机过程是自检BIOS——MBR引导——GRUB加载——加载内核——...
  • vb.netc#相比有什么优势和区别?

    万次阅读 2009-03-26 16:23:00
    vb.netc#相比有什么优势和区别? 这世界上没有什么比编程工具更加牵动程序员的心。VC、VB、DELPHI、JAVA……这些耀眼的名字不仅占据了程序员的生活,而且似乎已经成为了某种信仰。可是,伴随着新世纪的脚步,这些...
  • “鸡”不可失—— 咕咕机3代VS2代对比测评 “鸡”不可失—— 咕咕机3代VS2代对比测评作为一个MEMOBIRD咕咕鸡便携打印机的老粉,最近又入手了一台咕咕鸡最新的三代产品。用了几天,只能用一个词评价:爱不释手。简直...
  • Linux和Windows是两种操作系统,对于服务器运维的人来说,在为服务器选择操作系统系统的时候,是选择Linux还是Windows是让人困惑的事? 从用户群来说Linux是一个以开发者为...具体到LinuxWindows的优缺点,可以总结
  • Python其他语言相比优缺点 python零基础入门

    万次阅读 多人点赞 2018-05-14 17:03:29
    python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然路,以下是Python其他编程语言的优缺点对比:1.Python优势:简单易学,能够把用其他语言制作的各种模块很轻松地联结在一起。...
  •  【陈怀临注:是的,没有IBM Linux Research Center的R&D投入,Linux在服务器市场方面的发展绝无今日局面】  最近的Cisco抛弃了其专有的IOS核心,在 ASR1000的控制平面软件上采用了Linux为基础平台。【陈怀临注...
  • const#define相比,区别和优点超详解总结!

    万次阅读 多人点赞 2018-08-23 15:14:07
    一:区别 (1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。 (2)就起作用的方式而言: #define...(3)const节省空间,避免不必要的内存分配,提高效率
  • 物理实体融合射频识别传感技能,应具有标识、感知、通讯、抑制的平安智能体的特征,但并非所有的物理实体均要实现全部功能,有些实体仅需实现标识、通讯等局部功能。 2)异构化特征。智能标识...
  • 由于智能合约是基于区块链的,合约内容公开透明、且不可篡改。代码即法律(Code is law),交易者基于对代码的信任,可以在不信任环境下安心、安全地进行交易。 2、经济、高效 相比传统合约经常会因为对合约条款...
  • 它没有MFC的界面(GUI)类库那样功能强大,但是能够生成很小的执行文件。如果你象我一样使用MFC进行界面编程,你会觉得MFC提供的界面控件封装使用起来非常舒服,更不用说MFC内置的消息处理机制。当然,如果你也象...
  • windows操作系统linux操作系统相比各有什么优缺点

    万次阅读 多人点赞 2012-11-14 15:24:09
    (2)有很多软件只能在windows里运行 ,Linux兼容的软件正在开发中.  (3)Linux适用在网络方面.  (4)Linux的操作比较复杂,windows的比较简单.    Linux和Windows的区别 和Linux 一样,Windows系列是完全的多...
  • 相比方法一这将是一个一劳永逸的做法, 推荐!!! ) 1.也是先找到自己python 的安装路径,和方法一中的一样; 2.在电脑中,右键打开 我的电脑(此电脑)\属性\高级系统设置\环境变量 如图所示: 3....
  • 树莓派3强大很多--相比树莓派2

    万次阅读 2017-11-09 10:19:41
    而WiFi的直接更是目前不可缺少的功能,一般情况下,智能手表用低功耗蓝牙连接,如果智能手表可以录影、拍照,或者需要不同数据支持,此时用蓝牙传输时间就比较长,BCM4348可以把它切换为WiFi,即不需要经过路由器,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 851,329
精华内容 340,531
关键字:

不可与之相比