zoukankan      html  css  js  c++  java
  • 函数入门后续

    函数对象

    函数对象的四大功能

    1、引用

    x = 'hello nick'
    y = x
    
    f = func
    print(f)
    ##<function func at0x10af72f28>
    

    2、当作参数传给一个函数

    len(x)
    def foo(m):
        m()
    foo(func)
    ##from func
    

    3、可以当作函数的返回值

    def foo(x):
        return x
    res = foo(func)
    print(res)
    res()
    ##<function func at 0x10af72f28>
    from func
    

    4、可以当作容器类型的元素

    l = [x]
    
    function_list = [func]
    function_list[0]()
    ##from func
    

    函数的嵌套定义

    函数内部定义的函数,无法在函数外部使用内部定义的函数

    def f1():
        def f2():
            print('from f2')
        f2()
    
    
    f2()  # NameError: name 'f2' is not defined
    
    
    def f1():
        def f2():
            print('from f2')
        f2()
    
    
    f1()
    ##from f2
    

    现在有一个需求,通过给一个函数传参即可求得某个圆的面积或者圆的周长。也就是说把一堆工具丢进工具箱内,之后想要获得某个工具,直接从工具箱中获取就行了。

    from math import pi
    
    
    def circle(radius, action='area'):
        def area():
            return pi * (radius**2)
    
        def perimeter():
            return 2*pi*radius
        if action == 'area':
            return area()
        else:
            return perimeter()
    
    print(f"circle(10): {circle(10)}")
    print(f"circle(10,action='perimeter'): {circle(10,action='perimeter')}")
    
    ##circle(10): 314.1592653589793
    ##circle(10,action='perimeter'): 62.83185307179586
    

    二、函数的嵌套调用

    def max2(x, y):
        if x > y:
            return x
        else:
            return y
    
    def max4(a, b, c, d):
        res1 = max2(a, b)
        res2 = max2(res1, c)
        res3 = max2(res2, d)
        return res3
    
    print(max4(1, 2, 3, 4))
    #4
    

    名称空间和作用域

    名称空间:存放(变量名、函数名)

    内置名称空间:python解释器独有的

    函数调用必须得定义,从来都没定义过,python解释器启动的时候python的内置方法,python解释器停止解释之后才会被消毁

    全局名称空间:除了内置和局部,其他的都是全局

    局部名称空间:函数内定义的变量名、函数名都存放在局部名称空间

    局部也需要自己定义,必须得在函数调用之后才会生成,调用之后就会销毁

    z=10
    def f1():
        x=10
        def f2():
            y=10
            print('from f2')
    ##三种名称空间的执行顺序:内置---》全局---》局部
    
    def f1():
        x=1
    f1()
    print(x)
    ##三种名称空间的查找顺序:首先从自己当前位置开始---》局部---》全局---》内置
    
    既然选择了远方,只能风雨兼程
  • 相关阅读:
    POJ2454 Jersey Politics
    Codeforces 798D
    BZOJ4556 HEOI2016 字符串
    BZOJ1009 [HNOI2008]GT考试
    POJ3693 Maximum repetition substring
    POJ1226 Substrings
    POJ3450 Corporate Identity
    POJ3415 Common Substrings
    CSS Sprites(CSS精灵) 的优缺点
    window.location.replace
  • 原文地址:https://www.cnblogs.com/lzss/p/11353032.html
Copyright © 2011-2022 走看看