zoukankan      html  css  js  c++  java
  • python 易错点

    摘自: http://www.py3study.com/Article/details/id/16424.html

    is 判断是否是一个ID, == 判断内容是否一致。
    深拷贝指的是复制内容,单独开辟一个内存,浅拷贝指的是两个变量同时指向一个内存ID。
    闭包: 当外部参数确定时,内部函数参数可以反复调用。
    # is 判断是否是一个ID, == 判断内容是否一致。
    a = 'hello world'
    b = 'hello world'
    a == b  #返回True 
    a is b  #返回False 
    
    
    import copy
    a = [1,2,3,4,5]
    b = a   #浅拷贝,a,b同时指向一个id,当其中一个修改时,另外一个也会被修改。
    c = copy.deepcopy(a) #深拷贝,c单独开辟一个id,用来存储和a一样的内容。
    d =a[:] #这样也是深拷贝。
    e = copy.copy(a) #当拷贝内容是可变类型时会进行深拷贝,如果是不可变类型时会进行浅拷贝。
    
    
    # 一个对象具有 iter方法的才能称为可迭代对象,使用yield生成的迭代器函数,也有iter方法。凡是没有__next__()方法的不是是生成器。(这里的方法都是魔法方法,是内置方法,可以使用dir()查看)
    for i in '',[],(),{},{:}
    
    # 当一个函数定义在另一个函数内,且使用到外部函数的参数。整个代码块称为闭包。当外部参数确定时,内部函数参数可以反复调用。
    def num(num): 
          def num_in(nim_in): 
    	 return num + num_in 
          return num_in #返回内部函数的引用。
    a = num(100) # 将参数为100的函数num接收,并赋值给a,只不过这个返回值是一个函数的引用。等于 a = num_in,注意这里接收的不光是函数本身,还有已经传递的参数。
    b = a(100)   # 调用函数a,即num_in,并传递一个参数100,返回值给b。
    
    装饰器: 原理就是将原有的函数名重新定义为以原函数为参数的闭包。
    def function(func): # 闭包
          def func_in(): # 闭包内的函数
    	print('这里是需要装饰的内容,就是需要添加的内容')
    	func() 
          return func_in
    	
    def test(): 	#需要被装饰修改的函数。
          print('无参函数的测试')
    	
    test = function(test) 	
    test() # 将会调用闭包内的函数func_in()。所以将会起到装饰修改的作用,最后会再次调用原函数test()。
    
    @function   # 装饰器的python写法,等价于test = function(test),并且无需调用当代码运行道这里,Python会自动运行。
    def test():
          print('无参函数的测试')
    test() 	#这里再次调用函数时,将会产生修改后的效果。
    
    
    # 装饰带有参数的函数
    def function(func): 
    	def func_in(*args,**kwargs): 	# 闭包内的函数,因为装饰器运行的实则是闭包内的函数,所以这里将需要有形参用来接收原函数的参数。
    		print('这里是需要装饰的内容,就是需要添加的内容')
    		func(*args,**kwargs) 	# 调用实参函数,并传入一致的实参。
    	return func_in
    	
    @function
    def test():
    	print('无参函数的测试')
    	
    test(5,6) 	# 再次掉用test()的时候,其实是将会调用闭包内的函数func_in()。所以将会起到装饰修改的作用,最后会再次调用原函数test()。
    
    # 装饰带有返回值的函数
    def function(func): 
    	def func_in(*args,**kwargs): 
    		print('这里是需要装饰的内容,就是需要添加的内容')
    		num = func(*args,**kwargs) 
    		return num #将接受到的返回值再次返回到新的test()函数中。
    	return func_in
    @function
    def test(a,b):
    	return a+b # 返回实参的和
    
    
    # 带有参数的装饰器
    def func(*args,**kwags):
    	def function(func): 
    		def func_in(*args,**kwargs): 
    			print('这里是需要装饰的内容,就是需要添加的内容')
    			num = func(*args,**kwargs) 
    			return num 
    		return func_in
    	return function
    
    @func(50)  #这里会先运行函数func,并传入参数,之后会再次运行闭包函数进行装饰, @func(50)>>@function,然后将由@function继续进行装饰修改。
    def test(a,b):
    	print('这是一个函数')
    	return a+b
    
  • 相关阅读:
    Java作业一 (2017-9-10)
    遇到的坑1:传奇SF找不到背包数组
    黑白逆向编程课程笔记 18.局部&全局变量&参数详解
    黑白逆向编程课程笔记 16.浮点指令
    黑白逆向编程课程笔记 13.堆栈
    黑白逆向编程课程笔记 11.寄存器&补充
    SVN的trunk branches tags(一)
    JBoss Resteasy是一个遵守JAX-RS 标准的REST的开源项目
    JBOSS是sun公司的应用程序服务器,就象weblogic,jboss包含tomcat的所有功能.
    软件架构(体系结构,Architecture)和软件框架
  • 原文地址:https://www.cnblogs.com/bsszds930/p/13253788.html
Copyright © 2011-2022 走看看