GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • 莫烦PYTHON
  • 学习 ▾
  • 推荐学习顺序
  • 交互式学Python
  • 多进程 multiprocessing
  • 多线程 threading
  • 窗口视窗 Tkinter
  • 有趣的机器学习
  • 强化学习 Reinforcement Learning
  • 进化算法 Evolutionary Algorithm
  • Tensorflow
  • PyTorch
  • Theano
  • Keras

This view

  • Original page
  • New address

GeezerVison is showing mofanpy.com — Function 函数 | 莫烦Python

  • 支持

📢

莫烦有新起点啦!「莫烦 x 无限可能」— 关于 AI、行业、产品、教育的经验思考,欢迎来新站看看 →

« 数据种类 Class 类 »

Function 函数

作者: 莫烦 编辑: 莫烦 发布于: 2021-05-01

程序编写中,我常会重复写一些功能,比如查询文件时间,查询文件名字等等, 如果每次做这些操作的时候,我都需要重新写一遍这些基础功能,岂不是十分费力? 有没有办法将这些基础功能复用起来,后续我只需要引用到这个功能,多省事。 好在Python中就有这样的做事方式。

定义函数¶

定义一个可以被复用的函数是第一步,想象我没有函数的时候,对多个文件名进行一种规则性修改的时候, 我可能这样做。

要修改的文件少还好,我写两行就搞定,万一这种操作变多,我得写到什么时候? 要不我就定义一个功能帮我减轻负担吧。

在这个里面,我们还运用到了函数的输入参数,其实一个函数也可以没有输入参数的,比如:

如果像上面这样的功能,我们还想拿出来函数处理的结果,其实也就是让函数可以 return 出来一个值。

参数设置¶

其实在数学运算中,函数的概念还是很常见的,比如你想得到一个一元二次方程的值,传入x得到y。 你可以留意下我下面的传参过程,你在参数多的时候最好把参数名也写上,避免自己搞混了。

另外,有些函数的参数并不是一直变化的,我们还可以设置一个参数默认值,节省写代码的时间和代码量。 如果设置了这些默认值,那在调用函数的时候就不一定要给这个参数赋值了。 如果没有设置默认值,每个参数都要传入才能成功调用,不信你试试。

全局和局部变量¶

说到了函数这一节了,有个东西不得不提一下,就是全局变量和局部变量的概念。 不仅仅是函数中会使用到这个概念,在后面介绍 类 class 的时候, 全局变量和局部变量也是一样的使用逻辑。

变量 特点
全局 global 函数里外都能用 (公用)
局部 local 仅在函数内有用 (私有)

我们举个例子, 下面这种方式是会报错的。原因很简单,在函数里的 filename 是 modify_name() 自己的变量, modify_name() 这个函数比较抠门,他不愿意借给大家公用这个 filename 变量。所以在外面,我们是找不到 filename 的, 你只能在 modify_name() 自己家里 使用这个 局部变量。

那么如果这个 filename 是公用的,每一个函数都能获取到的,我们怎么定义呢? 其实你就把 filename 拎出来,放到外面就好了。

对于上面的代码,你尝试一下,在 modify_name() 里面去修改一下 filename 的值,重新赋值一下 filename 看看会发生什么?

为什么我在 modify_name() 里面修改了 filename,而且在里面打印出来时,它的确也被修改了, 但是在外面打印 filename 的时候却没有变化?哈哈,因为自私的 modify_name() 想自己在内部搞一套标准, 你外面有啥不要紧,如果我自己也搞一个一样的东西,那我就觉得自己这个更重要,就不看外面的东西了。所以local的filename就是 modify_name() 自己那一套。

在反过来看外面的 filename,公用的 filename 也并不在乎你小灶里头在搞什么奇怪的操作,我只要保证我给大家提供的公用值都还是公用就好了。 所以在 global 的 filename 没有被 local 的改变。

不过我们还存在另一种情况,就是允许内部来修改外部的值。为了办这件事,modify_name() 必须先向外面打一个申请报告,向外面申请自己要去修改公用的 filename。 怎么打申请呢?就是用到了下面这种方式:

global 和 local 在Python中也有一些比较有趣的使用方法,不过在初学阶段, 并不一定有太多用,你们留一个印象,以后在纠结global和local的时候再搜就好了。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat
« 数据种类 Class 类 »
    教程目录

    交互式学Python

      介绍

    • 课程介绍

      基础功能

    • 变量与运算

      循环、数据、判断

    • 条件判断
    • for 和 while 循环
    • 数据种类

      函数、类、模块

    • Function 函数
      • 定义函数
      • 参数设置
      • 全局和局部变量
    • Class 类
    • Module 模块

      文件管理

    • 读写文件
    • 文件目录管理
    • 正则表达式
    • pickle/json 序列化

      异常检查和处理

    • 如何控制异常 try-except
    • 单元测试

      做个项目

    • 没啥用计算器
    • 文件批量处理

      高阶内容

    • 字符串的高级玩法
    • Python的偷懒用法
    • 复制的"玄学"
    • 为什么要有生成器
    • 套娃的装饰器
    • Python 安装和依赖管理:Conda/Pip
    • Python编辑器

      进阶学习

    • 多线程多进程
    • Python 窗口部件
    • 数据三剑客 Numpy Pandas Matplotlib
    • 数据采集-爬虫技术
    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.