- 8.1 简单函数,名为greet_user()
- 8.2 传递实参
- 8.2.2 关键字实参
- 8.2.3 默认值
- 8.5 传递任意数量的实参
- 8.5.2 使用任意数量的关键字实参
- 8.6 将函数存储在模块中
- 8.6.1 导入整个模块
def greet_user(): """显示简单的问候语""" print("Hello!") greet_user()
显示结果:
Hello!8.2 传递实参
def describe_pet(animal_type, pet_name): """显示宠物的信息""" print("nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet('hamster', 'harry')
结果:
I have a hamster. My hamster's name is Harry.8.2.2 关键字实参
def describe_pet(animal_type, pet_name): """显示宠物的信息""" print("nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet(animal_type='hamster', pet_name='harry') describe_pet(pet_name='harry', animal_type='hamster')
I have a hamster. My hamster's name is Harry. I have a hamster. My hamster's name is Harry.
函数describe_pet() 还是原来那样,但调用这个函数时,我们向Python明确地指出了各个实参对应的形参。看到这个函数调用时,Python知道应该将实参’hamster’ 和’harry’ 分别存储在形参animal_type 和pet_name 中。
关键字实参的顺序无关紧要,因为Python知道各个值该存储到哪个形参中。
编写函数时,可给每个形参指定默认值
def describe_pet(pet_name, animal_type='dog'): """显示宠物的信息""" print("nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet(pet_name='willie')
I have a dog. My dog's name is Willie.8.5 传递任意数量的实参
有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参。 例如,来看一个制作比萨的函数,它需要接受很多配料,但你无法预先确定顾客要多少种配料。下面的函数只有一个形参*toppings ,但不管调用语句提供了多少实参,这个 形参都将它们统统收入囊中:
def make_pizza(*toppings): """打印顾客点的所有配料""" print(type(toppings)) print(toppings) make_pizza('pepperoni') make_pizza('mushrooms', 'green peppers', 'extra cheese')
('pepperoni',) ('mushrooms', 'green peppers', 'extra cheese')
形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中。注意,Python将实参封装到一个元组中,即便函数只收到一个值也如此
现在,我们可以将这条print 语句替换为一个循环,对配料列表进行遍历,并对顾客点的比萨进行描述
def make_pizza(*toppings): """概述要制作的比萨""" print("nMaking a pizza with the following toppings:") for topping in toppings: print(type(topping)) print("- " + topping) make_pizza('mushrooms', 'green peppers', 'extra cheese')
Making a pizza with the following toppings:- mushrooms - green peppers - extra cheese
这样就可以从元组中提取出来字符串
8.5.2 使用任意数量的关键字实参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 return profile user_profile = build_profile('albert', 'einstein', location='princeton', field='physics') print(user_profile)
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}8.6 将函数存储在模块中
函数的优点之一是,使用它们可将代码块与主程序分离。
还可以更进一步,将函数存储在被称为模块的独立文件中, 再将模块导入导到主程序中。import 语句允许在当前运行的程序文件中使用模块中的代码。 通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。
这还能让你在众多不同的程序中重用函数。将函数存储在独立文件中后,可与其他程 序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。 导入模块的方法有多种,下面对每种都作简要的介绍。
模块是扩展名为.py的文件,包含要导入到程序中的代码。下面来创建一个包含函数make_pizza() 的模块。为此,我们将文件pizza.py中 除函数make_pizza() 之外的其他代码都删除:
pizza.py def make_pizza(size, *toppings): """概述要制作的比萨""" print("nMaking a " + str(size) + "-inch pizza with the following toppings:") for topping in toppings: print("- " + topping) ------------------------------------------------------------------- making_pizzas.py import pizza pizza.make_pizza(16, 'pepperoni') pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)