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. 匿名函数
匿名函数
"""lambda 匿名函数lambda 参数: 表达式 : 分隔符"""# 单个传值,多个传值与其一样,只是变量多少不同# 一般式# 申明一个函数def func(a): # 返回值 return a ** 2# 调用# 9print(func(3))# 匿名式# 匿名函数num = (lambda a: a ** 2)(3)# 打印# 9print(num)
- 匿名函数拼接
# 拼接num = lambda a = 'i', b = 'love', c = 'you': a + ' ' + b + ' ' + c# 打印# i love youprint(num())
- 内置函数与匿名函数搭配应用
# 内置函数与匿名函数搭配应用# 打印# [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")