Python函式引數傳遞以及變數作用域

dicksonjyl560101發表於2017-12-26

1.傳遞多個引數

使用*號,表示函式接受多個引數
[python]
  1. >>> def f(*args):  
  2.     print args  
  3. >>> f(1)  
  4. (1,)  
  5. >>> f(1,2,3)  
  6. (123)  
  7. >>> f()  
  8. ()  
  9. >>> f(1,2)  
  10. (12)  

2.傳遞字典引數

使用**號,表示傳遞的是字典引數
[python]
  1. >>> def f1(**args):  
  2.     print args  
  3.   
  4. >>> f1(a=1,b=2)  
  5. {'a'1'b'2}  

3.將函式名作為引數傳遞
[python]
  1. #coding=utf-8               #用來支援中文,=號前後不能有空格  
  2. #minmax.py  
  3. def minmax(test,*args):  
  4.     res=args[0]  
  5.     for arg in args[1:]:    #迴圈args中內容副本  
  6.         if test(arg,res):  
  7.             res=arg  
  8.     return res  
  9.   
  10. def lessthan(x,y):return x<y  
  11. def grtrthan(x,y):return x>y  
  12.   
  13. print minmax(lessthan,4,7,9,22,2,18)  
  14. print minmax(grtrthan,4,7,9,22,2,18)  

4.傳遞混合引數
[python]
  1. >>> def f2(a,*pargs,**kargs):  
  2.     print a,pargs,kargs  
  3.   
  4. >>> f2(1,2,3,4,5,x=11,y=12)  
  5. 1 (2345) {'y'12'x'11}  

5.練習--字串∪和∩運算
[python]
  1. >>> def intersct(*args):  
  2.     res=[]  
  3.     for x in args[0]:  
  4.         for other in args[1:]:  
  5.             if x not in other:break  
  6.             else:res.append(x)  
  7.     return res  
  8.   
  9. >>> def union(*args):  
  10.     res=[]  
  11.     for seq in args:  
  12.         for x in seq:  
  13.             if not x in res:  
  14.                 res.append(x)  
  15.     return res  
  16.   
  17. >>> s1,s2,s3="SPAM","SCAM","SLAM"  
  18. >>> intersct(s1,s2)  
  19. ['S''A''M']  
  20. >>> union(s1,s2)  
  21. ['S''P''A''M''C']  

6.類成員變數和例項變數
[python]
  1. >>> class C:  
  2.         X = 33  
  3.         def m(self):  
  4.             X = 44  
  5.             self.X = 55  
  6. >>> obj = C()  
  7. >>> print obj.X  
  8. 33  
  9. >>> obj.m()  
  10. >>> print obj.X  
  11. 55  
  12. >>> C.X  
  13. 33  

6.練習--列印類的繼承關係樹
[python]
  1. <span style="font-size: 12px;">>>> def classtree(cls,indent):  
  2.     print '.'*indent,cls.__name__  
  3.     for supercls in cls.__bases__:  
  4.         classtree(supercls,indent+3)  
  5.   
  6.       
  7. >>> def instancetree(inst):  
  8.     print 'Tree of ',inst  
  9.     classtree(inst.__class__,3)  
  10.   
  11.       
  12. >>> def selftest():  
  13.     class A:pass  
  14.     class B(A):pass  
  15.     class C(A):pass  
  16.     class D(B,C):pass  
  17.     class E:pass  
  18.     class F(D,E):pass  
  19.     instancetree(B())  
  20.     instancetree(F())  
  21.   
  22.       
  23. >>> selftest()  
  24. Tree of  <__main__.B instance at 0x012E1A08>  
  25. ... B  
  26. ...... A  
  27. Tree of  <__main__.F instance at 0x012E1A08>  
  28. ... F  
  29. ...... D  
  30. ......... B  
  31. ............ A  
  32. ......... C  
  33. ............ A  
  34. ...... E  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2149294/,如需轉載,請註明出處,否則將追究法律責任。

相關文章