Python 学习:函数

Python 学习之函数的学习

一、简介

函数即带名字的代码块,主要用于完成具体的工作。当要执行函数定义的特定任务,可调用函数。需要在程序中多次执行同一项任务时,我们无需反复编写完成该任务的代码,只要调用执行该任务的函数就可以了。通过调用函数,可以简化整个程序的编写,修改,测试…

二、函数的定义

1.定义函数

""" 简单的hello_world()函数"""
def hello_world():
	print("Hello!") #打印 Hello!
	
hello_world()	#此处调用 hello_world() 函数

执行代码:

Hello!

这里展示了一个最简单的函数结构。当定义函数时,需使用 def 关键字来告诉python 解释器我们要定义一个函数,函数名为hello_world(),在这里函数不需要任何信息就可以完成工作,因此括号内容为空,括号是一个函数的必须结构,即使不传递参数,也不可以少。最后定义以一个冒号结尾。紧跟在hello_world(): 后面的所有缩进代码构成了函数体。""" hello_world()函数""" 为文档字符串的注释,描述了该函数是做啥的,文档字符串的注释用三引号括起,"#" 也是注释符,所有注释的文字都不会被解释器编译,也不会输出。
代码行 print(“Hello!”)是函数体中唯一的一行代码,该函数只做一件事:打印Hello!

2.向函数传递信息

在这里我们将 hello_world()函数做简单的修改,向hello_world()函数传递一个参数,如下代码所示

""" 简单的hello_world()函数"""
def hello_world(name):
	print("Hello, " + name.title() +".") #打印 Hello,Jack.
	
hello_world('jack')		#此处调用函数

执行代码:

Hello,Jack.

在该函数中,我们在函数定义时在括号内添加了 name 这个形参,通过在这里添加形参 name,可以让函数接收我们给 name 指定的任何值。当我们调用该函数时需给形参 name 指定一个值,将一个名字传递给它。同时还调用了title()这个函数,该函数的作用为返回“标题化”的字符串,即所有单词都以大写开始,其余字母均为小写。

3.形参和实参

在定义函数hello_world()时,变量 name 是一个形参,形参即函数完成其工作所需的一项信息。在调用函数时,将要让函数使用的信息放在括号内,hello_world(‘jack’) 中的 ‘jack’ 为一个实参,我们将 ‘jack’ 这个实参传递给了函数 hello_world(),这个值被存储在形参 name 中。

三、函数传参

1.位置实参

由于定义函数时,因为实际的需要,我们有时会定义多个形参,因此函数调用时也需要传递多个实参。当向函数传递实参时,可以采用位置实参,使用位置实参要求实参的顺序和形参的顺序相同,即顺序一一对应,不能调换,不然会传错;也可采用关键字实参,其中每个实参都由变量名和值组成;也可使用列表和字典。以下为位置实参

""" 位置实参,实参和形参的顺序要一致"""
def describe_car(name,modle):
	print("\nI have a " + name + ".")
	print("\nMy " + name +"'s modle is " + modle + ".")

descibe_car('tesla','modle s')	#此处调用函数

执行代码:

I have a tesla.
My tesla's modle is modle s.

如果不一致,比如交换 ‘tesla’ 和 'modle s’这两个实参的位置,执行代码后将会输出

I have a modle s.
My modle s's modle is tesla.

这显然不是我们要的结果。所以使用位置实参一定要注意实参和形参的位置一致。

2.关键字实参

关键字实参是指在实参中直接将名称和值关联起来,因此向函数传递实参时不会混淆,使用关键字实参我们也无需考虑在函数调用时实参的顺序问题,并且还清楚的指明了函数调用时各个值的用途。以下为关键字实参

""" 关键字实参,无需考虑实参和形参的顺序要一致"""
def describe_car(name,modle):
	print("\nI have a " + name + ".")
	print("\nMy " + name +"'s modle is " + modle + ".")

descibe_car(name='tesla',modle='modle s')	#关键字实参,即使调换顺序,执行结果一致
descibe_car(modle='modle s',name='tesla')

