函数

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. 匿名函数

  1. 匿名函数

    """
    
    lambda  匿名函数
    
    lambda 参数: 表达式   : 分隔符
    
    """
    # 单个传值,多个传值与其一样,只是变量多少不同
    
    # 普通式
    
    
    # 声明一个函数
    def func(a):
    
     # 返回值
     return a ** 2
    
    
    # 调用
    # 9
    print(func(3))
    
    
    # 匿名式
    
    # 匿名函数
    num = (lambda a: a ** 2)(3)
    
    # 打印
    # 9
    print(num)
    
  2. 匿名函数拼接

# 拼接
num = lambda a = 'i', b = 'love', c = 'you': a + ' ' + b + ' ' + c

# 打印
# i love you
print(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


# 调用
# .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")

你可能感兴趣的:(python)