zoukankan      html  css  js  c++  java
  • 老齐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)

      

  • 相关阅读:
    大数斐波那契数列
    1、硬件IO口配置;
    1通过URL对象的openStream()方法能够得到指定资源的输入流。
    题意:
    一、作用:
    倒是在网上有看到显卡没装风尚导致该问题的,最后换了一个带风扇的显卡就解决的:
    Jeewx 捷微管家操作配置文档(开源版本号)
    工业控制系统USB存储设备可信管理方案的(ICICS2015)论文PPT:TMSUI: A Trust Management Scheme
    java.lang.ArithmeticException: Rounding necessary
    springcloud 熔断处理
  • 原文地址:https://www.cnblogs.com/Taj-Zhang/p/8484112.html
Copyright © 2011-2022 走看看