Python中的函数作用跟其他语言的函数作用基本相同,都是带名字的代码块,用于一些完成具体的工作。
要执行函数定义的特殊任务,可调用该函数。需要在程序中,多次执行同一项任务的函数,无需反复编写完成该任务的代码,而只需要调用执行该任务的函数即可。
首先:定义一个简单的无参函数
def func():
'''打印简单的问候语'''
print("Hello")
func()
定义一个有参数的函数 (注意:有参函数需要传入信息)
def func(name):
print("Hello "+name.title()+"!")
func('darren573')
形参(形式参数)和实参(实际参数)
形参:是定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
实参:是在调用时传递给函数的参数,即传递给被调用函数的值。
接下来,我们举栗子,用来传递实参;
def my_animal(type,name):
'''显示动物信息'''
print("\nI have a "+type+".")
print("My "+ type+"`s name is "+ name+".")
my_animal("dog","皮皮")
输出结果为:I have a dog. My dog`s name is 皮皮.
这里我们传入的“dog”和“皮皮”就是实参。另外,传递参数从左到右,定义默认参数由右到左。
默认值 编写函数时可给每个参数指定默认值,如果在函数调用中,传入了新的实参,则替换掉默认值,如果没有新的实参传入,则使用默认值执行函数。、
def my_animal(name,type='dog'):
'''显示动物信息'''
print("\nI have a "+type+".")
print("My "+ type+"`s name is "+ name+".")
my_animal("皮皮")
my_animal("dog","皮皮")
以上两种写法都是可以的,需要注意的是:带有默认值的形参通常写在最右边
等效的函数调用
以my_animal()方法为例,在传入实参时我们可以换种方式,如下:
my_animal(name='皮皮',type='dog')
my_animal(type='dog',name='皮皮')
这些函数调用的输出与前面的示例相同。
返回值 函数并非总是直接显示输出,相反,他还可以处理一些数据,并返回一个或一组值。这就是返回值。
我们通过下面函数来进行详细认识:
def get_formatted_name(first_name,last_name):
'''返回整洁的名字'''
full_name = first_name+'.'+last_name
return full_name.title()
name = get_formatted_name('darren','Hendrix')
print(name)
返回结果为:Darren.Hendrix
让实参变成可选的
有时候,需要把实参变成可选的,这样使用函数的人就只需在必要的时候提供额外信息,那么如何把实参变成可选的呢?以上述方法为例
def get_formatted_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()
s1 = get_formatted_name('da', '573', 'rren')
print(s1)
s2 = get_formatted_name('darren','573')
print(s2)
以上两种方式的输出都是一样的,但是s1我们给了三个参数,s2我们只给了两个参数,由此可见,这就是参数的可选择行。
返回字典
函数可以返回任何类型的值,包括列表和字典等比较复杂的数据结构。咱们还是通过示例来进行研究
def build_person_name(first_name, last_name):
person = {'first': first_name, 'last': last_name}
return person
name = build_person_name('darren','573')
print(name)
输出结果:{'first': 'darren', 'last': '573'}
可以很明确的看到,name的形式是以字典的方式输出的
函数中的参数问题
本段将通过一个方法和多个传参形式详细讲解函数中参数的问题,废话少说,上代码。
def machine(x,y,*args):
print(x)
print(y)
print(agrs)
machine(1,2)
machine(1,2,3)
结果:1 2 ()
1 2 (3,)
显而易见,这里的*args表示后面跟的是一个元组,此外,*args还能处理多余的实参
那我们再换一种方式进行研究
def machine2(x,*y,**z):
print(x)
print(y)
print(z)
machine2(1,2,3,4)
结果:1 (2,3,4,) {}
这个第三个**z打印出来的是{},即字典,x位打印的是1,而*y位就是以元组的方式进行传入了,所以打印了(2,3,4)。
可是如果想对**z赋值该怎么办呢?,这里就要考虑到字典的存储方式了,我们都知道,字典是以key:value的键-值对方式进行存储的,所以对z赋值我们可以这样写,如下
machine2(1,2,3,4,z=5,s=6)
看一下结果:1 (2,3,4) {'z':5,'s':6}
符合我们的预期,由此我们可以说*后面跟的是列表,**后面跟的是字典。
使用函数和while结合
本段将把函数和while循环结合起来,看代码
'''以输出名字为例'''
def get_formatted_name(first_name, last_name):
full_name = first_name + '' + last_name
return full_name
'''结合使用函数和While循环'''
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
formatted_name = get_formatted_name(f_name, l_name)
print("\nHello, " + formatted_name + "!")
运行结果如下图:
传递列表
在具体的项目中,有时候向函数传递列表是很必要的,这种列表可以包含,名字、数字、或者更复杂的对象(如字典)
def get_username(name):
for i in name :
message = "Hello,"+i.title()+"!"
print(message)
username = ['darren573','androidwing','idioticbear']
get_username(username)
结果如下:Hello,Darren573! Hello,Androidwing! Hello,Idioticbear!
首先我们声明了一个列表,并赋值,然后传给get_username()方法,在方法中通过for循环遍历输出元素,并问好。
本文到处就结束了,如发现有错误可留言,共勉!