- Python 基础知识
- Python - 主页
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 C++
- Python——Hello World 程序
- Python - 应用领域
- Python解释器
- Python-环境设置
- Python-虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 文字
- Python - 运算符
- Python - 运算符优先级
- Python - 算术运算符
- Python - 赋值运算符
- Python - 增强运算符
- Python - 比较运算符
- Python - 逻辑运算符
- Python - 位运算符
- Python - 会员运算符
- Python - 身份运算符
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - 如果有的话
- Python - 大小写匹配语句
- Python - for 循环
- Python - for-else 循环
- Python - While 循环
- Python-break语句
- Python-继续语句
- Python - pass 语句
- Python 函数和模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 任意参数
- Python - 变量作用域
- Python - 函数注释
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python-字符串
- Python - 字符串切片
- Python-修改字符串
- Python-字符串连接
- Python——字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 弦乐练习
- Python 列表
- Python - 列表
- Python - 访问列表项
- Python - 更改列表项
- Python - 添加列表项
- Python - 删除列表项
- Python - 循环列表
- Python - 列表理解
- Python - 列表排序
- Python - 复制列表
- Python - 连接列表
- Python - 列表方法
- Python - 列出练习
- Python 元组
- Python - 元组
- Python - 访问元组项
- Python - 更新元组
- Python - 解压元组
- Python - 循环元组
- Python - 连接元组
- Python - 元组方法
- Python - 元组练习
- Python 集
- Python - 集合
- Python - 访问设置项
- Python - 添加设置项
- Python - 删除设置项
- Python - 循环集
- Python - 连接集
- Python - 复制集
- Python - 集合运算符
- Python - 设置方法
- Python - 设置练习
- Python 字典
- Python - 字典
- Python - 访问字典项目
- Python - 更改字典项目
- Python - 添加字典项
- Python - 删除字典项
- Python - 字典查看对象
- Python - 循环字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python-数组
- Python - 访问数组项
- Python - 添加数组项
- Python - 删除数组项
- Python - 循环数组
- Python - 复制数组
- Python - 反转数组
- Python - 数组排序
- Python - 连接数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python-写入文件
- Python-读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python - 操作系统文件/目录方法
- 面向对象编程
- Python - OOP 概念
- Python - 对象和类
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python——继承
- Python——多态性
- Python - 方法重写
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python-封装
- Python - 接口
- Python - 包
- Python - 内部类
- Python - 匿名类和对象
- Python-单例类
- Python - 包装类
- Python-枚举
- Python-反射
- Python 错误与异常
- Python - 语法错误
- Python - 异常
- Python - try- except 块
- Python - try-finally 块
- Python - 引发异常
- Python - 异常链
- Python - 嵌套 try 块
- Python - 用户定义的异常
- Python-日志记录
- Python-断言
- Python - 内置异常
- Python 多线程
- Python-多线程
- Python-线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 连接线程
- Python - 命名线程
- Python-线程调度
- Python-线程池
- Python - 主线程
- Python-线程优先级
- Python - 守护线程
- Python - 同步线程
- Python同步
- Python-线程间通信
- Python-线程死锁
- Python - 中断线程
- Python 网络
- Python-网络
- Python-套接字编程
- Python-URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - 数学
- Python - 迭代器
- Python - 生成器
- Python - 闭包
- Python - 装饰器
- Python - 递归
- Python - 正则表达式
- Python-PIP
- Python-数据库访问
- Python - 弱引用
- Python-序列化
- Python - 模板
- Python - 输出格式
- Python-性能测量
- Python-数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - 图形用户界面编程
- Python - 命令行参数
- Python - 文档字符串
- Python-JSON
- Python-发送电子邮件
- Python - 进一步扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 问题与解答
- Python - 编程示例
- Python - 快速指南
- Python - 有用的资源
- Python - 讨论
Python - 函数
Python 函数是一个有组织的、可重用的代码块,用于执行单个相关操作。函数为您的应用程序提供更好的模块化性和高度的代码重用。
构建处理逻辑的自上而下的方法涉及定义独立的可重用功能块。可以通过传递所需数据(称为参数或参数)从任何其他函数调用 Python 函数。被调用函数将其结果返回到调用环境。
Python 函数的类型
Python 提供以下类型的函数 -
内置功能
内置模块中定义的函数
用户定义函数
Python 的标准库包含许多内置函数。Python 的一些内置函数包括 print()、int()、len()、sum() 等。这些函数始终可用,因为一旦启动 Python 解释器,它们就会被加载到计算机内存中。
标准库还捆绑了许多模块。每个模块定义了一组功能。这些功能并不容易获得。您需要将它们从各自的模块导入到内存中。
除了内置函数和内置模块中的函数外,您还可以创建自己的函数。这些函数称为用户定义函数。
在 Python 中定义函数
您可以定义自定义函数来提供所需的功能。以下是在 Python 中定义函数的简单规则。
函数块以关键字def开头,后跟函数名称和括号 ( ( ) )。
任何输入参数或参数都应放在这些括号内。您还可以在这些括号内定义参数。
函数的第一条语句可以是可选语句;函数的文档字符串或文档字符串。
每个函数中的代码块都以冒号 (:) 开头并缩进。
语句return [表达式]退出函数,可选择将表达式传回调用者。不带参数的return语句与 return None 相同。
句法
def functionname( parameters ): "function_docstring" function_suite return [expression]
默认情况下,参数具有位置Behave,您需要按照定义的顺序通知它们。
定义函数后,您可以通过从另一个函数调用它或直接从 Python 提示符调用它来执行它。
例子
以下示例显示如何定义函数greetings()。括号是空的,因此没有任何参数。
第一行是文档字符串。功能块以 return 语句结束。当调用此函数时,将打印Hello world消息。
def greetings(): "This is docstring of greetings function" print ("Hello World") return greetings()
在 Python 中调用函数
定义函数只是给它一个名称,指定要包含在函数中的参数并构建代码块。
一旦函数的基本结构最终确定,您就可以通过从另一个函数调用它或直接从Python提示符调用它来执行它。以下是调用 printme() 函数的示例 -
# Function definition is here def printme( str ): "This prints a passed string into this function" print (str) return; # Now you can call printme function printme("I'm first call to user defined function!") printme("Again second call to the same function")
执行上述代码时,会产生以下输出-
I'm first call to user defined function! Again second call to the same function
按引用传递与按值传递
Python的函数调用机制与C和C++不同。有两种主要的函数调用机制:按值调用和按引用调用。
当一个变量被传递给一个函数时,函数会对它做什么?如果对其变量的任何更改没有反映在实际参数中,则它使用按值调用机制。另一方面,如果改变被反映,那么它就变成引用调用机制。
C/C++ 函数据说是按值调用的。当调用 C/C++ 中的函数时,实际参数的值将复制到表示形式参数的变量中。如果函数修改形式论证的值,它不会反映传递给它的变量。
Python 使用引用传递机制。由于Python中的变量是对内存中对象的标签或引用,因此用作实际参数和形式参数的变量实际上都引用内存中的同一个对象。我们可以通过在传递之前和之后检查传递变量的 id() 来验证这一事实。
def testfunction(arg): print ("ID inside the function:", id(arg)) var="Hello" print ("ID before passing:", id(var)) testfunction(var)
如果执行上面的代码,则传递之前的 id() 和函数内部的 id() 是相同的。
ID before passing: 1996838294128 ID inside the function: 1996838294128
该Behave还取决于传递的对象是可变的还是不可变的。Python 数字对象是不可变的。当传递一个数字对象,然后函数更改形式参数的值时,它实际上在内存中创建一个新对象,而原始变量保持不变。
def testfunction(arg): print ("ID inside the function:", id(arg)) arg=arg+1 print ("new object after increment", arg, id(arg)) var=10 print ("ID before passing:", id(var)) testfunction(var) print ("value after function call", var)
它将产生以下输出-
ID before passing: 140719550297160 ID inside the function: 140719550297160 new object after increment 11 140719550297192 value after function call 10
现在让我们将可变对象(例如列表或字典)传递给函数。它也是通过引用传递的,因为传递前后的lidt的id()是相同的。但是,如果我们修改函数内部的列表,其全局表示也会反映更改。
这里我们传递一个列表,追加一个新项目,然后查看原始列表对象的内容,我们会发现它已经改变了。
def testfunction(arg): print ("Inside function:",arg) print ("ID inside the function:", id(arg)) arg=arg.append(100) var=[10, 20, 30, 40] print ("ID before passing:", id(var)) testfunction(var) print ("list after function call", var)
它将产生以下输出-
ID before passing: 2716006372544 Inside function: [10, 20, 30, 40] ID inside the function: 2716006372544 list after function call [10, 20, 30, 40, 100]
函数参数
函数的处理通常取决于调用它时提供给它的某些数据。定义函数时,必须给出一个变量列表,其中收集传递给函数的数据。括号中的变量称为形式参数。
调用函数时,必须提供每个形式参数的值。这些被称为实际参数。
例子
让我们修改greetings 函数并添加name 参数。作为实际参数传递给函数的字符串将成为函数内的名称变量。
def greetings(name): "This is docstring of greetings function" print ("Hello {}".format(name)) return greetings("Samay") greetings("Pratima") greetings("Steven")
它将产生以下输出-
Hello Samay Hello Pratima Hello Steven
有返回值的函数
return关键字作为函数定义中的最后一条语句,表示功能块结束,程序流程返回到调用函数。尽管块中最后一个语句后减少缩进也意味着返回,但使用显式返回是一个很好的做法。
除了流程控制之外,该函数还可以将表达式的值返回给调用函数。返回表达式的值可以存储在变量中以供进一步处理。
例子
让我们定义 add() 函数。它将传递给它的两个值相加并返回相加结果。返回的值存储在名为 result 的变量中。
def add(x,y): z=x+y return z a=10 b=20 result = add(a,b) print ("a = {} b = {} a+b = {}".format(a, b, result))
它将产生以下输出 -
a = 10 b = 20 a+b = 30
函数参数的类型
根据定义 Python 函数时参数的声明方式,它们分为以下几类 -
位置参数或必需参数
关键字参数
默认参数
仅位置参数
仅关键字参数
任意或可变长度参数
在接下来的几章中,我们将详细讨论这些函数参数。
参数顺序
函数可以具有上面定义的任何类型的参数。但是,参数必须按以下顺序声明 -
参数列表以仅位置参数开头,后跟斜杠 (/) 符号。
它后面是常规位置参数,可能会也可能不会被称为关键字参数。
那么可能会有一个或多个具有默认值的args。
接下来,任意位置参数由带有单个星号前缀的变量表示,该变量被视为元组。这是下一个。
如果函数有任何仅关键字参数,请在其名称开始前添加一个星号。某些仅关键字参数可能具有默认值。
括号中的最后一个参数带有两个星号**,用于接受任意数量的关键字参数。
下图显示了形式参数的顺序 -