前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 高级教程之函数

Python 高级教程之函数

作者头像
海拥
发布2022-05-07 08:39:10
5120
发布2022-05-07 08:39:10
举报
文章被收录于专栏:全栈技术

Python 函数是一组相关语句,旨在执行计算、逻辑或评估任务。这个想法是将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以一次又一次地为不同的输入编写相同的代码,而不是一次又一次地调用函数来重用其中包含的代码。

函数既可以是内置的,也可以是用户定义的。它有助于程序简洁、不重复和有条理。

语法:

代码语言:javascript
复制
def function_name(parameters):
    """docstring"""
    statement(s)
    return expression

创建函数

我们可以使用def关键字创建一个 Python 函数。

示例:Python 创建函数

代码语言:javascript
复制
# A simple Python function

def fun():
print("Welcome to haiyong.site")

调用函数

创建函数后,我们可以通过使用函数名称后跟包含该特定函数参数的括号来调用它。

示例:Python 调用函数

代码语言:javascript
复制
# A simple Python function

def fun():
print("Welcome to haiyong.site")
		
# Driver code to call a function
fun()

输出

代码语言:javascript
复制
Welcome to haiyong.site

函数的参数

参数是在函数括号内传递的值。一个函数可以有任意数量的参数,用逗号分隔。

示例:带参数的 Python 函数

在这个例子中,我们将创建一个简单的函数来检查作为参数传递给函数的数字是偶数还是奇数。

代码语言:javascript
复制
# 一个简单的 Python 函数来检查 x 是偶数还是奇数

def evenOdd(x):
	if (x % 2 == 0):
		print("even")
	else:
		print("odd")


# 调用函数的驱动代码
evenOdd(2)
evenOdd(3)

输出

代码语言:javascript
复制
even
odd

参数类型

Python 支持可以在函数调用时传递的各种类型的参数。让我们详细讨论每种类型。

默认参数

默认参数是一个参数,如果在该参数的函数调用中未提供值,则该参数采用默认值。以下示例说明了默认参数。

代码语言:javascript
复制
# 演示默认参数的 Python 程序


def myFun(x, y=50):
	print("x: ", x)
	print("y: ", y)


# 驱动程序代码(我们只用参数调用 myFun())
myFun(10)

输出

代码语言:javascript
复制
('x:', 10) 
('y:', 50)

与 C++ 默认参数一样,函数中的任意数量的参数都可以具有默认值。但是一旦我们有了一个默认参数,它右边的所有参数也必须有默认值。

关键字参数

这个想法是允许调用者使用值指定参数名称,以便调用者不需要记住参数的顺序。

代码语言:javascript
复制
# 演示关键字参数的 Python 程序
def student(firstname, lastname):
	print(firstname, lastname)


# 关键字参数
student(firstname='haiyong', lastname='blog')
student(lastname='blog', firstname='haiyong')

输出

代码语言:javascript
复制
('haiyong', 'blog')
('haiyong', 'blog')

可变长度参数

在 Python 中,我们可以使用特殊符号将可变数量的参数传递给函数。有两个特殊符号:

  • *args(非关键字参数)
  • **kwargs(关键字参数)

示例 1:可变长度非关键字参数

代码语言:javascript
复制
# 用于说明可变数量参数的 *args 的 Python 程序

def myFun(*argv):
	for arg in argv:
		print(arg)


myFun('Hello', 'Welcome', 'to', 'haiyong.site')

输出

代码语言:javascript
复制
Hello
Welcome
to
haiyong.site

示例 2:可变长度关键字参数

代码语言:javascript
复制
# 用于说明可变数量关键字参数的 *kwargs 的 Python 程序

def myFun(**kwargs):
	for key, value in kwargs.items():
		print("%s == %s" % (key, value))

# 驱动程序代码
myFun(first='haiyong', mid='.', last='site')

输出

代码语言:javascript
复制
first == haiyong
mid == .
last == site

文档字符串

函数后面的第一个字符串简称为 Document 字符串或Docstring。这用于描述函数的功能。在函数中使用 docstring 是可选的,但它被认为是一种很好的做法。

