活动地址:CSDN21天学习挑战赛
函数下篇
1.返回值
函数并非总是直接显示输出,它还可以处理一些数据,并返回一个或一组值。函数返回的值称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。
1.1.返回简单值
def live(where,time):
a=f"i live in {where},and at the time {time}"
return a
w=input()
t=input()
live(w,t)
在需要分别存储大量住址和时间的大型程序中,这样的函数就非常有用,可以分别存储,每次需要显示时都调用这个函数。
1.2.让实参变成可选的
有时候,需要让实参变成可选的,这样使用函数的人就能只在必要时提供额外的信息。可使用默认值来让实参变成可选的。
先举一个栗子:
name=input("请输入姓名:")
where=input("请输入住址:")
time=input("请输入时间:")
def ueser(a,b,c):
message=f"登记成功,用户名为:{a},住址:{b},入住时间:{c}"
return message
ueser(a=name,b=where,c=time)
这里我们传递三个实参,结果如图所示,但是如果我们没有传递三个实参的话程序就会报错:
这就说到了让实参变为可选的必要性
将代码进行修改:
name=input("请输入姓名:")
where=input("请输入住址:")
time=input("请输入时间:")
def ueser(a,b,c=''):
if c:
message=f"登记成功,用户名为:{a},住址:{b},入住时间:{c}"
else:
message=f"登记成功,用户名为:{a},住址:{b}"
return message
ueser(a=name,b=where)
这里我们没有给形参‘c’进行传递,但是依然能运行成功。这种方法就可以用到一些文本的可选项,你可以填也可以不填。
1.3.返回字典
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构、例如。下面的函数接受姓名的组成部分,并返回一个表示人的字典:
def build_person(first_name,last_name):
person={'first':first_name,'last':last_name}
return person
user=build_person('ikun','jinitaimei')
print(user)
函数build_person()接受名和姓,并将这些值放到字典中。存储first_name时,使用的键为‘first’,而存储last_name的值时,使用的键为’last’。最后,返回表示人的整个字典。
1.4.结合使用函数和while函数
可将函数同前面介绍的python结构结合起来使用。例如,下面将结合使用函数user()和while循环:
def user(name):
print(f"hello {name}")
while True:
a=input("输入你的名字:")
user(a)
2.传递列表
我们会经常发现,向函数传递列表很有用,其中包含的可能是名字、数或更复杂的对象(如字典)。将列表传递给函数后,函数就能直接访问其内容。下面使用函数来提高处理列表的效率。
def user(a):
for i in a:
print(f"hello {i}")
names=['蔡徐坤','鸡','王宝强']
user(names)
3.传递任意数量的实参
有时候,预先不知道函数需要接受多少个实参,好在python允许函数从函数从调用语句中收集任意数量的实参。
例如,
def user(*a):
for i in a:
print(f"hello {i}")
names=['蔡徐坤','鸡','王宝强']
where=['鸡窝','狗窝','养殖场']
time=['一年','两年','两年半']
user(names,where,time)
形参*a中的星号让python创建一个名为a的空元组,并将收到的所有值都封装到这个元组中。函数体内的函数调用print()通过生成输出,证明python能够处理一个值来调用函数的情形,也能处理使用三个值来调用函数的情形。
注意,python将实参封装到一个元组中,即便函数只收到一个值:
3.1结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
例如,如果前面的函数还需要一个形参,必须将其放在形参*a前面。
def user(A,*a):
for i in a:
print(f"{A}")
print(f"hello {i}")
names=['蔡徐坤','鸡','王宝强']
where=['鸡窝','狗窝','养殖场']
time=['一年','两年','两年半']
user(names,where,time)
基于上述定义,python将收到的第一个值赋给A,并将其他所有值都存储在元组a中。
3.2.结合使用位置实参和任意数量实参
有时候。需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键值对——调用语句提供了多少就接受多少。
def build_profile(first,last,**user):
user['first_name']=first
user['last_name']=last
return user
build_profile('ikun','li',location='1',field='2')
函数build_profile()中,形参**user中的两个星号让python创建一个名为user的空字典,并将收到的所有名称值对都放到这个字典中。在这个函数中,可以像访问其他字典那样访问user中的名称值对。
4.将函数存储在模块中
使用函数的优点之一是可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。你还可以更进一步,将函数存储在称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。
4.1导入整个模块
要让函数是可导入的,得先创建模块。 模块是扩展名为.py的文件,包含要导入到程序中的代码。下面来创建一个包含函数make_pizaa()模块。
def make_pizza(a):
for i in range(a):
print(f"hello {i}")
4.2导入特定的函数
还可以导入模块中的特定函数,使用时就不用加上模块名直接使用函数名使用即可
4.3导入模块中所有函数
from user import *
这个*号就是直接把user模块的所有函数都导入进来。由于导入了每个函数,可通过名称来调用每个函数。