《Python编程的术与道:Python语言入门》视频课程
《Python编程的术与道:Python语言入门》视频课程链接:https://edu.youkuaiyun.com/course/detail/27845
函数 (Functions)
任何编程语言的核心原则之一是“不要重复自己”。 如果有多次执行类似的操作,则可以定义该操作一次,然后在需要执行该操作时调用该代码。
要善于利用函数,以减少重复编写程序段的工作量。
什么是函数?
函数是组合在一起的一组操作,并为其命名。 我们已经使用了Python语言中的许多函数,例如string.title()
和list.sort()
。 我们也可以定义自己的函数,从而给予Python新行为。
一般语法
一般函数看起来像这样:
Let’s define a function.
def function_name(argument_1, argument_2):
# Do whatever we want this function to do,
# using argument_1 and argument_2
Use function_name to call the function.
function_name(value_1, value_2)
-
定义一个函数
- 给出关键字
def
,它告诉Python你要定义一个函数。 - 为函数命名。 变量名称告诉变量包含哪种值; 函数名称应该告诉函数的作用。
- 为函数执行其工作所需的每个值指定名称。
基本上是变量名,但它们仅用于函数中, 称为函数的参数。 - 确保函数定义行以冒号结尾。
- 在函数内部,编写使函数完成其工作所需的任何代码。
- 给出关键字
-
使用你的函数
- 要调用函数,写下其名称,后跟括号。
- 在括号内,提供希望函数使用的值。
基本例子
一个简单的例子,我们将编写一个夸奖别人的程序。 首先,查看此程序的一个版本,没有任何函数。
print("You are doing good work, Adriana!")
print("Thank you very much for your efforts on this project.")
print("\nYou are doing good work, Billy!")
print("Thank you very much for your efforts on this project.")
print("\nYou are doing good work, Caroline!")
print("Thank you very much for your efforts on this project.")
You are doing good work, Adriana!
Thank you very much for your efforts on this project.
You are doing good work, Billy!
Thank you very much for your efforts on this project.
You are doing good work, Caroline!
Thank you very much for your efforts on this project.
下面使用函数:
def thank_you(name):
# This function prints a two-line personalized thank you message.
print("\nYou are doing good work, %s!" % name)
print("Thank you very much for your efforts on this project.")
thank_you('Adriana')
thank_you('Billy')
thank_you('Caroline')
You are doing good work, Adriana!
Thank you very much for your efforts on this project.
You are doing good work, Billy!
Thank you very much for your efforts on this project.
You are doing good work, Caroline!
Thank you very much for your efforts on this project.
在我们的原始代码中,每对打印语句都运行了三次,唯一的区别是被感谢者的姓名。 当看到这样的重复时,可以通过定义函数来提高程序的效率。
一个常见的错误
在程序中使用一个函数之前,必须先定义。 例如,将函数放在程序的末尾将不起作用。
thank_you('Adriana')
thank_you('Billy')
thank_you('Caroline')
def thank_you(name):
# This function prints a two-line personalized thank you message.
print("\nYou are doing good work, %s!" % name)
print("Thank you very much for your efforts on this project.")
使用函数的优点
使用函数的优点
通过示例,会看到使用函数的一些优点:
- 我们写一套指令一次,节省了工作。
- 当写的函数工作时,不再需要担心该代码。编写函数意味着有一个地方可以修复错误,当这些错误得到修复时,可以确信这个函数将继续正常工作。
- 可以修改函数的行为,并且每次调用函数时该更改都会生效。
返回一个值
创建的每个函数都可以返回一个值。 以下函数接受一个数字,并返回该数字的相应单词:
def get_number_word(number):
# Takes in a numerical value, and returns
# the word corresponding to that number.
if number == 1:
return 'one'
elif number == 2:
return 'two'
elif number == 3:
return 'three'
# ...
# Let's try out our function.
for current_number in range(0,4):
number_word = get_number_word(current_number)
print(current_number, number_word)
0 None
1 one
2 two
3 three
如果在其中一个函数中使用return语句,记住该函数在return语句后立即停止执行。
返回多个值
Python能够返回多个值,这是许多其他语言所缺少的。
可以通过用逗号分隔返回值来实现。
示例:返回两个参数的相加值和相减值
def func(a, b):
return a+b, a-b
result = func(3, 2)
print(result)
(5, 1)
当返回多个值时,Python实际上将它们打包在一个元组中并返回它。
然后,可以使用多赋值来拆包返回的元组的各个部分。
# Example: Unpack returned tuple
def func(a, b):
return a+b, a-b
add, sub = func(3, 2)
print(add) # 5
print(sub) # 1
5
1
将函数赋值给变量
当Python运行def
语句时,它将创建一个新的函数对象,并将其赋值给该函数的名称。
你可以随时为其分配其他名称,然后通过新名称进行调用。
示例:为“ hello”功能分配一个不同的名称,然后通过新名称进行调用
def hello():
print('Hello, World!')
hi = hello
hi() # Hello, World!
Hello, World!
你可以使用此功能实现跳转表(jump tables)。跳转表是按需调用的函数的字典。
示例:创建函数字典
def findSquare(x):
return x ** 2
def findCube(x):
return x ** 3
exponent = {'square': findSquare, 'cube': findCube}
print(exponent['square'](3)) # 9
9
print(exponent['cube'](3)) # 27
27
在运行时执行Python函数
由于Python将def视为可执行语句,因此它可以出现在普通语句可以出现的任何位置。
例如,可以将函数嵌套在if语句中,以在替代定义之间进行选择。
if True:
def hello():
print('Hello, World!')
else:
def hello():
print('Hello, Universe!')
hello() # Hello, World!
Hello, World!
递归 (Recursion)
递归函数是一个调用自身并重复其行为直到满足某些条件以返回结果的函数。
在下面的示例中,findSum()
是一个调用自身的递归函数。 我们使用变量num作为数据,每次递归时都会递减(-1)。 当递归变为0时,递归结束。
每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件。
示例:求0到10的数字总和
#循环语句完成:
def findSum1(num):
sum = 0
for i in range(1,num+1):
sum += i
return sum
x = findSum1(10)
print(x)
55
#递归函数完成
def findSum(num):
if num:
return num + findSum(num-1)
else:
return 0
x = findSum(10)
print(x)
55