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

小白必看的Python基础之函数篇

函数最重要的目的是方便我们重复使用相同的一段程序。

将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。

函数的定义

首先,我们要定义一个函数, 以说明这个函数的功能。

def square_sum(a,b):c = a**2 + b**2return c

这个函数的功能是求两个数的平方和。

首先,def,这个关键字通知python:我在定义一个函数。square_sum是函数名。

括号中的a, b是函数的参数,是对函数的输入。参数可以有多个,也可以完全没有(但括号要保留)。

我们已经在循环和选择中见过冒号和缩进来表示的隶属关系。

return c               

# 返回c的值,也就是输出的功能。Python的函数允许不返回值,也就是不用return。return可以返回多个值,以逗号分隔。相当于返回一个tuple(定值表)。

return a,b,c         

 # 相当于 return (a,b,c)

在Python中,当程序执行到return的时候,程序将停止执行函数内余下的语句。return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。None是Python中的一个特别的数据类型,用来表示什么都没有,相当于C中的NULL。None多用于关键字参数传递的默认值。

函数调用和参数传递

定义过函数后,就可以在后面程序中使用这一函数

print square_sum(3,4)

Python通过位置,知道3对应的是函数定义中的第一个参数a, 4对应第二个参数b,然后把参数传递给函数square_sum。

(Python有丰富的参数传递方式,还有关键字传递、表传递、字典传递等,基础教程将只涉及位置传递)

函数经过运算,返回值25, 这个25被print打印出来。

我们再看下面两个例子

a = 1
def change_integer(a):a = a + 1return a
print change_integer(a)
print a
#===(Python中 "#" 后面跟的内容是注释,不执行 )
b = [1,2,3]
def change_list(b):b[0] = b[0] + 1return b
print change_list(b)
print b

第一个例子,我们将一个整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。

第二个例子,我们将一个表传递给函数,函数进行操作,原来的表b发生变化。

对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)

但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递)

总结

def function_name(a,b,c):statementreturn something  # return不是必须的

函数的目的: 提高程序的重复可用性。

return     None

通过位置,传递参数。

基本数据类型的参数:值传递

表作为参数:指针传递。

相关文章:

  • 如果网络不好 如何下载huggingface上的模型
  • 华为三层交换机:ACL的基本实验
  • WPF制作带图标和文字的按钮模板(通过附加属性实现)
  • 3、设计模式之工厂模式2(Factory)
  • Ubuntu 20.04 系统如何优雅地安装NCL?
  • web 课程
  • Linux-新手小白速秒Hadoop集群全生态搭建(图文混编超详细)
  • 用户数据的FLASH存储与应用(FPGA架构)
  • rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
  • HarmonyOS NEXT应用开发—状态栏显隐变化
  • 嵌入式学习39-程序创建数据库及查找
  • 24计算机考研调剂 | 太原科技大学
  • Xcode 15.3 Archive失败
  • python-0008-修改django数据库为mysql
  • Gitlab光速发起Merge Request
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Date型的使用
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Elasticsearch 参考指南(升级前重新索引)
  • Invalidate和postInvalidate的区别
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 从零搭建Koa2 Server
  • 读懂package.json -- 依赖管理
  • 服务器从安装到部署全过程(二)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 理清楚Vue的结构
  • 设计模式走一遍---观察者模式
  • Spring第一个helloWorld
  • (39)STM32——FLASH闪存
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (c语言)strcpy函数用法
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (五)c52学习之旅-静态数码管
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • ./和../以及/和~之间的区别
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net 简单实现MD5
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net下简单快捷的数值高低位切换
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @Transaction注解失效的几种场景(附有示例代码)
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BT]BUUCTF刷题第4天(3.22)
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [CF494C]Helping People