8.函数

一、定义函数——def

1.定义函数

#关键字def定义一个函数,括号内也可指出为完成任务而需要的信息
def greet():
	
	#函数体:描述函数做什么,文档字符串用三引号括起
	"""显示简单的问候语"""
	
	#函数体内的代码
	print("Hello")
	
#调用这个函数,即使用它
greet()

在这里插入图片描述

2.向函数传递信息

在这里插入图片描述

3.实参和形参

实参(调用函数时传递给函数的信息)存储在形参中,如上述’elaine‘是实参;username是形参

二、传递实参

1.位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。
其中最简单的关联方式是基于实参的顺序——即位置实参
如果实参的顺序不正确,结果可能出乎意料
在这里插入图片描述

2.关键字实参

调用函数时,我们向Python明确地指出了各个实参对应的形参

describe_pet(animal_type='hamster', pet_name='harry') 
describe_pet(pet_name='harry', animal_type='hamster')

3.默认值

编写函数时,可给每个形参指定默认值,在调用函数时给形参提供了实参,Python将使用指定的实参值;否则将使用形参的默认值。
Python 依然将这个实参视为位置实参,因此如果函数调用中只包含宠物的名字,这个实参将关联到函数 定义中的第一个形参
所以使用默认值时,将默认值放到最后面

#使用这个函数最简单的方式是只提供dog的名字describe_pet('huahua')
#这个实参将关联到函数定义中的第一个形参pet_name
def describe_pet(pet_name, animal_type='dog'):

4.等效的函数调用

鉴于可混合使用位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。

# 一条名为Willie的小狗 
describe_pet('willie') 
describe_pet(pet_name='willie') 

#一只名为Harry的仓鼠
describe_pet('harry', 'hamster') 
describe_pet(pet_name='harry',animal_type='hamster') 
describe_pet(animal_type='hamster', pet_name='harry') 

三、返回值

1.返回简单值

函数返回的值被称为返回值。
在函数中,可使用return语句将值返回到调用函数的代码行。
返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。

def name(first,last):
	"""返回首字母大写的姓名"""
	full_name = first + " " + last
	return full_name.title()#转换为首字母大写格式并将结果返回到函数调用行
#调用返回的函数时,需要提供一个变量用于存储返回的值
musician = name('Zhou','Jaiyi')
print(musician)

在这里插入图片描述

2.让实参变成可选的

可使用默认值(放在无默认值的形参后面)
让实参变成可选的。

def name(first,last,middle = ''):
	
	"""返回首字母大写的姓名"""
	if middle:
		full_name = first + ' ' + middle + ' ' + last
	else:
		full_name = first + " " + last
		
	return full_name.title()#转换为首字母大写格式

musician = name('Zhou','yi','Jia')
dancer = name('yi','yi')
print(musician)
print(dancer)

在这里插入图片描述

3.返回字典

def name(first,last,age = ''):
	
	"""返回一个包含人信息的字典"""
	person = {'first_name' : first,'last_name' : last}
	if age:
		person['age'] = age
	return person#将结果返回到函数调用行
	
musician = name('Zhou','Jiayi',age=21)#用于存储返回的值
dancer = name('y','y')
print(musician,dancer)

在这里插入图片描述

四、传递列表

1.在函数中修改列表(将列表传递给函数)

def print_models(designs,models): 	"""打印每个设计(design)后挪入模型(models)中,输出挪入过程""" 	while designs:
 	current_design = designs.pop()
  	print(current_design) 		
  	models.append(current_design)

def show_models(models):
 	"""显示所有models""" 	
 	for model in models: 		
 	print(model)

designs = ['iphone11' , 'iphone11Pro' , 'iphone12' , 'iphone12Pro'] models = [] print_models(designs,models)#print_models(designs[:],models) 详见四、2.
show_models(models)

在这里插入图片描述
It’s一种理念——每个函数都只负责一项具体的工作,将复杂的任务划分为一系列的步骤,更易于扩展和维护,修改效率更高。函数是可以调用另一个函数的。

