美文网首页
python学习日记2-函数

python学习日记2-函数

作者: livein80 | 来源:发表于2023-12-28 19:25 被阅读0次

    函数

    ++++++++++++++++++++++++++++++

    1. 函数传参和不同参数,不定长参数的解包

    a.固定参数
    b.指定参数
    c.不定参数(元组) *arg(解析元组)和 **arg(解析字典)

    #固定参数,位置参数
    def fn():
        print('fn 我是函数!')
    
    # 不固定参数,使用元组,*c只能接受非指定参数
    def fn2(a,b,*c):
        print(a,b,c)
    fn2(1,2,3,4)
    
    # 指定参数,使用元组
    def fn3(a,*b,c):
        print(a,b,c)
    
    fn3(1,2,3,c=4)
    #打印值为: 1 (2, 3) 4
    
    # **a 可以接受指定参数,并保持在一个字典里
    def fn4(**a):
        print(a)
    fn4(a=1,b=2,c=3)
    #打印值为:{'a': 1, 'b': 2, 'c': 3}
    
    
    2.递归,返回值 作用域 命名空间
    3. 作用域;函数外的都是全局作用域。函数内部的为内部作用域
    pam = 1. # 全局变量
    def a():
        global pam # 修改全局变量时,需要添加global
        pam =10     #内部变量,不能直接修改到全局变量
        print('内部:',pam)
    
    a()
    print(pam)
    
    
    4.命名空间

    命名空间:scope = locals() 返回一个字典

    #获取命名空间
    pam=1
    scope = locals() 
    print(scope)
    输出内容为 #{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10aa61c10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/livein80/PycharmProjects/pythonProject/day01/函数.py', '__cached__': None, 'pam': 1, 'scope': {...}}
    
    #直接赋值命名空间属性
    scope['c']=100
    print('c--',c)
    # 输出:c-- 100
    
    
    # 函数内部也可以添加明名空间scope
    def a():
        pam =10
        scope1 = locals()
    print(a())
    
    #输出:{'pam': 10}
    
    
    5.递归式函数

    递归式函数:有2个条件,一个是基线条件,一个是递归条件

    '''
     定一个求幂函数
     过程分析:
     10 ** 5  = 10 * 10 **4
     10 ** 4  = 10 * 10 **3
     10 ** 3  = 10 * 10 **2
     ...
     10 ** 1 = 10
    '''
    def fn_m(n,i):
        # 1.基线条件 i=1,跳出递归
        if i == 1:
            return n
        # 2. 递归条件 10 ** 5 = 10 * 10 ** (5-1)
        return n * fn_m(n,i-1)
    
    
    print(fn_m(2,4))
    #输出为:16
    
    
    '''
    判断字符串是否是回文字符串
    递归功能分析:
    判断第一个跟最后一个字母是否相同 a bcdcb a
    判断第一个跟最后一个字母是否相同 b cdc b
    判断第一个跟最后一个字母是否相同 c d c
    最后对字符串如果长度<2 那么是回文字符串 d
    '''
    def fn_m2(pam):
        # 1.基线条件
        if len(pam) < 2:
            return True
        elif pam[0] != pam[-1]:
            return False
    
        # 2.递归条件
        return fn_m2(pam[1:-1])
    
    
    print(fn_m2('abcdcba'))
    
    6.高级函数

    **a.接收一个或多个函数作为参数

    # 定义一个函数用来检测大于5的数
    def fn3(i):
        if i > 5:
            return True
        return False
    def fn4(i):
        if i % 3 == 0:
            return True
        return False
    def fn(f,lst):
        # 参数lst 要进行筛选的列表
        # 创建一个新的列表
        new_lst = []
        # 对要筛选的列表进行遍历
        for n in lst:
            # 判断n的奇偶
            if f(n):
                new_lst.append(n)
        # 返回新的列表
        return new_lst
    
    print(fn(fn4,lst))
    

    b. 闭包:通过函数创建只有内部才能访问到的变量(外部不能看到),将一些私有数据藏到闭包中
    设置一个函数中全局变量放置在函数之中,而又尽量的不会被其他变量污染。

    def make_fn():
        nums2 = []
        # 定义一个函数来实现求平均数
        def fn1(n):
            nums2.append(n)
            return sum(nums2)/len(nums2)
        return fn1
    m = make_fn()
    
    print(m(10)) # 输出:10
    print(m(20)) # 输出:15
    
    7.匿名函数

    匿名函数:又称为lambda函数表达式,是专门用来创建一些简单的函数

    # 例如: 使用函数的方式来做一个2个数字相加的函数
    def fn5(a,b):
        return a+b
    
    # 使用 匿名函数的方式 lambda
    fn6=(lambda a,b : a+b)(20,30)
    print(fn6)
    
    #输出: 50
    
    8.装饰器
    • 定义一个函数来对其他的函数进行扩展,是其他的函数可以在执行前打印开始执行,执行后打印执行结束.
    • 使用装饰器的方法主要有2种,如下:
      • 通过装饰器,可以在不修改原函数的情况下,来对函数进行一个扩展
      • @XXX的方式
    def add(a,b):
        return a+b
    
    def start_end(old):
        #创建一个新函数
        def new_fn(*args,**kwargs):
            print('函数开始执行!')
            r = old(*args,**kwargs)
            print('函数执行结束!')
            return r
        return new_fn
    
    #第一种方式
    nw_fn = start_end(add)
    print(nw_fn(10,12))
    
    #第er种方式
    @start_end
    def speak(info):
        print('speak info!')
    
    speak('hello world')
    

    相关文章

      网友评论

          本文标题:python学习日记2-函数

          本文链接:https://www.haomeiwen.com/subject/brurndtx.html