Python从入门到熟练(7):函数
时间:2022-07-25
本文章向大家介绍Python从入门到熟练(7):函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
函数
本节主要讲函数。函数也可以看作是一种方法,能够去实现某种想法,比如加法等操作就是一种函数,只不过在背后被封装起来了。函数是编程中一个重要的方法,
掌握函数,就可以以编程的方式实现自己脑海中的想法。
1 函数的基本使用
- 函数:把具有
独立功能的代码块
打包为一个小模块,在需要的时候调用 函数的使用包含两个步骤:-
定义
函数——封装独立的功能 -
调用
函数——享受封装的成果
-
- 作用:在开发程序时,使用函数可以提高工作效率以及代码的
重用
- Python中提供了非常多的内置函数:
print()
、input()
、type()
等
定义函数:
定义函数:
-
def 函数名():
函数封装的代码
- 函数代码块以
def
关键字开头,后接函数名
和圆括号()
- 关键字
def
: 是英文define的缩写,在计算机领域指预设置的命令
-
函数名
应该能够表达函数封装代码的功能
,方便后续的调用 -
函数名
的命名应该符合标识符的命名规则
标识符的命名规范复习:
- 标识符由
字符(A〜Z , a〜z )、下划线
和数字
组成 - 不能以数字开头
- 不能包含特殊字符
- 不能和Python中的关键字重名
调用函数的方法
- 调用函数的方法:
通过函数名()即可完成对函数的调用
注意:
代码中不能将
函数调用
放在函数定义
的上方 , 在类中是可以的
2 函数的参数
- 函数的参数
- 将函数内需要使用到的变量,在调用函数的时候,使用参数传递到函数
内部
- 在函数
内部
,把参数当做变量
使用 - 函数
定义
时的参数称为形参
,调用
时被传入的参数称为实参
- 将函数内需要使用到的变量,在调用函数的时候,使用参数传递到函数
- 使用方式:
在函数名后面的小括号内部填写参数,多个参数之间使用
,
分隔 - 必需参数:在函数调用时数量和顺序必须和声明时的一样
- 关键字参数:
- 函数调用时使用
参数名
进行对应传值,允许参数的顺序与声明时不一样
- 函数调用时使用
- 默认参数:
- 函数定义时给参数设定
默认值
,如果函数调用时没有传入,则使用默认值
- 函数定义时给参数设定
- 可变参数:
- 在定义函数不确定参数的
数量
或内容
时,使用可变参数,不会进行直接命名 -
*args
参数获取所有直接传参的参数元组
-
**kwargs
参数所有关键字
传参的参数字典
- 在定义函数不确定参数的
3 变量作用域
变量的作用域:也称变量的命名空间,由变量声明的位置
决定了该变量的作用域
- 局部变星:
- 函数内声明的变量,不做特殊声明的都是局部变量,
只能在函数内使用
- 函数内声明的变量,不做特殊声明的都是局部变量,
- 全局变量:
- 在函数外赋值的变量就是全局变量,可以在
整个程序范围内使用
- 在函数外赋值的变量就是全局变量,可以在
多层代码块中变量作用域的使用规则:
- 局部变量
不能
在外部代码中直接使用 - 全局变量
可以
在函数体内进行访问 - 函数体内对外部变量重新赋值
不会改变
函数体外的全局变量 - global关键字:如果想对函数体外的变量进行修改,使用global关键字
获取函数体内的变量:
- 如果需要
获取函数执行的结果
或者获取函数内的局部变量
- 在函数中使用
return关键字
可以返回结果 - 也可以一次性返回多个结果,返回的多个结果时使用
,
隔开 - 当返回多个结果时,在接受的地方使用元组解包的方式获取数据 注 意 :return关键字表示返回结果,后续的代码都不会被执行
突然修改的列表
- 往主函数内传入一个
列表
,并在函数内修改
,这时函数外的列表也会同步改变
- 传入一个
字符串
,尽管同样在函数内修改
,函数外字符串不会发生改变
- 测试结果
- 函数传入
可变数据类型
时,在函数内修改,影响原数据 -
不可变数据
类型则不会
- 函数传入
- 拓展
-
可变数据类型
:List (列表)、Dictionary (字典)、Set (集合) -
不可变数据类型
:Number (数字)、String (字符串)、Tuple (元组)
-
4递归函数
- 递归函数: 指函数不断自己调用自己, 好处是可以循环访问数据以达成结果。
- 使用场景:每次进入更深一层递归时,问题规模相比上次递归都应有所减少
注意:递归是一个很容易造成死循环的函数。但是,在被正确编写后,递归可能是一种非常有效且数学上优雅的编程方法。一定要设定好递归退出的条件。
- [LeetCode]Array主题系列{1,11,15,16,18,26,27,31,33,34题}
- Bwapp漏洞平台答案全解-A1(第三篇)
- pom.xml配置文件中所有标签及作用简单描述
- 关于C#获取动态的时间差函数
- SQL Server 存储过程
- ubuntu中配置hadoop
- jQuery选择器大全(48个代码片段+21幅图演示)
- C# 如何在Excel 动态生成PivotTable
- RabbitMQ入门HelloWorld(C#)(翻译)
- Centos环境下搭建Asp.NET Core环境和安装Jexus
- Linux系统Java环境安装配置
- ASP.NET Core 依赖注入
- 使用Hive SQL插入动态分区的Parquet表OOM异常分析
- 基于STS和JWT的微服务身份认证
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Flutter 专题】99 初识 EventBus
- LeetCode 102 | 将二叉树中同层的元素归并在一起
- Git | Git入门,成为项目管理大师(二)
- 学习|Unity3D使用协程实现减速停车效果
- R语言实现文献的批处理
- django-haystack ImportError: cannot import name 'six' from 'django.utils' in django 3.x
- Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?
- 阅读大型开源软件的四个技巧
- Tomcat NIO(7)-Poller
- python 求解线性规划问题
- Netty高性能之道
- 关于im-live-sells自定义群组字段的使用
- 浅谈CAP与Kafka
- windows下查看进程(进阶)
- Salesforce LWC学习(二十二) 简单知识总结篇二