资料来源于Github项目**30-Days-Of-Python,本文为第十一章翻译。**
函数
到目前为止,我们已经看到了许多内置的Python函数。在本节中,我们将专注于自定义函数。什么是函数?在我们开始创建函数之前,让我们学习一下函数是什么以及为什么我们需要它们?
定义函数
函数是可重用的代码块或编程语句,旨在执行某个特定任务。为了定义或声明一个函数,Python提供了def关键字。以下是定义函数的语法。只有在调用或执行函数时才执行函数代码块。
声明和调用函数
当我们创建一个函数时,我们称之为声明一个函数。当我们开始使用它时,我们称之为调用或执行一个函数。函数可以带有参数或不带参数。
# 语法
# 声明函数
def function_name():
codes
codes
# 调用函数
function_name()
没有变量的函数
声明函数可以不需要变量。
例如:
def generate_full_name ():
first_name = 'Asabeneh'
last_name = 'Yetayeh'
space = ' '
full_name = first_name + space + last_name
print(full_name)
generate_full_name () # 调用函数
def add_two_numbers ():
num_one = 2
num_two = 3
total = num_one + num_two
print(total)
add_two_numbers()
函数返回值-第1部分
函数也可以返回值,如果函数没有返回语句,函数的值为None。让我们使用return重新编写上面的函数。从现在开始,当我们调用函数并打印它时,我们会从函数中得到一个值。
def generate_full_name ():
first_name = 'Asabeneh'
last_name = 'Yetayeh'
space = ' '
full_name = first_name + space + last_name
return full_name
print(generate_full_name())
def add_two_numbers ():
num_one = 2
num_two = 3
total = num_one + num_two
return total
print(add_two_numbers())
带参数的函数
在函数中,我们可以将不同的数据类型(数字、字符串、布尔值、列表、元组、字典或集合)作为参数传递。
- 单个参数:如果我们的函数需要一个参数,我们应该使用一个参数来调用我们的函数。
# 语法
# 声明函数
def function_name(parameter):
codes
codes
# 调用函数
print(function_name(argument))
示例:
def greetings (name):
message = name + ', welcome to Python for Everyone!'
return message
print(greetings('Asabeneh'))
def add_ten(num):
ten = 10
return num + ten
print(add_ten(90))
def square_number(x):
return x * x
print(square_number(2))
def area_of_circle (r):
PI = 3.14
area = PI * r ** 2
return area
print(area_of_circle(10))
def sum_of_numbers(n):
total = 0
for i in range(n+1):
total+=i
print(total)
print(sum_of_numbers(10)) # 55
print(sum_of_numbers(100)) # 5050
- 双参数:一个函数可能有参数,也可能没有参数。一个函数也可能有两个或更多的参数。如果我们的函数需要参数,我们应该使用参数来调用它。让我们来看一个有两个参数的函数:
# 语法
# 声明函数
def function_name(para1, para2):
codes
codes
# 调用函数
print(function_name(arg1, arg2))
示例:
def generate_full_name (first_name, last_name):
space = ' '
full_name = first_name + space + last_name
return full_name
print('Full Name: ', generate_full_name('Asabeneh','Yetayeh'))
def sum_two_numbers (num_one, num_two):
sum = num_one + num_two
return sum
print('Sum of two numbers: ', sum_two_numbers(1, 9))
def calculate_age (current_year, birth_year):
age = current_year - birth_year
return age;
print('Age: ', calculate_age(2021, 1819))
def weight_of_object (mass, gravity):
weight = str(mass * gravity)+ ' N' # the value has to be changed to a string first
return weight
print('Weight of an object in Newtons: ', weight_of_object(100, 9.81))
使用关键字和值传递参数
如果我们使用关键字和值传递参数,参数的顺序就不重要了。
# 语法
# 声明函数
def function_name(para1, para2):
codes
codes
# 调用函数
print(function_name(para1 = 'John', para2 = 'Doe')) # 调用参数的顺序并不重要
示例:
def print_fullname(firstname, lastname):
space = ' '
full_name = firstname + space + lastname
print(full_name)
print(print_fullname(firstname = 'Asabeneh', lastname = 'Yetayeh'))
def add_two_numbers (num1, num2):
total = num1 + num2
print(total)
print(add_two_numbers(num2 = 3, num1 = 2)) # 调用参数的顺序并不重要
函数返回值-第2部分
如果我们在函数中没有返回值,则我们的函数默认返回None。要从函数中返回一个值,我们使用关键字return,后面跟着我们要返回的变量。我们可以从函数中返回任何类型的数据。
- 返回一个字符串的例子:
def print_name(firstname):
return firstname
print_name('Asabeneh') # Asabeneh
def print_full_name(firstname, lastname):
space = ' '
full_name = firstname + space + lastname
return full_name
print_full_name(firstname='Asabeneh', lastname='Yetayeh')
- 返回一个数字:
def add_two_numbers (num1, num2):
total = num1 + num2
return total
print(add_two_numbers(2, 3))
def calculate_age (current_year, birth_year):
age = current_year - birth_year
return age;
print('Age: ', calculate_age(2019, 1819))
- 返回一个布尔值:
def is_even (n):
if n % 2 == 0:
print('even')
return True # return stops further execution of the function, similar to break
return False
print(is_even(10)) # True
print(is_even(7)) # False
- 返回一个列表:
def find_even_numbers(n):
evens = []
for i in range(n + 1):
if i % 2 == 0:
evens.append(i)
return evens
print(find_even_numbers(10))
默认参数的函数
有时我们在调用函数时会传递默认值到参数中。如果我们在调用函数时没有传递参数,那么它们的默认值将被使用。
# 语法
# 声明函数
def function_name(param = value):
codes
codes
# 调用函数
function_name()
function_name(arg)
示例:
def greetings (name = 'Peter'):
message = name + ', welcome to Python for Everyone!'
return message
print(greetings())
print(greetings('Asabeneh'))
def generate_full_name (first_name = 'Asabeneh', last_name = 'Yetayeh'):
space = ' '
full_name = first_name + space + last_name
return full_name
print(generate_full_name())
print(generate_full_name('David','Smith'))
def calculate_age (birth_year,current_year = 2021):
age = current_year - birth_year
return age;
print('Age: ', calculate_age(1821))
def weight_of_object (mass, gravity = 9.81):
weight = str(mass * gravity)+ ' N' # the value has to be changed to string first
return weight
print('Weight of an object in Newtons: ', weight_of_object(100)) # 9.81 - average gravity on Earth's surface
print('Weight of an object in Newtons: ', weight_of_object(100, 1.62)) # gravity on the surface of the Moon
任意数量的参数
如果我们不知道要传递给函数的参数数量,我们可以创建一个函数,通过在参数名前添加 * 号,可以接受任意数量的参数。
# 语法
# 声明函数
def function_name(*args):
codes
codes
# 调用函数
function_name(param1, param2, param3,..)
示例:
def sum_all_nums(*nums):
total = 0
for num in nums:
total += num # same as total = total + num
return total
print(sum_all_nums(2, 3, 5)) # 10
函数中的默认和任意数量的参数
def generate_groups (team,*args):
print(team)
for i in args:
print(i)
print(generate_groups('Team-1','Asabeneh','Brook','David','Eyob'))
函数作为另一个函数的参数
# 你可以将函数作为另一个函数的参数
def square_number (n):
return n * n
def do_something(f, x):
return f(x)
print(do_something(square_number, 3)) # 27
评论区