博客
关于我
Python基础-函数篇
阅读量:797 次
发布时间:2023-03-07

本文共 4417 字,大约阅读时间需要 14 分钟。

本节内容

本节将深入探讨Python编程语言中的函数及其应用,重点介绍函数的基本语法、特性、定义方式以及函数式编程的概念。通过多个实例分析,理解函数在程序设计中的重要性,并掌握如何利用函数实现代码重用、保持一致性和可扩展性。


函数的基本特性及使用场景

函数是编程中的基本单元,它通过将特定的任务封装成独立的代码块,实现了代码的复用和模块化。在Python中,函数可以接受任意数量的参数并返回一个值,或者没有返回值(返回None)。以下是函数的几个关键特性:

  • 可重用性

    函数允许我们重复利用已有的代码逻辑,避免了代码冗余。例如,多个函数可以共享相同的日志写入逻辑,减少代码量。

  • 一致性

    函数提供了统一的接口,确保不同模块之间的代码协调一致,减少了潜在的错误风险。

  • 可扩展性

    通过定义新的函数,可以轻松扩展程序的功能,满足不同场景的需求。


  • 函数与函数式编程

    函数式编程(Functional programming)是一种以函数为中心的编程范式,其核心思想是通过一系列函数调用来实现复杂任务。与传统的面向对象编程相比,函数式编程更注重代码的简洁性和可读性。

    函数式编程的特点

  • 无状态

    函数式编程的函数通常不依赖外部状态,不修改变量,使用函数的结果仅依赖于输入参数。

  • 函数作为首等对象

    函数可以作为参数传递、返回或存储,形成灵活的代码结构。

  • 偏函数

    函数可以接受特定的参数类型或处理方式,提高代码的灵活性。


  • 函数的定义与使用

    在Python中,函数的定义采用 def 关键字,格式如下:

    def func_name(param1, param2, ...):
    # 函数体
    return return_value

    函数定义的关键要素

  • def:定义函数的关键字。
  • 函数名:函数的唯一标识符。
  • 形参:参数的定义方式,包含位置参数、关键字参数、默认参数、可变参数和关键字参数。
  • 函数体:实现具体的业务逻辑。
  • return:定义返回值,或者省略不返回值(默认返回None)。
  • 示例

    def func1():
    '''testing'''
    print('in func1')
    return 0
    def func2():
    '''testing'''
    print('in func2')
    return
    x = func1()
    y = func2()
    print('from func1 return is:', x)
    print('from func2 return is:', y)

    为何使用函数?

    函数是编程中的核心概念,它允许我们将复杂的逻辑拆分成多个简单的函数,通过函数的组合完成任务。以下是使用函数的主要优势:

  • 代码重用

    函数可以多次使用,避免重复代码。

  • 保持一致性

    不同函数之间的接口一致,减少错误。

  • 可扩展性

    新增功能时,只需定义新的函数或扩展现有函数。

  • 示例

    例一:多次执行相同的日志逻辑

    def logger():
    with open('a.txt', 'a+') as f:
    f.write('end action\n')
    def test1():
    print('in test1')
    logger()
    def test2():
    print('in test2')
    logger()
    def test3():
    print('in test3')
    logger()
    test1()
    test2()
    test3()

    例二:优化后的代码

    def logger():
    time_format = '%Y-%m-%d %X'
    time_current = time.strftime(time_format)
    with open('a.txt', 'a+') as f:
    f.write(f'{time_current} end action\n')
    def test1():
    print('in test1')
    def test2():
    print('in test2')
    def test3():
    print('in test3')
    test1()
    test2()
    test3()

    例三:增加时间功能

    import time
    def logger():
    time_format = '%Y-%m-%d %X'
    time_current = time.strftime(time_format)
    with open('a.txt', 'a+') as f:
    f.write(f'{time_current} end action\n')
    def test1():
    print('in test1')
    def test2():
    print('in test2')
    def test3():
    print('in test3')
    test1()
    test2()
    test3()

    函数的返回值

    函数可以返回任何数据类型,包括数字、字符串、列表、字典、元组等。返回值的类型决定了函数的用途。

    返回值规则

  • 返回0个值:默认返回None。
  • 返回1个值:返回该值本身。
  • 返回多个值:返回元组(tuple)。
  • 示例

    def test01():
    pass
    def test02():
    return 0
    def test03():
    return 0, 'hello', ['alex', 'wupeiqi'], {'name': 'alex'}
    t1 = test01()
    t2 = test02()
    t3 = test03()
    print('test01 return:', type(t1), t1)
    print('test02 return:', type(t2), t2)
    print('test03 return:', type(t3), t3)

    函数的调用与参数传递

    函数调用通过 () 符号触发,参数可以通过位置或关键字方式传递。

    位置参数与关键字参数

  • 位置参数:按顺序传递,必须与函数定义的形参一一对应。
  • 关键字参数:无需固定位置,可以传递任意顺序的参数。
  • 示例

    def test(x, y=2):
    print(x)
    print(y)
    test(1, y=3) # 关键字参数方式
    test(y=2, x=1) # 关键字参数方式
    test(1, 2)

    默认参数

    def test(x, y=2, soft1=True, soft2=True):
    print(x)
    print(y)
    print(soft1)
    print(soft2)
    test(1, 3) # 只传x和y
    test(y=2, x=1) # 关键字参数方式

    全局与局部变量

    在Python中,全局变量属于程序的顶层,局部变量只在函数内部使用。

    示例

    # 全局变量
    school = "Oldboy edu."
    def change_name(name):
    global school
    school = "Mage Linux"
    print("before change", name, school)
    name = "Alex li"
    print("after change", name)
    name = "alex"
    change_name(name)
    print(name)
    print("school:", school)

    注意事项

    • 只有字符串和单独的整数不能在函数内部修改。
    • 列表、字典、集合等可以在局部变量中修改。

    递归函数

    递归函数在函数内部调用自身,适用于分解复杂任务或处理递归关系。

    示例

    def calc(n):
    print(n)
    if n // 2 == 0:
    return n
    return calc(n // 2)
    calc(10)

    注意事项

    • 递归需要有明确的结束条件。
    • 递归深度过深会导致栈溢出。

    匿名函数

    匿名函数(lambda)可以直接将表达式与函数调用结合,简化代码。

    示例

    calc = lambda n: n ** n
    print(calc(10))
    # 或者
    res = map(lambda x: x ** 2, [1, 5, 7, 4, 8])
    for i in res:
    print(i)

    函数式编程的核心思想

    函数式编程通过函数的组合实现任务,代码更简洁且易于理解。以下是函数式编程的典型应用场景:

  • 数据处理:如字符串处理、列表操作等。
  • 数学计算:如阶乘、平方根等。
  • 图形处理:如图像处理、游戏逻辑等。
  • 示例

    data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
    def binary_search(dataset, find_num):
    if len(dataset) > 1:
    mid = int(len(dataset) // 2)
    if dataset[mid] == find_num:
    return dataset[mid]
    elif dataset[mid] > find_num:
    return binary_search(dataset[:mid], find_num)
    else:
    return binary_search(dataset[mid+1:], find_num)
    else:
    return dataset[0] if dataset[0] == find_num else None
    print(binary_search(data, 66))

    高阶函数

    高阶函数是指函数的参数可以是另一个函数,具有更强的灵活性。

    示例

    def add(a, b, f):
    return f(a) + f(b)
    res = add(3, -6, abs)
    print(res)

    总结

    本节我们深入探讨了Python中的函数及其应用,了解了函数的定义、使用场景、返回值、参数传递方式以及递归的原理。通过实例分析,我们掌握了如何利用函数实现代码重用、保持一致性和可扩展性。函数式编程的核心思想也让我们对编程有了全新的认识。

    转载地址:http://olofk.baihongyu.com/

    你可能感兴趣的文章
    Python random和json模块
    查看>>
    Python random模块seed理解
    查看>>
    python range()函数
    查看>>
    Python rdflib可传递查询
    查看>>
    python redis 集群_python 搭建redis集群
    查看>>
    python redis连接,在Python中使用Redis连接池的正确方法
    查看>>
    python regex_Python RegEx
    查看>>
    Python Seborn绘制空白直方图
    查看>>
    Python Selenium - 获取href值
    查看>>
    Python Selenium实现自动化测试及Chrome驱动使用!
    查看>>
    Python Selenium搭建UI自动化测试框架
    查看>>
    Python Selenium模块详解
    查看>>
    Python selenium爬取影评生成词云图
    查看>>
    Python selenium自动化测试框架实战 —— 登录测试案例
    查看>>
    Python Selenium设计模式 —— POM
    查看>>
    Python Serial:如何使用 read 或 readline 函数一次读取多个字符
    查看>>
    Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
    查看>>
    Python setup.py:数据文件无法复制目录:不存在或不是常规文件
    查看>>
    Python Shell下使用matplotlib
    查看>>
    Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
    查看>>