• 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
    
  • 相关阅读:
    模块:标准库Shelve
    模块:标准库shutil
    模块:标准库sys
    关于html中的文本节点问题
    MVVM
    iOS 检测有没有安装其它应用 和ios9下要注意的地方
    iOS9对SDK的影响(iOS9适配必看)
    CircleLayout
    MapSearch 阅读随笔
    苹果官网 demo The Elements 阅读随笔
  • 原文地址:https://www.cnblogs.com/bsszds930/p/13253788.html
Copyright © 2020-2023  润新知