python 3関数のステップアップ補足


Python 3関数のステップアップ補足は、「Python 3入門から実戦まで」という本を参考にしています
  • 変形可能パラメータ:
  • ディクショナリパラメータ:
  • 解除パラメータリスト:
  • 関数は容器内に置くことができます:
  • 関数は、戻り値として使用できます:
  • 関数はネストして使用できます:
  • ネスト関数ケース2:
  • 関数は、他の関数のパラメータとして使用できます:
  • lambda式:
  • 内蔵map関数
  • mapケース2
  • filter

  • 変形可能パラメータ:
    変形可能パラメータは、次のいずれかです.
    // An highlighted block
    def hello(*name):
        print(name)
    hello("10")
    hello("  ")
    
    
          :
    ('10',)
    ('  ',)
    

    ディクショナリパラメータ:
    ディクショナリパラメータは、関数に渡されるパラメータがディクショナリタイプ(キー値ペア)であることを示します.
    // An highlighted block
    def hello(**name):
        print(name)
    hello(year='2020',month=10,day=10)
    
    
          :
    {
         'year': '2020', 'month': 10, 'day': 10}
    

    注意:関数定義に変形可能パラメータと辞書パラメータがある場合は、辞書パラメータは変形可能パラメータの後ろにある必要があります.
    パラメータのリストを非表示にするには、次の手順に従います.
    2つの「*」で辞書を解封し、1つの「*」で他のオブジェクトを解封します.
    // An highlighted block
    def f(a,b):
        print(a+b)
    ab = [3,5]
    f(*ab)
    
    
          :
    8
    
    
    ab = [3,7]
    l = [i for i in range(*ab)]
    print(l)
    
    
    
          :
    [3, 4, 5, 6]
    
    
    d = {
         "name1":"  ","name2":"   "}
    def f(name1,name2):
        print(name1)
        print(name2)
    f(**d)
    
    
          :
      
       
    
       def f():
           '''
                 
           '''
           print("      ")
           return 1
       
       print(help(f))
             :
       
    	f()
    	          
    	
    	None
    

    関数はコンテナ内に配置できます.
    関数をコンテナ内に配置するには、次の手順に従います.
    // An highlighted block
    	def square(x):
            return x*x
            
        def cube(x):
            return x*x*x
        
        funcs = {
         
            'sq':square,
            'cb':cube,
            }
        x = 2
        print(square(x))
        print(cube(x))
        print("-----   -----")
        for func in funcs:
        	print(funcs[func](x))4
    8
    -----   -----
    4
    8
    
    // An highlighted block
    	def square(x):
            return x*x
            
        def cube(x):
            return x*x*x
        
        funcs = {
         
            'sq':square,
            'cb':cube,
            }
        x = 2
       
        func = [square,cube]
        for fun in func:
            print(fun(x))
          :
    4
    8
    

    関数は戻り値として使用できます.
    ある関数に別の関数の名前を返します.
    // An highlighted block
    	def f(a):
            print(a)
        def f1():
            return f
        a = f1()
        a(0)0
    

    関数はネストして使用できます.
    1つの関数で別の関数を定義して呼び出します.
    // An highlighted block
    def Square(x):
    	def f():
        	return x*x
        y = f()
        return y*x
        
    print(Square(5))
    
          :  
    125
    

    ネストされた関数のケース2:
    両者の異同を比較するとnonlocalはグローバル変数を宣言することに相当することに注意してください.
    // An highlighted block
    def Square(x):
           def f():
               #nonlocal x
               x = 2
               return x*x
           	y = f()
            return y+x
    print(Square(5))  
          
    9
    
    def Square(x):
           def f():
               nonlocal x
               x = 2
               return x*x
           	y = f()
            return y+x
    print(Square(5))  
          
    6
    

    関数は、他の関数のパラメータとして使用できます.
    // An highlighted block
    def square(x):
    	return(x*x)
    def SquList(L,fun):
    	for e in L:
    		print(fun(e),end=" ")
    SquList([2,3,4,5],square)
          
    4 9 16 25
    

    Lambda式:
    関数を定義することに相当します
    // An highlighted block
    add = lambda x,y:x+y//add    
    print(add(3,5))
    
           8
    

    内蔵map関数
    *mapの2番目のパラメータは、複数の反復可能オブジェクトを受け入れます.関数のプロトタイプ:map(function,iterable)、iterableは変形可能パラメータ、functionは関数で、反復器オブジェクトを返します.
    // An highlighted block
    def Square(x):
    	return x*x
    l = [1,2,3,4,5]
    ret = map(Square,l)//    l          Square  
    print(list(ret))
    
    #       ,        
    print(tuple(ret))[1, 4, 9, 16, 25]
    ()
    

    mapケース2
    // An highlighted block
    ret = map(lambda x,y:x*y,[1,4,3],[3,5,2,6])
    print(tuple(ret))
    ret = map(lambda x,y:(x*y,x+y),[1,4,3],[3,5,2,6])
    print(tuple(ret))
    
    
    
    (3, 20, 6)
    ((3, 4), (20, 9), (6, 5))
    

    filter
    filterはTrueと判断された要素を返し、関数の原型はfilter(function of None,interable)である.
    // An highlighted block
    a = [i for i in range(-5,5)]
    ret = filter(lambda x:x<0,a)
    print(list(ret))
    
          :
    [-5, -4, -3, -2, -1]