python知识点学习记录

一、isinstance()函数

        参考资料:Python isinstance() 函数 | 菜鸟教程

isinstance(object,classinfo): object是实例对象。classinfo 可以是直接或间接类名、基本类型或者由它们组成的元组。如果对象的类型与参数二的类型(classinfo)相同(如果参数二是元组,只要与元组中的一个相同就返回True)则返回 True,否则返回 False。

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

二、enumerate() 函数

        参考资料:Python enumerate() 函数 | 菜鸟教程

        enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence,[start=0]):sequence -- 一个序列、迭代器或其他支持迭代对象。start -- 下标起始位置。返回 enumerate(枚举) 对象。

testlist=['a','b','c']
for i,element in enumerate(testlist):
    print(i,element)
结果:
0 a
1 b
2 c

三、 Counter函数

        参考资料:https://blog.csdn.net/qq_24753293/article/details/78334140

        counter作用就是在一个数组内,遍历所有元素,将元素出现的次数记下来。在c++中,实现该功能通常需要先将其放入map中,如map<key类型,val类型> nummap的形式,之后需要auto [key,val]:nummap来获得。

        而使用python会非常的简单:

 结果显示:元素1出现了1次,元素3出现了2次,元素2出现了3次,元素5出现了1次,元素7出现了1次。

四、dict()函数

        参考资料:http://www.pythontip.com/blog/post/11650/

                         https://blog.csdn.net/zhpf225/article/details/100673547

        dict与c++中map基本一致,

    每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。键是唯一的,字典只认最后一个赋的键值。 

  dict():创建空字典

dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
D.get(key, 0)       #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常  
D.has_key(key)      #有该键返回TRUE,否则FALSE  
D.keys()            #返回字典键的列表  
D.values()          #以列表的形式返回字典中的值,返回值的列表中可包含重复元素  
D.items()           #将所有的字典项以列表方式返回,这些列表中的每一项都来自于(键,值),但是项在返回时并没有特殊的顺序           
  
D.update(dict2)     #增加合并字典  
D.popitem()         #得到一个pair,并从字典中删除它。已空则抛异常  
D.clear()           #清空字典,同del dict  
D.copy()            #拷贝字典  
D.cmp(dict1,dict2)  #比较字典,(优先级为元素个数、键大小、键值大小)  第一个大返回1,小返回-1,一样返回0

c++中map与dict的一点区别:c++中访问不存在的键则会默认设置为0;python中访问不存在的键会报错但是赋值不存在的键值是可以的。

五、yield

 参考链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856/  博主讲的非常清晰幽默,此处仅做总结,详细查阅原博:

        其与return有相似之处:遇到return之后返回,返回后程序不会再往下运行。遇到yield后,返回要生成的数,此步就结束。

       与return的不同之处:带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的。

六、__init__.py,__all__的作用

参考链接:https://www.cnblogs.com/tp1226/p/8453854.html

总结概括一下:

__init__.py的这个文件作用是:(1)标识该目录是一个python的模块包。(2)使用它可以简化导入操作。如果没有该文件,目录底下的所有文件都需要一一导入。

可以在__init__.py中使用__all__变量关联要导入的子模块。

详细内容参阅上述参考链接。

七、uuid

 参考链接:https://blog.csdn.net/d294083434/article/details/119671382

UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。

在python中导入uuid这个模块,就可以使用它的四个方法了。注意这四个方法依次是uuid1(),uuid3(),uuid4(),uuid5(),没有uuid2()。

         uuid1():这个是根据当前的时间戳和MAC地址生成的,最后的12个字符408d5c985711对应的就是MAC地址,因为是MAC地址,那么唯一性应该不用说了。但是生成后暴露了MAC地址这就很不好了。

        uuid3():里面的namespace和具体的字符串都是我们指定的,然后呢···应该是通过MD5生成的,这个我们也很少用到,莫名其妙的感觉。

        uuid4():这是基于随机数的uuid,既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。

        uuid5():这个看起来和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.


八、可更改不可更改对象值传引用传

可更改(mutable)与不可更改(immutable)对象

    在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

    不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

    可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

 python 函数的参数传递:

    不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

    可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响


        python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

九、在 python 中,类型属于对象,变量是没有类型的

    a=[1,2,3]

    a="Runoob"

    以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。

十、不定长参数

        你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。

        加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:

#!/usr/bin/python
	# -*- coding: UTF-8 -*-
 
	# 可写函数说明
	def printinfo( arg1, *vartuple ):
	 "打印任何传入的参数"
	 print "输出: "
	 print arg1
	for var in vartuple:
	 print var
	return;
 
	# 调用printinfo 函数
	printinfo( 10 );
	printinfo( 70, 60, 50 );

	输出:
	10
	输出:
	70
	60
	50


 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值