执行代码:

I have a tesla.
My tesla's modle is modle s.
I have a tesla.
My tesla's modle is modle s.

关键字实参,即使调换顺序,执行结果一致,不会出错。

3.默认值

编写函数时,可以给形参指定默认值,如果在调用函数时给形参提供了实参值,Python 解释器将使用指定的实参值,否则,将使用形参的默认值。因此在给实参指定了默认值时,在调用函数时可省略相应的实参。如在调用函数时发现描述的都是同一种宠物,就可将形参animal_type的默认值设为 ‘dog’,这样子在调用函数来描述 animal_type的类型时,就可以不提供这个信息。
如下代码所示

def describe_pet(pet_name,animal_type='dog'):
	print("\nI have a " + animal_type + ".")
	print("\nMy " + animal_type + "'s name is " + pet_name.title() + ".")
	
describe_pet('wangcai')				#使用默认值
describe_pet('wangcai','cat')		#提供实参

执行代码:

I have a dog.
My dog's name is Wangcai.
I have a cat.
My cat's name is Wangcai.

四、函数的返回值

函数并非总是直接显示输出,它可以处理一些数据,并返回一个或者一组值。函数返回的值被称为返回值。在函数中使用 return 语句将值返回到调用函数的代码行。

1.返回简单值

def get_formatted_name(first_name,last_name):
	full_name = first_name + ' ' + last_name
	return full_name.title()
	
star = get_formatted_name('liu','dehua')	#调用函数,并将调用函数后返回的值赋给变量 star			
print(star)									#打印变量 star

执行代码:

Liu Dehua

函数 get_formatted_name() 的定义通过形参接受名和姓。代码行 full_name = first_name + ’ ’ + last_name ,将名和姓合而为一,在名和姓中间加入一个空格,并将结果存储在 full_name 中,然后将 full_name 转换为首字母大写格式,并将结果返回到函数调用行。

2.返回字典

函数可以返回任何类型的值,包括列表和字典等较复杂的数据结构。

def get_formatted_name(first_name,last_name):
	full_name = {'first':first_name,'last':last_name}	#定义一个字典
	return full_name
	
star = get_formatted_name('liu','dehua')	#调用函数,并将调用函数后返回的值赋给变量 star			
print(star)									#打印变量 star

执行代码:

{'first':'liu','last':'dehua'}

3.在函数中使用 while 循环

def get_formatted_name(first_name,last_name):
	full_name = first_name + ' ' + last_name
	return full_name.title()
	
""" while 无限循环 """
while True:
	print("\nPlease tell me your name.")
	print("(enter 'q' at any time to quit)")
	
	firstName = input("First name: ")	#键盘输入姓
	if firstName == 'q':				#如果输入了字符 q ,退出 while 循环
		break
	lastName = input("Last name: ")		#键盘输入名
	if lastName == 'q':					#如果输入了字符 q ,退出 while 循环
		break
		
star = get_formatted_name(firstName,lastName)	#调用函数,并将调用函数后返回的值赋给变量 star			
print("\nHello, " + star +"!")								#打印变量 star

执行代码:

Please tell me your name. 
(enter 'q' at any time to quit)
First name: liu
Last name: dehua
Hello, Liu Dehua!

执行该函数时,会提醒用户输入姓和名,同时也提示用户如何退出该函数,在用户每次输入时,都检查他是否输入了字符 q,如果用户输入了退出值 q,则退出循环,否则不断提示用户输入姓和名,直到用户输入了退出值 q 时为止。

4.传递列表

"""打印列表中宠物的种类"""
def animal_type(types)
	for type in types:				#遍历列表
		message = "This animal is " + type + "."
		print(message)

animalTypes = ['dog','cat','bird']	#定义一个宠物列表
animal_type(animalTypes)			#调用函数,并将列表传递给函数

执行代码:

This animal is dog.
This animal is cat.
This animal is bird.

5.在函数中修改列表

将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表所作的任何修改都是永久性的。

五、传递任意数量的实参

六、将函数存储在模块中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值