1. 函数根底

1. 函数的定义

"""函数就是封装格局def 函数名():    函数体(封装内容)函数名()"""# 申明(函数封装)def know_error():    # 打印    # 控制台查看    print("我错了")    print("我错了")    print("我错了")    print("我错了")    print("我错了")# 调用know_error()# 申明(函数封装)def func():    # 返回值    return "hello world"# 拼接num = func() + " " + "python"# 打印# hello world pythonprint(num)

2. 函数参数及其类型

# 必备参数# 申明def func(name_1):  # 形参    # 循环    for i in range(10):        # 打印        # 控制台查看        print("我是{},我晓得错了".format(name_1))# 调用func("qi")  # qi  实参# return# 申明def func_1(name_2):    # 定义一个列表    li = []    # 循环    for i in range(10):        # 赋值        test = "我是{},我晓得错了".format(name_2)        # 增加到列表        li.append(test)    # 返回值    return li# 其他人也能够调用print(func_1("老王"))# 默认参数# 有就用实参,没有就用形参def func_2(a, b=5):    # 打印    print(a, "---", b)# 调用# 9 --- 5func_2(9)# 调用# 9 --- 9func_2(9, 9)# 不定长参数(地位参数)def func_3(num, *args, **kwargs):    # 打印    # 1    print(num)    print(args)    print(kwargs)# 调用# qi# (1, 2, 3, 4, 5)# {'num_1': 12, 'num_2': 13, 'num_3': 15}func_3("qi", 1, 2, 3, 4, 5, num_1=12, num_2=13, num_3=15)

3. 内置函数

# 查看函数# ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']# print(dir(__builtins__))# filter  过滤def func_4(x):    # 返回值    return x > 10# 赋值li_1 = [2, 3, 5, 8, 22, 35, 68, 79]# 筛选# [22, 35, 68, 79]print(list(filter(func_4, li_1)))# zip  配对# 赋值li_2 = [22, 33, 55, 88]# 配对# {2: 22, 3: 33, 5: 55, 8: 88}print(dict(zip(li_1, li_2)))# map  对立对格局进行批改def func_5(y):    # 返回值    return y * 10# 打印后果# [220, 330, 550, 880]print(list(map(func_5, li_2)))

2. 函数进阶

1. 匿名函数

  1. 匿名函数

    """lambda  匿名函数lambda 参数: 表达式   : 分隔符"""# 单个传值,多个传值与其一样,只是变量多少不同# 一般式# 申明一个函数def func(a): # 返回值 return a ** 2# 调用# 9print(func(3))# 匿名式# 匿名函数num = (lambda a: a ** 2)(3)# 打印# 9print(num)
  2. 匿名函数拼接
# 拼接num = lambda a = 'i', b = 'love', c = 'you': a + ' ' + b + ' ' + c# 打印# i love youprint(num())
  1. 内置函数与匿名函数搭配应用
# 内置函数与匿名函数搭配应用# 打印# [7, 9, 11, 15]print(list(filter(lambda x: x > 5, [1, 3, 7, 9, 11, 15])))# 案例# 打印100以内的2的倍数的数字# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]print(list(filter(lambda x: True if x % 2 == 0 else False, range(1, 101))))

2. 作用域

"""作用域内,范畴越小,优先级越高能够应用全局变量,要批改全局变量必须要 global"""# 赋值name = "小明"  # 全局变量# 申明def func_1():    name = "小文"  # 局部变量    # 打印    # 小文    print(name)# 调用func_1()# 打印# 小明print(name)# global  批改全局变量# 赋值num_1 = 123# 申明def func_2():    # 批改全局变量    global num_1    # 计算    num_1 = num_1 + 4  # 在函数里不容许去批改全局变量    # 打印    print(num_1)# 调用func_2()# 打印print(num_1)# 批改局部变量# 申明def func_3():    # 赋值    num_2 = 123    # 申明    def func_4():        # 批改局部变量        nonlocal num_2        # 计算        num_2 = num_2 + 123        # 打印        # 246        print(num_2)    # 调用    func_4()# 调用func_3()

3. 闭包

"""闭包 函数里嵌套函数,外层函数返回里层函数的援用"""# 这是一个闭包# 申明def func_1():    # 申明    def func_2():        # 返回值        return "hello"    # 返回值    return func_2# 调用# <function func_1.<locals>.func_2 at 0x00000296EED04550>  # 代表的是func_2这个函数体print(func_1())# 案例一# 申明def func_3():    # 赋值    num = 1    # 申明    def func_4():        # 返回值        return num + 3    # 返回值    return func_4# 调用# 4print(func_3()())# 案例二# 应用(1)则正文(2),反之一样# 赋值li = []# 遍历for i in range(4):    # 打印i的值    print(i)    # 申明一个函数    def func():        # 返回i的值        return i    # 调用则是增加的数值    li.append(func())  # (1)    # 不调用则是增加的func这个函数体    li.append(func)  # (2)# 查看一下列表print(li)# 遍历取出列表中的值for j in li:    # 打印    print(j)  # (1)    # 打印并调用    print(j())  # (2)

4. 递归

"""递归"""# 申明def func(num):    # 判断    if num == 1:        # 返回值        return 1    # 返回值    return num + func(num - 1)# 打印调用# 15print(func(5))

5. 回调函数

"""回调函数  能够用我提供给你的回调函数,也能够不必我的用其它的"""# 申明次要执行的函数def girlfriend_go_home(tell_me_safe, b):    # 判断    if b == "i love you":        # 调用另一个函数        tell_me_safe()    # 否则    else:        # 打印        print("rolling")# 回调函数def tell_me_safe():    # 打印    print("honey, i got home")# 调用# honey, i got homegirlfriend_go_home(tell_me_safe, "i love you")