本文概述
- Python中的函数
- 如何定义函数:用户定义函数(UDF)
- Python中的匿名函数
- 使用main()作为函数
- 是否想进一步练习?
因此, 本文将向你介绍Python函数。你将涵盖以下主题:
- Python中的函数
- 函数与方法
- 参数与参数
- 如何定义函数:用户定义函数(UDF)
- 退货单
- 如何调用函数
- 如何将文档字符串添加到Python函数
- Python中的函数参数
- 全局变量与局部变量
- Python中的匿名函数
- 使用main()作为函数
Python中的函数你可以在编程中使用函数来捆绑要重复使用的指令集, 或者由于它们的复杂性而更好地独立于子程序并在需要时调用。这意味着函数是一段为执行指定任务而编写的代码。为了执行该特定任务, 该功能可能需要也可能不需要多个输入。执行任务时, 该函数可以或不能返回一个或多个值。
Python中有三种类型的函数:
- 内置函数, 例如help()寻求帮助, min()获得最小值, print()将对象打印到终端, ……你可以在此处找到更多这些功能的概述。
- 用户定义功能(UDF), 用户创建的功能可以帮助他们;和
- 匿名函数, 也称为lambda函数, 因为它们未使用标准def关键字声明。
方法是指作为类一部分的函数。你可以使用类的实例或对象访问它。一个函数没有此限制:它仅指一个独立的函数。这意味着所有方法都是函数, 但并非所有功能都是方法。
考虑以下示例, 在该示例中, 首先定义一个函数plus(), 然后定义一个具有sum()方法的Summation类:
如果现在要调用Summation类中的sum()方法, 则首先需要定义该类的实例或对象。因此, 让我们定义一个这样的对象:
请记住, 当你要调用函数plus()时, 不需要此实例化!你将能够在srcmini Light代码块中执行plus(1, 2), 而不会出现任何问题!
参数与参数
参数是定义函数或方法时使用的名称, 参数将映射到其中。换句话说, 参数是提供给任何函数或方法调用的事物, 而函数或方法代码则通过参数名称来引用参数。
请考虑以下示例, 并回顾上面的srcmini Light块:即使你先前定义了三个参数, 即self, a和b, 也将两个参数传递给Summation类的sum()方法。
自我发生了什么?
每个类方法的第一个参数始终是对该类当前实例的引用, 在本例中为Summation。按照惯例, 该参数称为自我。
这一切都意味着在这种情况下, 你不会将引用传递给self, 因为self是隐式传递的参数的参数名称, 该参数引用通过其调用方法的实例。它隐式地插入到参数列表中。
如何定义函数:用户定义函数(UDF)在Python中定义函数的四个步骤如下:
- 使用关键字def声明函数, 并在其后加上函数名称。
- 向函数添加参数:它们应该在函数的括号内。以冒号结尾。
- 添加函数应执行的语句。
- 如果函数应该输出某些内容, 请以return语句结束。没有return语句, 你的函数将返回对象None。
def hello():name = str(input("Enter your name: "))if name:print ("Hello " + str(name))else:print("Hello World") return hello()
在上面的功能中, 你要求用户提供一个名称。如果没有给出名称, 该功能将打印出” Hello World” 。否则, 用户将获得个性化的” Hello” 响应。
还要记住, 你可以为UDF定义一个或多个功能参数。处理” 函数参数” 部分时, 你将学到更多有关此的知识。此外, 由于你的函数, 你可能会也可能不会返回一个或多个值。
退货声明
请注意, 当你在UDF hello()中打印某些内容时, 实际上并不需要将其返回。上面的函数和这个函数之间没有任何区别:
但是, 如果要继续使用函数的结果并尝试对其进行一些操作, 则需要使用return语句实际返回一个值, 例如String, 整数, …。考虑以下情形, 其中hello()返回字符串” hello” , 而函数hello_noreturn()返回None:
第二个功能给你一个错误, 因为你无法使用无执行任何操作。你将收到一个TypeError, 该错误表明你无法对NoneType(hello_noreturn()结果为None)和int(2)进行乘法运算。
Tip函数遇到return语句时会立即退出, 即使这意味着它们不会返回任何值:
使用return语句时值得一提的另一件事是, 你可以使用它来返回多个值。为此, 你可以使用元组。
请记住, 此数据结构与列表非常相似:它可以包含多个值。但是, 元组是不可变的, 这意味着你无法修改其中存储的任何数量!你可以在双括号()的帮助下构造它。你可以在逗号和赋值运算符的帮助下将元组解压缩为多个变量。
查看以下示例, 以了解你的函数如何返回多个值:
请注意, return语句的返回总和a将与return(总和a)具有相同的结果:前者实际上将sum和a打包到了内部的元组中!
如何调用函数
在前面的部分中, 你已经看到了很多有关如何调用函数的示例。调用函数意味着你直接从Python提示符下或通过另一个函数(如你在” 嵌套函数” 部分中看到的)执行已定义的函数。
只需执行hello()即可调用新定义的函数hello(), 就像下面的srcmini Light块中一样:
如何将文档字符串添加到Python函数
用Python编写函数的另一个重要方面:文档字符串。文档字符串描述函数的功能, 例如函数执行的计算或其返回值。这些说明可作为函数的文档, 以便阅读函数的文档字符串的任何人都可以理解函数的功能, 而不必跟踪函数定义中的所有代码。
函数文档字符串放在函数标题之后的立即行中, 并放在三引号之间。你的hello()函数合适的文档字符串是” 打印” Hello World” ” 。
def hello():"""Prints "Hello World".Returns:None"""print("Hello World") return
请注意, 文档字符串的长度可能比此处作为示例给出的字符串更长。如果你想更详细地研究文档字符串, 则最好查看一些Python库的Github存储库, 例如scikit-learn或pandas, 你将在其中找到很多示例!
Python中的函数参数
之前, 你了解了参数和参数之间的区别。简而言之, 参数是赋予任何函数或方法调用的事物, 而函数或方法代码则通过参数名称来引用参数。 Python UDF可以采用四种类型的参数:
- 默认参数
- 必填参数
- 关键字参数
- 可变数量的参数
必填参数顾名思义, UDF的必需参数是其中必须包含的参数。这些参数需要在函数调用期间以正确的顺序传递, 就像下面的示例一样:
你需要映射到a和b参数的参数来调用该函数, 而不会出现任何错误。如果在a和b之间切换, 结果将不会有所不同, 但是如果将plus()更改为以下内容, 则可能会有所不同:
关键字参数如果要确保以正确的顺序调用所有参数, 则可以在函数调用中使用关键字参数。你可以使用它们通过参数名称来标识参数。让我们以上面的示例为例, 使它更加清楚:
请注意, 通过使用关键字参数, 你还可以切换参数的顺序, 并在执行函数时仍然得到相同的结果:
可变数量的参数如果你不知道要传递给函数的确切参数数量, 则可以将以下语法与* args结合使用:
星号(*)放在包含所有非关键字变量自变量值的变量名之前。请注意, 你可能还已经将* varint, * var_int_args或任何其他名称传递给plus()函数。
提示:请尝试将* args替换为包含星号的其他名称。你会看到上面的代码一直有效!
你会看到上面的函数利用了内置的Python sum()函数对所有传递给plus()的参数求和。如果你想避免这种情况并完全自己构建函数, 则可以使用以下替代方法:
全局变量与局部变量
通常, 在函数体内定义的变量具有局部作用域, 而在外部定义的变量具有全局作用域。这意味着局部变量是在功能块内定义的, 只能在该函数内部访问, 而全局变量可以由脚本中可能存在的所有函数获得:
你会看到会收到一个NameError, 当你尝试打印出函数体内定义的局部变量total时, 未定义名称” total” 。另一方面, 可以将init变量打印出来而没有任何问题。
Python中的匿名函数匿名函数在Python中也称为lambda函数, 因为你可以使用lambda关键字来代替使用标准def关键字声明它们。
在上面的srcmini Light块中, lambda x:x * 2是匿名或lambda函数。 x是参数, x * 2是要求值并返回的表达式或指令。此功能的特殊之处在于它没有名称, 就像你在本功能教程的第一部分中看到的示例一样。如果必须在UDF中编写上述函数, 则结果如下:
def double(x):return x*2
让我们考虑一个lambda函数的另一个示例, 其中使用两个参数:
在短时间内需要匿名函数(在运行时创建)时, 可以使用匿名函数。与之相关的特定上下文是在使用filter(), map()和reduce()时:
顾名思义, filter()函数根据> 10的标准过滤原始输入列表my_list。另一方面, 使用map(), 你可以将函数应用于列表my_list的所有项。在这种情况下, 请将所有元素乘以2。
【Python函数教程】请注意, reduce()函数是functools库的一部分。你可以从左到右对my_list列表中的项目累积使用此函数, 并在这种情况下将序列减少为单个值55。
使用main()作为函数如果你有Java等其他编程语言的经验, 那么你将知道执行功能需要主功能。正如你在上面的示例中看到的那样, Python不一定需要这样做。但是, 在Python程序中包含main()函数可以很方便地在逻辑上构建代码-所有最重要的组件都包含在main()函数中。
你可以轻松定义main()函数并调用它, 就像完成上述所有其他函数一样:
但是, 就目前情况而言, 将main()函数的代码作为模块导入时将被调用。为确保不会发生这种情况, 请在__name__ ==’ __main__’ 时调用main()函数。
这意味着以上代码块的代码变为:
请注意, 除了__main__函数之外, 你还具有__init__函数, 用于初始化类或对象的实例。简而言之, 它充当构造函数或初始化程序, 并在创建类的新实例时自动被调用。使用该功能, 新创建的对象将分配给参数self, 你将在本教程的前面看到该参数。看下面的例子:
class Dog:"""Requires:legs - Legs so that the dog can walk.color - A color of the fur."""def __init__(self, legs, color):self.legs = legsself.color = colordef bark(self):bark = "bark" * 2return barkif __name__ == "__main__":dog = Dog(4, "brown")bark = dog.bark()print(bark)
是否想进一步练习?恭喜!你已经完成了有关Python函数的简短教程。如果你想修改其他基本的Python编程材料, 请不要错过” 数据科学的数据类型” , 该课程将巩固和实践你对列表, 字典, 元组, 集合和日期时间的了解。
推荐阅读
- 笔记本win8.1系统打开windows技巧显示一片空白的处理办法
- Python内部类
- Python正则表达式教程
- 如何安装SQL Server(详细步骤图解)
- R中的数据类型
- Python中的虚拟环境
- R中的条件和控制流
- R中的实用程序
- Python Print()函数