第八章:函数

一,定义函数

我们可以定义如下的一个简单的函数

def greet_user():
	print("Hello!")
	
greet_user()

在这里插入图片描述
这个示例演示了最简单的函数结构,
关键词def来告诉python我要来定义一个函数,向python指出了函数名,还可能会在括号之中指出完成这个函数任务需要什么样的信息,
在这里,函数名是greet_user(),它不需要任何信息就可以完成工作,因此括号时候空的,但即使这样,括号也是不可以省略的,定义要以冒号结尾
同时调用函数的时候也必须带括号,是必须的

1,向函数传递信息

def greet_user(username):
	"""显示简单的问候语"""
	print("Hello,"+username.title()+"!")
	
greet_user('jesse')

在这里插入图片描述
这个例子之中就加入了参数

2,实参和形参
在之前的函数例子之中,
变量username就是一个形参:是函数完成其工作所需要的一项信息
jesse是一个实参,实参是调用函数时传递给函数的信息

二,传递实参

鉴于函数定义之中可能包含有多个形参,因此函数调用时也可能包含有多个实参,像函数传递实参的方式有很多,
1,位置实参

def describle_pet(animal_type,pet_name):
	print("\ni have a "+animal_type+".")
	print("my"+animal_type+"'s name is"+pet_name.title()+'.')
describle_pet('hamster','harry')

在这里插入图片描述
注意:位置一定要对应好,在函数的定义之中我们需要一种动物类型,一个动物名字,那么再调用函数的时候我们就要按照顺序提供这些,这是必要的
1),我们可以调用一个函数多次
2),位置参数的位置很重要

2,关键字实参
关键词实参是传递给函数的名称值对,直接在实参之中将名称和值关联起来了,因此向函数传递实参的时候不会混淆,同时关键词实参也让我们无需考虑函数调用时的实参顺序,

def describle_pet(animal_type,pet_name):
	print("\ni have a "+animal_type+".")
	print("my"+animal_type+"'s name is"+pet_name.title()+'.')
describle_pet(animal_type = 'hamster',pet_name = 'harry')
describle_pet(pet_name = 'harry',animal_type = 'hamster')

可以看到,关键词实参的顺序无关紧要,python知道各个值应该存储在哪一个形参之中,
但是要注意使用关键词实参时,要准确的指出形参名

3,默认值
编写函数时可以给每一个形参指定默认值,

def describle_pet (pet_name,animal_type = 'dog'):
	print("\ni have a "+animal_type+".")
	print("my "+animal_type+"'s name is"+pet_name.title()+'.')
describle_pet( pet_name= 'hamster')
describle_pet(pet_name = 'harry',animal_type = 'hamster')

在这里插入图片描述
可以看到:
1)如果函数调用时没有给值,python会默认使用默认值,
2)如果函数调用时给了值,则python就会忽略这个形参的默认值
3)注意,使用默认值的时候,在形参列表之中必须要先列出没有默认值的形参。再列出有默认值的形参,这让python能够正确的解读位置实参

4,等效的函数调用
实际上,函数的等效调用是很方便的呢,而且是很随意的
如果我们def describle_pet (pet_name,animal_type = 'dog'):像这样定义那么下面这一系列对于函数的调用都是可以的:

#一只名为willie的小狗
describle_pet( pet_name= 'willie')
describle_pet('willie')
#一直名为harry的仓鼠
describle_pet(pet_name = 'harry',animal_type = 'hamster')
describle_pet( 'harry','hamster')
describle_pet(animal_type = 'hamster',pet_name = 'harry')

三,返回值

函数并不是总是显示输出,函数还有很多的功能,函数的返回值也是多种多样的
1,返回一个简单值

def get_foramtted_name(first_name,last_name):
	full_name = first_name + " " +last_name
	return full_name.title()
musician = get_foramtted_name('jimi','hendrix')
print(musician)

在这里插入图片描述
调用返回值的函数的时候,我们需要提供一个变量,用于存储返回的值
2,让实参变成可选的
有时候我们需要让实参变成可选的,这样的话使用函数的人,就只需要在必要时提供额外的信息,
例如我们对上述函数进行修正:

def get_foramtted_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()
musician = get_foramtted_name('jimi','hendrix')
print(musician)
musician = get_foramtted_name('jimi','hooker','hendrix')
print(musician)

在这里插入图片描述
注意,这部分实际上和默认值的那一部分相似,有默认值的“特殊的地方”要放在形参列表的最后面,这样python语言才能够明白函数调用的意思
3,返回字典
函数可以返回任意类型的值,包括字典和列表等较为复杂的数据结构

def build_person(first_name,last_name,age=""):
	person={"first":first_name,"last":last_name}
	if age:
		person['age'] = age
	return person
	
musician = build_person('jimi','hendrix',age=27)
print(musician)

在这里插入图片描述
4,结合使用函数和while循环

def get_foramtted_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'quit'at anu time to quit")
	f_name = input("first name:")
	if f_name =='quit':
		break
	l_name== input("last name:")
	if l_name=='q':
		break
	formatted_name=get_foramtted_name(f_name,l_name)
	print("\nhello,"+formatted_name+"!")
def get_formatted_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'quit'at anu time to quit")
	f_name = input("first name:")
	if f_name =='quit':
		break
	l_name = input("last name:")
	if l_name=='quit':
		break
	formatted_name=get_formatted_name(f_name,l_name)
	print("\nhello,"+formatted_name+"!")

在这里插入图片描述

四,传递列表

你经常会发现,传递列表很有用,列表之中可能会包含各种内容

def greet_users(names):
	for name in names:
		msg="Hello,"+name.title()+"!"
		print(msg)
usernames=['hannah','ty','margot']
greet_users(usernames)

在这里插入图片描述
我们可以看到,输出完全符合预期

函数编写指南

编写函数的时候应该记住几个细节:
1,应该个i函数指定描述性名称,且只在其中使用小写字母和下划线,
2,每一个函数都应该简要指明其功能,注释紧跟在函数定义后面,并采用文档字符串的格式
3,给形参指定默认值时,等号两边不要有空格
4,如果函数的形参有很多的话,可以在函数的定义之中输入左括号之后输入回车键并在下一行按两下缩进键,从而与函数主体区分开来

发布了53 篇原创文章 · 获赞 27 · 访问量 1万+
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览