1. 函数基础
1. 函数的定义
"""
函数就是封装
格式
def 函数名():
函数体(封装内容)
函数名()
"""
# 声明(函数封装)
def know_error():
# 打印
# 控制台查看
print("我错了")
print("我错了")
print("我错了")
print("我错了")
print("我错了")
# 调用
know_error()
# 声明(函数封装)
def func():
# 返回值
return "hello world"
# 拼接
num = func() + " " + "python"
# 打印
# hello world python
print(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 --- 5
func_2(9)
# 调用
# 9 --- 9
func_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 # 调用 # 9 print(func(3)) # 匿名式 # 匿名函数 num = (lambda a: a ** 2)(3) # 打印 # 9 print(num)
- 匿名函数拼接
# 拼接
num = lambda a = 'i', b = 'love', c = 'you': a + ' ' + b + ' ' + c
# 打印
# i love you
print(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
# 调用
# .func_2 at 0x00000296EED04550> # 代表的是func_2这个函数体
print(func_1())
# 案例一
# 声明
def func_3():
# 赋值
num = 1
# 声明
def func_4():
# 返回值
return num + 3
# 返回值
return func_4
# 调用
# 4
print(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)
# 打印调用
# 15
print(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 home
girlfriend_go_home(tell_me_safe, "i love you")