1、生成器和迭代器的区别就是用()代替[]
https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/1/README.html
要理解Yield你必须先理解当你调用函数的时候,函数里的代码并没有运行.函数仅仅返回生成器对象,这就是它最微妙的地方:-) 然后呢,每当for语句迭代生成器的时候你的代码才会运转.
当for语句第一次调用函数里返回的生成器对象,函数里的代码就开始运作,直到碰到yield,然后会返回本次循环的第一个返回值.所以下一次调用也将运行一次循环然后返回下一个值,直到没有值可以返回. 一旦函数运行并没有碰到yeild语句就认为生成器已经为空了.原因有可能是循环结束或者没有满足if/else之类的.
但是在你给的代码里得到的是生成器,这样做的好处: 你不需要读这个值两次 你能得到许多孩子节点但是你不希望他们全部存入内存.
2、使用append的时候,是将new_media看作一个对象,整体打包添加到music_media对象中。
music_media = ['compact disc', '8-track tape', 'long playing record'] new_media = ['DVD Audio disc', 'Super Audio CD'] music_media.append(new_media) print music_media >>>['compact disc', '8-track tape', 'long playing record', ['DVD Audio disc', 'Super Audio CD']]复制代码
使用extend的时候,是将new_media看作一个序列,将这个序列和music_media序列合并,并放在其后面。
music_media = ['compact disc', '8-track tape', 'long playing record'] new_media = ['DVD Audio disc', 'Super Audio CD'] music_media.extend(new_media) print music_media >>>['compact disc', '8-track tape', 'long playing record', 'DVD Audio disc', 'Super Audio CD']复制代码
https://www.cnblogs.com/subic/p/6553187.html
3、list转为str 可以用join
https://blog.csdn.net/roytao2/article/details/53433373
4、x-requested-with请求头
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数 可以看到 Ajax 请求多了个 x-requested-with 。 我们可以利用它来判断请求是否是Ajax请求。复制代码
例:同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写! 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。 当用户填写完一条信息后,该信息会自动向服务器提交,然后服务器响应客户端,在此过程中,用户依然在填写表格的信息,即向服务器请求多次,节省了用户的时间,提高了用户的体验。 异步:页面上的操作和服务器端的操作互相之间不会造成阻塞
https://blog.csdn.net/xiaotao_css/article/details/70761666
5、 传递的是两个命名实参,这个时候因为有名称标识,参数传递的顺序也就不用在意了。
def foo(x, y=0): return x - y foo(y=1, x=3) 2复制代码
修饰器:http://python.jobbole.com/81683/
6、__class__是类的属性的方式来获取类的类型
a=A()
a.class # 'class main.A'7、其实,Python并没有真正的私有化支持,但可用下划线得到伪私有。 尽量避免定义以下划线开头的变量!
(1)_xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量, 需通过类提供的接口进行访问;不能用'from module import *'导入
(2)__xxx 类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。), " 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
(3)xxx 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 init()代表类的构造函数。
8、类变量和实例变量
用__dict__解释!!!
https://www.cnblogs.com/duanv/p/5947525.html
9、【类和实例都可以调用】@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。 【类和实例都可以调】@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。(只能访问类变量,不能访问实例变量) 如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。????????(只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。) 而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
https://blog.csdn.net/qq_15037231/article/details/77943109
10、Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
s1 = "-" s2 = "" seq = ("r", "u", "n", "o", "o", "b") # 字符串序列 print (s1.join( seq )) print (s2.join( seq )) r-u-n-o-o-b runoob复制代码
11、xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。