恭祝大连新年快乐
Python 函数是返回特定任务的语句块。它将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以执行函数调用以一遍又一遍地重用其中包含的代码,而不是为不同的输入一次又一次地编写相同的代码。
使用函数的好处:
Python 中主要有两种类型的函数。
我们可以在 Python 中使用 def
关键字定义一个函数。可以根据需要向其添加任何类型的功能和属性。
def fun():
print("Welcome to Python")
def fun():
print("Welcome to Python")
fun()
日常开发过程中需要考虑函数的返回类型和参数的数据类型。
def function_name(parameter: data_type) -> return_type:
"""Docstring"""
return expression
以下示例使用参数和参数。
def add(num1: int, num2: int) -> int:
"""两数相加"""
num3 = num1 + num2
return num3
num1, num2 = 5, 15
ans = add(num1, num2)
print(f"The addition of {num1} and {num2} results {ans}.")
def is_prime(n):
if n in [2, 3]:
return True
if (n == 1) or (n % 2 == 0):
return False
r = 3
while r * r <= n:
if n % r == 0:
return False
r += 2
return True
print(is_prime(78), is_prime(79))
参数是在函数括号内传递的值。一个函数可以有任意数量的参数,用逗号分隔。在此示例中,将在 Python 中创建一个简单的函数来检查作为参数传递给函数的数字是偶数还是奇数。
def evenOdd(x):
if (x % 2 == 0):
print("even")
else:
print("odd")
evenOdd(2)
evenOdd(3)
输出
Python 支持可以在函数调用时传递的各种类型的参数。在 Python 中有以下 4 种类型的函数参数。
默认参数(Default argument)是指在定义函数时,为参数提供一个默认值。如果函数调用时没有提供该参数的值,则将使用默认值。默认参数的主要作用是在函数定义中指定参数的默认值,使函数调用更加灵活,同时还能提供一个常用值的默认选择。
示例:
def greet(name="Lisi"):
print("Hello,", name)
greet() # 输出:Hello, Lisi
greet("Zhangsan") # 输出:Hello, Zhangsan
在这个例子中greet
函数有一个默认参数 name
,默认值为 "Lisi"
。在第一个函数调用中,没有提供参数,因此使用了默认值 "Lisi"
;在第二个函数调用中,提供了参数 "Zhangsan"
,因此使用了提供的值。
默认参数的定义格式为在函数声明时为参数赋值。例如,在 def greet(name="Lisi")
中,name
参数有一个默认值 "Lisi"
。
关键字参数(Keyword arguments),也称为命名参数,是指在函数调用时,通过参数名来指定参数的值。使用关键字参数可以使函数调用更具有可读性,并且不需要按照参数在函数定义中的顺序传递参数。
示例:
def greet(name, age):
print("Hello,", name)
print("Your age is", age)
greet(name="Zhangsan", age=30)
在这个示例中函数调用时明确指定了参数的名称,即 name="Zhangsan"
和 age=30
。因此,即使在函数定义中 name
参数位于 age
参数之前,也不会出现问题。
使用关键字参数的好处之一是提高了函数调用的可读性,尤其是当函数有多个参数且参数意义不明确时,使用关键字参数可以更清晰地表达函数的意图。
位置参数(Positional arguments)是指在函数调用时,根据函数定义中参数的顺序依次传递参数的值。这是最常见的参数传递方式。
示例:
def greet(name, age):
print("Hello,", name)
print("Your age is", age)
greet("Zhangsan", 30)
在这个示例中,我们按照函数定义的顺序依次传递了参数 "Zhangsan"
和 30
给函数 greet
。第一个传递的参数 "Zhangsan"
被赋给了 name
参数,而第二个传递的参数 30
被赋给了 age
参数。
位置参数的顺序和数量必须与函数定义中的参数顺序和数量匹配,否则可能会导致错误。因此,在使用位置参数时,需要确保按照正确的顺序传递参数值。
任意参数(Arbitrary arguments)是指允许函数接受任意数量的参数的一种机制。在Python中可以通过使用特殊的语法 *args
和 **kwargs
来定义任意参数。
*args
用于传递非关键字参数列表(即位置参数),它允许将任意数量的位置参数传递给函数。**kwargs
用于传递关键字参数(即命名参数),它允许将任意数量的关键字参数传递给函数。示例:说明这两种任意参数的用法:
def greet(*args, **kwargs):
for name in args:
print("Hello,", name)
for key, value in kwargs.items():
print(key, "is", value)
greet("Zhangsan", "Lisi", age=30, city="Dalian")
在这个示例中,函数 greet
接受了任意数量的位置参数(args
)和关键字参数(kwargs
)。在函数调用中,我们传递了两个位置参数 "Zhangsan"
和 "Lisi"
,以及两个关键字参数 age=30
和 city="Dalian"
。
在函数体内部使用了循环来处理位置参数和关键字参数,并打印出相应的值。使得函数更加灵活,可以接受不同数量和类型的参数,并且可以根据需要进行处理。
函数后面的第一个字符串简称为 Document 字符串 或 Docstring。用于描述函数的功能。在函数中使用文档字符串是可选的,但被认为是一种很好的做法。
语法: print(function_name.__doc__)
其中函数检查给定的数字是否为偶数或奇数,并输出相应的信息:
def evenOdd(x):
"""函数用于检查给定的数字是偶数还是奇数"""
if (x % 2 == 0):
print("偶数")
else:
print("奇数")
# 调用函数的驱动代码
print(evenOdd.__doc__)
在这个示例中函数 evenOdd
接受一个参数 x
,并根据该参数的值输出相应的信息。函数的文档字符串用中文描述了函数的作用。最后,使用 print(evenOdd.__doc__)
打印出函数的文档字符串。
在另一个函数中定义的函数称为内部函数 或嵌套函数。嵌套函数可以访问封闭作用域的变量。使用内部函数是为了保护它们免受函数外部发生的一切影响。
def f1():
s = 'I love Tencent'
def f2():
print(s)
f2()
f1()
在 Python 中,匿名函数意味着函数没有名称。正如我们知道的def 关键字
用于定义普通函数,lambda 关键字
用于创建匿名函数。
def cube(x): return x*x*x
cube_v2 = lambda x : x*x*x
print(cube(7))
print(cube_v2(7))
Python 中的递归是指函数调用自身的时间。在许多情况下必须构建递归函数来解决数学和递归问题。
使用递归函数时应谨慎,因为递归函数可能变成一个非终止循环。最好在创建递归函数时检查 exit 语句
。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(4))
我们创建了一个递归函数来计算数字的阶乘。可以看到此函数的结束语句是当 n 等于 0 时。
函数返回语句用于退出函数并返回到函数调用方,并将指定的值或数据项返回给调用方。return 语句的语法为:
return [expression_list]
return 语句可以由变量、表达式或常量组成,常量在函数执行结束时返回。如果 return 语句中不存在上述任何内容,则返回一个 None 对象。
def square_value(num):
"""这个函数返回输入数字的平方值"""
return num**2
print(square_value(2)) # 输出:4
print(square_value(-4)) # 输出:16
在这个示例中函数 square_value
接受一个参数 num
,并返回该参数的平方值。函数的文档字符串用中文描述了函数的作用。最后调用了两次函数 square_value
,并打印出结果。
需要注意的重要一点是,在 Python 中,每个变量名称都是一个引用。当我们将变量传递给函数时,将创建对该对象的新引用。Python 中的参数传递与 Java 中的引用传递相同。
# 这里 x 是指向列表 lst 的新引用
def myFun(x):
x[0] = 20
# 驱动代码(注意,在函数调用之后,lst 被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst) # 输出:[20, 11, 12, 13, 14, 15]
当我们传递一个引用并将接收到的引用更改为其他内容时,传递和接收的参数之间的连接就会中断。
例如,请考虑以下程序,如下所示:
def myFun(x):
# 下面这行代码执行后,x 与之前的对象连接断开,x 被分配了一个新的对象。
x = [20, 30, 40]
# 驱动代码(注意,在函数调用之后,lst 没有被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)
在这个示例中,函数 myFun
接受一个参数 x
。在函数内部,通过 x = [20, 30, 40]
这一行代码,我们将 x
关联到了一个新的列表对象 [20, 30, 40]
,而原来的列表对象并没有被修改。
另一个例子演示了如果我们分配一个新值(在函数内部),引用链接就会断开。
def myFun(x):
# 在函数内部重新分配新的值
return 20
# 驱动代码(注意,现在 x 会被修改)
x = 10
x = myFun(x)
print(x)
yield 语句暂停函数的执行并将值发送回调用方,但保留足够的状态以使函数能够从中断的地方恢复。当函数恢复时,它会在最后一次屈服运行后立即继续执行。这允许其代码随着时间的推移生成一系列值,而不是一次计算它们并像列表一样将它们发回。
def simpleFun():
yield 1
yield 2
yield 3
for value in simpleFun():
print(value)
输出:
Return 将指定的值发送回其调用方,而 Yield 可以生成一系列值。当我们想遍历一个序列,但又不想将整个序列存储在内存中时,我们应该使用 yield。Yield 用于 Python 生成器。生成器函数的定义与普通函数类似,但每当它需要生成值时,它都会使用 yield 关键字而不是返回值。如果 def 的主体包含 yield,则该函数会自动成为生成器函数。
def nextSquare():
i = 1
## 一个无限循环用于生成平方数
while True:
yield i*i
i += 1 # # 下一次执行从这一点恢复
# function
for num in nextSquare():
if num > 100:
break
print(num)
Python 函数是一个代码块,仅在调用时运行。它被编程为返回特定任务。可以在称为参数的函数中传递值。它有助于执行重复性任务。
Python 中的主要函数类型有:
Built-in function 内置功能
User-defined function 用户自定义函数
Lambda functions Lambda 函数
Recursive functions 递归函数
def function_name():
Function code 功能代码
Python 中的参数是在调用函数时将值作为参数传递的变量。一个函数可以有任意数量的参数。还可以在 Python 中将默认值设置为参数。
以下是 Python 内置函数的完整列表:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。