2.函数不修改原列表进行操作

将列表的副本传给函数——function_name(list[:])
切片表示法[:]创建列表的副本
具体查看四、1.注释
虽然向函数传递列表的副本可保留原始列表的内容,但除非有充分的理由需要传递副本,否则还是传递原始列表给函数,因为让函数使用现成列表可避免花时间和内存创建副本,从而提高效率,在处理大型列表时尤其如此。

五、传递任意数量的实参

#星号让Python创建一个名为toppings的空元组
#并将收到的所有值都封装到这个元组中
def pizza(*toppings):
	"""print all the sources guests needed"""
	print(toppings)

#Python将实参封装到一个元组中,即使是一个值
pizza('pepper','mushroom','cheese')

在这里插入图片描述
在这里插入图片描述

1.结合使用 位置实参和任意数量实参

如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。
Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

#Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
def pizza(size,*toppings):
	"""print info guests needed"""
	print("\nMaking  pizza(" + str(size) + " inch)") 
	for topping in toppings:
		print("- " + topping)

#Python将实参封装到一个元组中,即使是一个值
pizza(12,'pepper','mushroom','cheese')

在这里插入图片描述

2.使用任意数量的关键字实参

#两个星号让Python创建一个名为user_info的空字典
#所有键值对都封装到这个字典中

#函数build_profile()的定义————
#要求提供姓和名,同时允许用户根据需要提供任意数量的名称-值对

def build_profile(first,last,**user_info):
	"""字典中包含用户信息"""
	profile = {}#创建空字典
	profile['fname'] = first#将形参加入空字典
	profile['lname'] = last #将形参加入空字典
	
	#遍历user_info中的键值对
	for key,value in user_info.items():
		#将每个键值对都加入到字典profile中
		profile[key] = value
	#将字典profile返回给函数调用行
	return profile

user_profile = build_profile('albert','elena',
							location='prince',
							field='physics')
print(user_profile)

在这里插入图片描述

3.练习

编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个 函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客点 的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。
在这里插入图片描述
用户简介:复制前面的程序 user_profile.py,在其中调用 build_profile()来 创建有关你的简介;调用这个函数时,指定你的名和姓,以及三个描述你的键值对。

def build_profile(first,last,**extra):
	
	"""返回我的简介字典——profile{}"""
	profile = {}
	profile['fname'] = first
	profile['lname'] = last
	
	#将extra{}中的键值对填充为profile{}的键值对
	for key,value in extra.items():
		profile[key] = value
	return profile

my_profile = build_profile('Jiayi','Zhou',
							job = 'student',
							age = '21')
print(my_profile)

在这里插入图片描述

def make_car(maker,size,**extra):
	
	"""返回字典"""
	car_profile = {}
	car_profile['c_maker'] = maker
	car_profile['c_size'] = size
	for key,value in extra.items():
		car_profile[key] = value
	return car_profile

car = make_car('subaru' , 'outback',
				color = 'blue',
				tow_package = 'True')
print(car)

在这里插入图片描述

六、函数与模块

1.导入整个模块

要让函数是可导入的,得先创建模块。模块是扩展名为.py的文件,包含要导入到程序中的代码。
①编写一条import语句并在其中指定模块名,就可在程序中使用该模块中的所有函数。

import moudule_name#improt 模块名

②导入了名为module_name.py的整个模块,就可用下面的语法来使用其中任何一个函数:

module_name.function_name ()#调用模块中的函数—————模块名.函数名()

2.导入函数

from module_name import function_name#导入模块中的特定函数
from module_name import function_0 , function_1 , function_#导入任意数量的函数
from pizza import * #导入模块中所有的函数

3.使用as给函数、模块指定别名

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短 而独一无二的别名——函数的另一个名称,类似于外号。要给函数指定这种特殊外号,需要在导 入它时这样做。

from module_name import function_name as fn#给函数指定别名
import module_name as mn#给模块指定别名

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值