每天Python学习--globals,hash,help,id,input,isinstance

  • globals():返回表示当前全局符号表的字典,当我们不清楚当前程序中有哪些函数,可以进行查询,但实际会打印出比较多的信息,可以采用以下方案来查询以_prama结尾的变量名或者函数
promos = [name for name in globals() if name.endswith("_prama")]
print(promos)
  • hash(object):返回该对象的哈希值(如果它有的话)。
    哈希值是整数,在字典中查找元素时用来快速比较字典的键, 相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)。
    函数可以应用于数字、字符串和对象,不能直接应用于 list、set、dictionary。
hash(str([1,2,3]))
hash(1)#1

hash值的用途:
hash() 函数的对象字符不管有多长,返回的 hash 值都是固定长度的,也用于校验程序在传输过程中是否被第三方(木马)修改,如果程序(字符)在传输过程中被修改hash值即发生变化,如果没有被修改,则 hash 值和原始的 hash 值吻合,只要验证 hash 值是否匹配即可验证程序是否带木马(病毒)。

  • help([object]):用来查询函数或者模块的详细说明,用于交互

  • id(object):用于获取对象的内存地址。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 id() 值。

#比较两个对象的内存地址是否一致
a,b=3,4
print(a is b)#False

为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,字符串对象等,python采取重用对象内存的办法,范围是[-5,256]

a=3
b=3
a is b# True,a,b指向相同的内存地址

如对于数值较大的int对象,python会为a和b分别申请一块内存,小于-5或者大于256,其次还需要考虑代码块(程序的一个最小的基本执行单位,一个模块文件、一个函数体、一个类、交互式命令中的单行代码都叫做一个代码块),Python内部为了进一步提高性能,凡是在一个代码块中创建的整数对象,如果值不在[-5,256]范围之内,但在同一个代码块中已经存在一个值与其相同的整数对象了,那么就直接引用该对象,否则创建一个新的对象出来,这条规则对不在[-5,256]范围的负数并不适用,对负数值浮点数也不适用,但对非负浮点数和字符串都是适用的,这会影响你在比较两个对象的id,即是否为同一个内存地址,我们常用is 来比较,其比较的就是id值,而==则比较值的大小

a=321289
b=321289
a is b#False

#如果将-5变为-7,则输出三个False,改为257,则b is c True,其余为False
a = -5
def main():
    b = -5  
    c = -5  
    print(b is c)  # True
    print(a is b)  # True
    print(a is c)  # True

main()

python id函数和内存分配理解

  • input():接受一个标准输入数据,返回为 string 类型,注:在python2中数值会保留其原本的数据类型
num_a=input()
print(type(num_a))# python3
  • isinstance(object, classinfo): 判断object 是否为 classinfo 的实例,返回值为布尔类型
class A:
    pass

class B(A):
    pass

b=B()
str_c='haha'
print(isinstance(b,A))#True
print(isinstance(str_c,(str,B,A)))#True

isinstance()与type()的区别
在继承上存在区别:
isinstance() 会认为子类是一种父类类型,考虑继承关系,判断时会考虑该对象的父类
type() 不会认为子类是一种父类类型,不考虑继承关系,判断时不会考虑其父类

你可能感兴趣的:(每天Python学习--globals,hash,help,id,input,isinstance)