Python中函数的详解

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 + "!")
运行结果如下图:

Python中函数的详解

传递列表
在具体的项目中,有时候向函数传递列表是很必要的,这种列表可以包含,名字、数字、或者更复杂的对象(如字典)

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循环遍历输出元素,并问好。

本文到处就结束了,如发现有错误可留言,共勉!