当前位置: 首页 > news >正文

python实参名在哪_参数?变量?形参?实参?在 Python 眼里那都不是事。

写在之前

大家好,这是首发在我的微信公众号“Python空间”的文章,欢迎关注,大家一起交流。

函数的参数,我在之前的文章中也提到过,参数这个东西我感觉还是比较有话题的,你可能在某些地方听说过诸如 “形参”,“实参” and so on...那么这些到底是什么呢?下面我们就来详细的说一下函数的参数和变量的问题。

参数 & 变量

我们用 def 来定义函数,函数名后面的括号里如果有变量的话,它们通常被成为 “形参”;在我们调用的时候,给函数提供的值我们称它为 “实参”,或者叫 “参数” 也是 ok 的。其实我觉得我们完全可以简化一下,可以笼统的把函数括号里的变量叫做 “参数”,当然叫做 “变量” 也是可以的,只要你知道指的是什么就好了。

如果非要有人较真,就是要区分参数和变量,我在这里引用一段网上看到的 “微软网站上关于此问题的说明”,你可以尝试看一下,标题叫 -- 参数和变量的差异(Visual Basic),下面的图片是我从官网上的截图:

如果你真的硬着头皮看完了上述的内容,你就会发现里面的一些关键词:参数,变量,形参,实参,本来我们只是想弄懂参数和变量的的区别,结果又冒出两个别的词,其实根本不需要担心,在学习编程的时候,类似的东西有很多名词,你现在听过了,下次有人说起的时候你就不用担心了。

其实在 Python 中,并没有搞得这么复杂,如果你看完上面截图的内容,再来看下面的代码,你就会发现很多事情其实是很明朗的:

>>> def add(x): # x 是形参

... y = 10 # y 是变量

... return x + y # 这里的 x 就是形参作为变量来用

...

>>> x = 20 # x 是变量

>>> add(x) # x 是参数,但它是由上面那行的变量 x 传递对象 20 的引用

30

你看,是不是没有那么复杂,所以名字是什么不是最关键的,最重要的是你要明白在函数名后面的括号里的东西的作用是 “传递对象的引用”。

我们再来看一个例子:

>>> def add_digit(my_list):

... my_list.append(9999)

... return my_list

...

>>> x = [1,2,3]

>>> y = add_digit(x)

>>> y

[1, 2, 3, 9999]

>>> x

[1, 2, 3, 9999]

>>> id(y)

38793288L

>>> id(x)

38793288L

我在写列表的时候说过列表是可以被原地修改的,加上上面我们说过的参数的特点,上面的操作其实就不难理解了。

原本列表 x 是在函数外面的,既可以理解成 x 和 函数是属于 “同级” 的,只不过是分属于两个不同的个体,按照我们的常规理解,同级的个体,如果一个个体的内部发生了变化,对于另一个个体来说是没法影响的(注意我说的 “同级”,“个体”),但是事实是改变了,因为参数是 “传递对象的引用”,所以函数个体内部的小变动影响到了 x 个体,颇有 “以下犯上” 的意思。

花这么长的篇幅写这些的原因,终归还是希望你能很深的记住这点:“函数的参数传递对象的引用”,重要的事刚好说了三遍。

写在最后

我尽量的在明白且清晰的传递一些我的认识,虽然我 Boss 之前和我说在写代码的时候有些东西会用就行,不必去看到它底层的东西,但我还是觉得在学基础的东西的时候还是求甚解的好,地基打得牢,干啥都不慌,恰恰我之前对基础的东西其实是一晃而过的,现在我在努力改变自己原先的做法,希望也能引起你的重视。

如果你觉得这篇文章对你有帮助的话,欢迎关注我的公众号“Python空间”。

The end。

相关文章:

  • mysql 事务锁分类_mysql的锁之锁分类
  • mysql5.7.17的数据库_数据库mysql-5.7.17的安装详解
  • mysql实现for xml_灵活运用 SQL SERVER FOR XML PATH
  • sql大小写 效率_从零开始学SQL:是什么、如何安装、基本语法、表格(创建、删除、更新)、数据(插入、删除、更新)...
  • mysql com.mysql.cj_com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
  • kill -HUP重启mysql_kill的用法
  • mysql redolog 详解_MySQL系列之redo log、undo log和binlog详解
  • mysql xtrabakup 异机恢复_XtraBackup备份恢复mysql
  • mysql逻辑模型_数据库逻辑模型设计.ppt
  • win7mysql安装未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  • sql2008能否打开mysql数据库_将MySQL数据库转移到SqlServer2008数据库
  • 从源码安装mysql_从源码安装MySQL
  • wp mysql替换内容_WordPress查找和替换数据库内容插件:Better Search Replace
  • 什么时候用到全排列_全排列问题 与 组合排列问题
  • gis怎么提取水系_ArcGIS水文分析实战教程(7)细说流域提取
  • python3.6+scrapy+mysql 爬虫实战
  • [数据结构]链表的实现在PHP中
  • Bytom交易说明(账户管理模式)
  • exports和module.exports
  • JS变量作用域
  • Js基础知识(一) - 变量
  • Otto开发初探——微服务依赖管理新利器
  • XForms - 更强大的Form
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • - 概述 - 《设计模式(极简c++版)》
  • 前端相关框架总和
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 推荐一个React的管理后台框架
  • 微信小程序:实现悬浮返回和分享按钮
  • 写代码的正确姿势
  • 仓管云——企业云erp功能有哪些?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #pragma预处理命令
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (办公)springboot配置aop处理请求.
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (六)vue-router+UI组件库
  • (三十五)大数据实战——Superset可视化平台搭建
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *Django中的Ajax 纯js的书写样式1
  • .CSS-hover 的解释
  • .net FrameWork简介,数组,枚举
  • .Net Redis的秒杀Dome和异步执行
  • @Responsebody与@RequestBody
  • @SuppressWarnings(unchecked)代码的作用
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C#]winform部署PaddleOCRV3推理模型
  • [GN] Vue3快速上手1