Python学习记录(基础篇:函数)

函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用该函数。

  • 简单函数的构成
def greet_user():
#使用关键字def定义一个函数,可以在括号内指出函数为完成其任务需要什么样的信息。以冒号结尾。
	"""显示简单的问候"""
	#文档字符串,描述该函数的功用。使用help()函数可以查看该注释内容
	print("Hello!")
greet_user()#函数调用。一次指定函数名以及用括号括起来的必要信息。

修改版本如下:

def greet_user(name):
#使用关键字def定义一个函数,可以在括号内指出函数为完成其任务需要什么样的信息。以冒号结尾。
	"""显示简单的问候"""
	#文档字符串,描述该函数的功用。使用help()函数可以查看该注释内容
	print("Hello!"+name.title()+".")
greet_user('lin')#函数调用。一次指定函数名以及用括号括起来的必要信息。我们在这指定了姓名。可重复调用。

在这里,涉及形参和实参的关系。
本函数中,name是一个形参,即函数完成工作所需的一项信息。
而’lin’是一个实参,是调用函数是传递给函数的信息。

传递实参的方式

函数定义可能包含多个形参,函数调用也可能包含多个实参。
向函数传递实参的方式基本上有:位置实参(要求实参与形参位置一致);关键字实参(每个实参都由变量名和值组成);使用列表和字典。

  • 位置实参
    基于实参的位置关联到形参。
def describe_pet(a_type,name):
	"""显示动物信息"""
	print("The type is "+_type+".")
	print("The name is "+name+".")
describe_pet('dog','whilte')

在这里,需要一种动物类型和名字。在定义时我们定义了两个形参,在调用时依次给出两个实参。两个实参依次存储在两个形参变量中。
一定要注意顺序要一样。

  • 关键字实参
    关键字实参是传递给函数的名称——值对。在实参中将名称和值关联起来。无需考虑函数调用中的实参顺序,并清除指出了函数调用中各个值的用途。
def describe_pet(a_type,name):
	"""显示动物信息"""
	print("The type is "+_type+".")
	print("The name is "+name+".")
describe_pet(name='whilte',a_type='dog')

在这里,顺序完全不同,但输出一样,并很清楚实参值的用处。
必须要准确指定函数定义中的形参名。

  • 默认值
    编写时,可以给形参指定默认值。在调用函数时给形参提供了实参时,Python将使用指定的实参值;否则,将使用默认值。给形参指定默认值后,可以在函数调用时省略相应的实参。
def describe_pet(name,a_type='dog'):
	"""显示动物信息"""
	print("The type is "+_type+".")
	print("The name is "+name.title()+".")
describe_pet(name='whilte')

我们将a_type指定默认值’dog’,调用时,也没有给其指定值,所以Python将会继续使用这个值。
一定要将带有默认值的形参放在末尾处,否则会报错。原因是Python已然将实参视作位置实参。

返回值

函数除了直接显示输出外,还可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。可用return语句将值返回到调用函数的代码行。
返回值的好处在于能够将程序的大部分繁重工作移到函数中完成,从而简化主程序。

  • 返回简单值
def get_fullname(f_name,l_name):
	"""返回整个名字"""
	full_name=f_name+' '+l_name
	return full_name.title()
hero=get_fullname('lin','hert')
print(hero)

我们将full_name的值首字母大写,并将结果返回到函数调用行。
调用返回值的函数时,必须要提供一个变量用于存储返回的值。

  • 返回字典
def build_person(f_name,l_name):
	"""返回一个字典,其中存储包含一个人的信息"""
	person={'first':f_name,'last':l_name}
	return person
people=build_person('lin','he')
print(people)

将形参包含在字典内,调用时不断用实参填充字典。

  • 结合使用while循环
def get_fullname(f_name,l_name):
	"""返回整个名字,并打招呼"""
	full_name=f_name+' '+l_name
	return full_name.title()	
sign=True
while sign:
	print("Please entry your name.")
	f_name=input("This is your first name: ")
	if f_name=='q':
		sign=False
	l_name=input("Last name: ")
	if l_name=='q':
		sign=False
	hero=get_fullname(f_name.l_name)
 	print("Hello!"+hero+'.')

我们先定义了一个返回值的函数,而后使用用户输入调用该函数,在用户输入时,使用标志退出循环。

  • 使用函数修改列表
def print_models(un_designs,over_models):
	"""模拟打印每个设计,打印结束后,转移到另一个列表中"""
	while un_designss:
		design=un_designs.pop()#从末尾依次弹出元素
		print("Ing:"+design+".")
		over_models.append(design)
def show_design(over_models):
	"""显示打印好的"""
	print("\nHave been printed:")
	for design in over_models:
		print(design)
		
un_designs=['robot','dog','cat','tiger']
over_models=[]
print_models(un_designs,over_models)
show_designs(over_models)

我们定义了两个函数,第一个打印模型,并将打印好的转移到另一个列表中,第二个显示打印好的模型信息。我们在调用时先给变量赋值,再将变量作为实参传入。
如果不想让原来的列表清空,可以使用切片,即def print_models(un_designs[:],over_models)。这样函数所做的任何修改都只影响副本。

传递任意数量的实参

  • 元组实参
def make_food(*toppings):
	"""打印所有配料"""
	print(toppings)
make_food('pea')
make_food('mushrooms','cheese')

形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将接收到的所有值都封装到这个元组内。
要注意,如果要让函数接受不同类型的实参,必须将函数定义中的接纳任意数量实参的形参放在最后。

ef make_food(size,*toppings):
	"""打印所有配料"""
	print(toppings)
make_food(16,'pea')
make_food(18,'mushrooms','cheese')

Python会优先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

  • 字典实参(关键字)
    需要接收任意数量的实参,但预先不知道传递给函数的是什么样的信息。这个时候,可以将函数编写成能够接受任意数量的键值对(调用语句提供了多少就接受多少)。
def build_profile(first,last,**user_info):
	"""创建一个字典,其中包含我们知道的有关用户的一切"""
	profile={}
	profile['first_name']=first
	profile['last_name']=last
	#添加字典元素,使用前两个实参
	for key,value in user_info.items():
		profile[key]=value
	#使用for循环将自定义数量的键值对输入进该字典
	return profile#返回填充好的字典
user_profile=build_profile('albert','einstein',#前两个形参的实参
									location='princeton',
									field='physics'#自定义的键值对
									}
print(user_profile)

形参**user_info中的两个星号让跑一趟hi创建一个名为user_info的空字典,并将接受到的所有键值对都封装到该字典中。
注意:编写函数时,可以以各种方式混合使用位置实参、关键字实参,默认值和任意数量的实参(表示元组的必须放在表示字典的前面)

导入模块

import语句允许在当前运行的程序文件中使用模块中的代码。
模块是扩展名为.py的文件。
只需编写一条import语句并在其中指定模块名。
使用时,就可以使用下面的语法。

module_name.function_name()
  • 导入模块中的特定函数:
    多个时,就用逗号分隔
from module_name import function_name1,function_name2

-导入函数或模块时,指定别名

from module_name import function_name as ph

使用as关键字

  • 导入模块中的所有函数
from module_name import *
  • 函数命名法则
    1 用小写字母与下划线命名
    2 用文档字符串格式注释
    3 默认形参不加空格
    4 注释清晰明了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵海之森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值