1.定义函数
一个简单的函数:
def greet_user():
print("Hello world!")
greet_user()
结果:
Hello world!
1.1向函数传递参数
def greet_user(username):
print("Hello," + username.title() + "!")
greet_user('littleegg')
结果:
Hello,Littleegg!
1.2实参和形参
在上述的代码中,def greet_user(username)中的username是一个形参;greet_user(‘littleegg’)的‘littleegg’是一个实参。调用函数时,实参‘littleegg’传递给甘薯greet——user(),这个值被存储在username中。
2.传递参数
调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。注意,是实参中的顺序要与形参中的顺序相同。
2.1位置实参
def describle_pet(animal_type,pet_name):
print("I have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describle_pet('dog','xiaohei')
结果:
I have a dog.
My dog's name is Xiaohei.
2.2关键字实参
关键字实参是传递给函数的名称—值对。关键字实参让你无需考虑函数调用中的实参顺序,还清楚的指出了函数调用中各个值得用途。
def describle_pet(animal_type,pet_name):
print("I have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describle_pet(animal_type = 'dog',pet_name = 'xiaohei')
结果:
I have a dog.
My dog's name is Xiaohei.
2.3默认值
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参值;否则,将使用形参的默认值。
def describle_pet(pet_name,animal_type = 'dog'):
print("I have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describle_pet(pet_name = 'xiaohei')
结果:
I have a dog.
My dog's name is Xiaohei.
2.4等效的函数调用
鉴于可混合使用位置参数实参、关键字实参和默认值,通常有多种等效的函数调用方式。
def describle_pet(pet_name,animal_type = ‘dog’)
基于这种定义,在任何情况下都必须给pet——name提供实参;指定该实参时可以使用位置参数,也可以使用关键字参数。
以下三条语句输出相同。
describle_pet('benben','cat')
describle_pet(pet_name = 'benben',animal_type = 'cat')
describle_pet(animal_type = 'cat',pet_name = 'benben')
结果:
I have a cat.
My cat's name is Benben.
3.返回值
函数返回的值被称为返回值,在函数中可以使用return语句将值返回到调用函数的代码行。
3.1返回简单值
def get_fomatted_name(first_name,last_name):
full_name = first_name + '·' + last_name
return(full_name.title())
print(get_fomatted_name('albert','einstein'))
结果:
Albert·Einstein
3.2让实参变成可选的
假设拓展get_fomatted_name函数,使之可以处理中间名,但是不是所有人都有中间名,那么需要进行判断。
def get_fomatted_name(first_name,last_name,middle_name = ''):
if middle_name:
full_name = first_name + '·' + middle_name + '·' + last_name
else:
full_name = first_name + '·' + last_name
return(full_name.title())
print(get_fomatted_name('albert','einstein'))
print(get_fomatted_name('蒙奇','路飞','D'))
结果:
Albert·Einstein
蒙奇·D·路飞
3.3返回字典
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
def build_person(name,sex,age):
person = {'name':name,'sex':sex,'age':age}
return person
example = build_person('littleegg','女',20)
print(example)
结果:
{'name': 'littleegg', 'sex': '女', 'age': 20}
3.4结合使用函数和while循环
def fomatted_name(first_name,last_name):
full_name = first_name + '·' + last_name
return full_name.title()
while True:
print("\nPlease tell me your name : ")
print("(Enter 'q' at any time to quit)")
f_name = input("First_name:")
if f_name == 'q':
break
l_name = input("Last_name:")
if l_name == 'q':
break
fomatted_name = fomatted_name(f_name,l_name)
print("\nHello," + fomatted_name + "!")
结果:
Please tell me your name :
(Enter 'q' at any time to quit)
First_name:isaac
Last_name:newton
Hello,Isaac·Newton!
Please tell me your name :
(Enter 'q' at any time to quit)
First_name:q
4.传递列表
将列表传递给函数后,函数就可以直接访问其内容。可使用函数来提高处理列表的效率。
def greet_users(users):
for user in users:
message = "Hello," + user.title() + "!"
print(message)
exampleusers = ['xiaoming' , 'marton' , 'littleegg']
greet_users(exampleusers)
结果:
Hello,Xiaoming!
Hello,Marton!
Hello,Littleegg!