今天是2020年2月17日,晴,-1~7℃
书中,函数被定义为带名字的,用于完成具体的代码块。需要多次执行同一任务时,无需反复编写该任务的代码,而只需调用函数。通过使用函数,程序的编写、阅读、测试和修复都将更容易。
在Python中,函数使用 def 关键字定义。
'''
def func_name(parameter_1,parameter_2,...):
do something
'''
def hello_world(): #函数定义
'''向世界问好''' #文档字符串,注释函数的功能
print("Hello World!") #函数运行的代码
hello_world() #函数调用 Output:Hello World!
在括号中添加参数,可以在使用时向函数传递信息。
def hello(name):
'''问好'''
print("Hello, " + name + "!")
hello("Alex") #Output:Hello, Alex!
在函数定义中的参数被称为形参,是函数完成工作所需要的信息;在函数调用中传递的参数被称为实参,是调用时传递给函数的信息。在调用函数时,程序将实参传递给函数,并保存在形参中。
调用函数时,Python有多种传递实参的方式,其中包括位置实参和关键字实参。
位置实参是最简单的将形参与实参关联起来的方式。用这种方式传递实参时,实参将按顺序传递给对应的形参。
def greet(name_1,name_2):
'''两人互相问好'''
print("Hello, " + name_1 + "!")
print("Nice to meet you, " + name_2 + "!")
greet("Micheal","Lucas")
greet("Lucas","Micheal")
'''
Output:
Hello, Micheal!
Nice to meet you, Lucas!
Hello, Lucas!
Nice to meet you, Micheal!
'''
关键字实参是传递给函数的名称—值对。这种方式将直接指出形参应关联的实参,因此不需要考虑形参的顺序。
#与上例相同的函数
def greet(name_1,name_2):
'''两人互相问好'''
print("Hello, " + name_1 + "!")
print("Nice to meet you, " + name_2 + "!")
greet(name_1 = "Micheal",name_2 = "Lucas")
greet(name_2 = "Micheal",name_1 = "Lucas")
'''
Output:
Hello, Micheal!
Nice to meet you, Lucas!
Hello, Lucas!
Nice to meet you, Micheal!
'''
位置实参和关键字实参除了在传递参数时有所不同,其它并无区别。若形参所对应的实参是相同的,则两种方式调用也应是等效的。这两种调用方式也可以结合起来使用。
#以下函数调用是等效的
greet("A","B")
greet(name_1 = "A",name_2 = "B")
greet(name_2 = "B",name_1 = "A")
greet("A",name_2 = "B")
注意:关键字实参后不能出现顺序实参。换言之,应先使用顺序实参,再使用关键字实参。
定义函数时,可以给形参指定默认值。若在调用时指定了实参,则优先使用实参;若未指定实参,则使用默认值。因此,在函数调用时可以忽略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。
def greet(name_1,name_2 = "Alex"):
'''两人互相问好'''
print("Hello, " + name_1 + "!")
print("Nice to meet you, " + name_2 + "!")
greet("Micheal")
greet("Peter","Chris")
'''
Output:
Hello, Micheal!
Nice to meet you, Alex!
Hello, Peter!
Nice to meet you, Chris!
'''
注意:带有默认值的形参必须放在无默认值形参的后面。
有时我们不需要函数直接输出,而希望通过函数能获得一个值或一组值。这时需要使用函数来返回值。
使用 return 关键字可以在函数中返回一个值。
def is_even(number):
'''判断一个数是不是偶数'''
if number % 2 == 0:
return True
return False
flag = is_even(6)
print(flag)
flag = is_even(9)
print(flag)
'''
Output:
True
False
'''
def get_full_name(first_name,middle_name,last_name):
'''输出全名'''
full_name = first_name.title() + " " + middle_name.title() + " " + last_name.title()
return full_name
print(get_full_name("kobe","bean","bryant")) #Output:Kobe Bean Bryant
通过默认值,可以将参数设置为可选参数。
def get_full_name(first_name,last_name,middle_name = ""):
'''输出全名'''
if middle_name:
full_name = first_name.title() + " " + middle_name.title() + " " + last_name.title()
else:
full_name = first_name.title() + " " + last_name.title()
return full_name
print(get_full_name("kobe","bryant"))
print(get_full_name("kobe","byrant","bean"))
'''
Output:
Kobe Bryant
Kobe Bean Byrant
'''
函数不仅能返回简单值,也能返回字典、列表等数据类型的值。
def get_full_name(first_name,last_name):
'''输出全名'''
full_name = first_name.title() + " " + last_name.title()
person = {"Name" : full_name}
return person
person = get_full_name("Kobe","Bryant")
print(person) #Output:{'Name': 'Kobe Bryant'}
函数可与任何Python结构结合使用,以 while 循环为例:
def get_full_name(first_name,last_name):
'''输出全名'''
full_name = first_name.title() + " " + last_name.title()
return full_name
while True:
if input("If you wanna quit, Enter 'Q'; If you don't wanna quit, enter whatever you like: ").lower() == 'q':
break
first_name = input("Please tell me your first name: ")
last_name = input("Please tell me your last name: ")
full_name = get_full_name(first_name,last_name)
print("Your name is " + full_name + "!")