以下语法可用于打印出函数的文档字符串:

代码语言:javascript
复制
语法: print(function_name.__doc__)

示例:将 Docstring 添加到函数中

代码语言:javascript
复制
# 一个简单的 Python 函数来检查 x 是偶数还是奇数

def evenOdd(x):
	"""检查数字是偶数还是奇数的功能"""
	
	if (x % 2 == 0):
		print("even")
	else:
		print("odd")


# Driver code to call the function
print(evenOdd.__doc__)

输出

代码语言:javascript
复制
检查数字是偶数还是奇数的功能

return 语句

函数 return 语句用于退出函数并返回到函数调用者,将指定的值或数据项返回给调用者。

代码语言:javascript
复制
语法: return [表达式列表]

return 语句可以包含一个变量、一个表达式或一个在函数执行结束时返回的常量。如果 return 语句不存在上述任何一项,则返回 None 对象。

示例:Python 函数 return 语句

代码语言:javascript
复制
def square_value(num):
	"""此函数返回输入数字的平方值"""
	return num**2


print(square_value(2))
print(square_value(-4))

输出:

代码语言:javascript
复制
4 
16

Python 函数是按引用传递还是按值传递?

需要注意的重要一点是,在 Python 中,每个变量名都是一个引用。当我们将变量传递给函数时,会创建对该对象的新引用。Python中的参数传递与Java中的引用传递相同。

例子:

代码语言:javascript
复制
# 这里 x 是对相同列表 lst 的新引用
def myFun(x):
	x[0] = 20


# 驱动程序代码(注意 lst 在函数调用后被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)

输出

代码语言:javascript
复制
[20、11、12、13、14、15]

当我们传递一个引用并将接收到的引用更改为其他东西时,传递和接收参数之间的连接就会中断。例如,考虑下面的程序。

代码语言:javascript
复制
def myFun(x):

	# 在下面的 x 与前一个对象的链接被破坏后,一个新对象被分配给 x。
	x = [20, 30, 40]


# 驱动程序代码(注意:函数调用后 lst 不会被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)

输出

代码语言:javascript
复制
[10、11、12、13、14、15]

另一个例子来证明如果我们分配一个新值(在函数内部),引用链接会被破坏。

代码语言:javascript
复制
def myFun(x):

	# 在下面的 x 与前一个对象的链接被破坏后,一个新对象被分配给 x。
	x = 20


# 驱动程序代码(请注意,函数调用后 lst 不会被修改)
x = 10
myFun(x)
print(x)

输出

代码语言:javascript
复制
10

练习:尝试猜测以下代码的输出。

代码语言:javascript
复制
def swap(x, y):
	temp = x
	x = y
	y = temp


# 驱动程序代码
x = 2
y = 3
swap(x, y)
print(x)
print(y)

输出

代码语言:javascript
复制
2 
3

匿名函数:

在 Python 中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。

代码语言:javascript
复制
# 使用 lambda 函数说明数字立方的 Python 代码


def cube(x): return x*x*x

cube_v2 = lambda x : x*x*x

print(cube(7))
print(cube_v2(7))

输出

代码语言:javascript
复制
343

函数中的 Python 函数

在另一个函数内部定义的函数称为内部函数或嵌套函数。嵌套函数能够访问封闭范围的变量。使用内部函数是为了保护它们免受函数外部发生的所有事情的影响。

代码语言:javascript
复制
# 用于演示访问嵌套函数变量的 Python 程序

def f1():
	s = '我爱中国'
	
	def f2():
		print(s)
		
	f2()

# 驱动程序代码
f1()

输出

代码语言:javascript
复制
我爱中国
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建函数
  • 调用函数
  • 函数的参数
  • 参数类型
    • 默认参数
      • 关键字参数
        • 可变长度参数
          • 示例 1:可变长度非关键字参数
            • 示例 2:可变长度关键字参数
            • 文档字符串
              • 示例:将 Docstring 添加到函数中
              • return 语句
                • 示例:Python 函数 return 语句
                • Python 函数是按引用传递还是按值传递?
                • 匿名函数:
                • 函数中的 Python 函数
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档