• 老齐python-基础9(函数)


    继续上篇

     函数

    多参数:

    >>> def foo(x,y,z,*args,**kargs):
    ...   print(x)
    ...   print(y)
    ...   print(z)
    ...   print(args)
    ...   print(kargs)
    ... 
    >>> foo('qiwsir',2,"python")  #多参数各种类型调用适用各种场景
    qiwsir
    2
    python
    ()
    {}
    >>> foo(1,2,3,4,5)
    1
    2
    3
    (4, 5)
    {}
    >>> foo(1,2,3,4,5,name="qiwsir")
    1
    2
    3
    (4, 5)
    {'name': 'qiwsir'}

    2、函数对象

      递归

      传递函数

    >>> def bar():
    ...   print("I am in bar()")
    ... 
    >>> def foo(func):   #使用func传递函数
    ...   func()
    ... 
    >>> foo(bar)
    I am in bar()
    def power_seq(func,seq):
        return [func(i) for i in seq]
    
    def pingfang(x):
        return str(x)   #return x ** 2求平方
    
    if __name__ == "__main__":
        num_seq = [111,3.14,2.91]
        r = power_seq(pingfang, num_seq)
        print(num_seq)
        print(r)

       嵌套函数

    def foo():
        def bar():
            print("bar() is running")
        bar()
        print("foo() is running")
    
    print(foo())
    >>> def foo():
    ...   a = 1
    ...   def bar():
    ...     b = a + 1
    ...     print("b=",b)
    ...   bar()
    ...   print("a=",a)
    ... 
    >>> foo()
    b= 2
    a= 1
    >>> def foo():     #另外一种定义方法就会出错Python解析器认定该变量应在bar()内部建立,而不是引用外部对象,所以报错
    ...   a = 1
    ...   def bar():
    ...     a = a + 1
    ...     print("bar()a=",a)
    ...   bar()
    ...   print("foo()a=",a)
    ... 
    >>> foo()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 6, in foo
      File "<stdin>", line 4, in bar
    UnboundLocalError: local variable 'a' referenced before assignment
    

         使用nonlocal解决!

    >>> def foo():
    ...   a = 1
    ...   def bar():
    ...     nonlocal a 
    ...     a = a + 1
    ...     print("bar()a=",a)
    ...   bar()
    ...   print("foo()a=",a)
    ... 
    >>> foo()
    bar()a= 2
    foo()a= 2

        闭包

    #!/usr/bin/env python3
    # encoding: utf-8
    
    """
    @version: ??
    @author: tajzhang
    @license: Apache Licence 
    @file: zhongli.py
    @time: 2018/2/28 15:50
    """
    
    def weight(g):
        def cal_mg(m):
            return m * g
        return cal_mg
    
    w = weight(10)   #函数对象多层引用,动态函数对象,闭包
    mg = w(10)
    print(mg)
    
    g0 = 9.78046
    w0 = weight(g0)
    mg0 = w0(10)
    print(mg0)

      

  • 相关阅读:
    Qt编写控件属性设计器12-用户属性
    C#中通过三边长判断三角形类型(三角形测试用例)
    C#中通过Selenium定位<a>标签的问题
    SharePoint自动化系列——Manage "Site Subscriptions" using PowerShell
    SharePoint API测试系列——Records.BypassLocks测试
    SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)
    放松时刻——C#分割字符串
    链表——PowerShell版
    栈——PowerShell版
    队列——PowerShell版
  • 原文地址:https://www.cnblogs.com/Taj-Zhang/p/8484112.html
Copyright © 2020-2023  润新知