新2019计划:python学习-函数【5】

函数用法

本篇章,主要介绍函数的几种用法,包括传参数、实参形参、不同参数形式(位置实参、关键字实参、任意数量的实参)、以及return返回值、函数存储在模块的独立文件中等。

函数存储在模块的独立文件中,让主程序文件组织更加有序,并且无需反复编写完成该任务的代码,而只需调用 执行该任务的函数。

  • 不传参的函数
def greet_user():
    print("Hello")
  • 简单的传参函数
def greet_user(username):
    print("Hello " + username)

greet_user('jesse')
  • 实参和形参

在上面函数greet_user()的定义中,变量username是一个形参,在代码greet_user('jesse')中,值'jesse'是一个实参,实参是调用函数时传递给函数的信 18
息。
1、 位置实参
你调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此, 最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。因此位置实参的顺序很重要,使用位置实参来调用函数时,如果实参的顺序不正确,结果可能出乎意料。

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')

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')

3、默认值参数

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')
# 和上面的等价
describe_pet('willie')
# 如果描述的不是狗,改变默认值即可
describe_pet(pet_name='harry', animal_type='hamster')
# 或者
describe_pet('harry', 'hamster')
#或者
describe_pet(pet_name='harry', animal_type='hamster') 
# 或者
describe_pet(animal_type='hamster', pet_name='harry')

4、返回值
return一下就行

5、让实参变成可选的
需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可 使用默认值来让实参变成可选的

def get_formatted_name(first_name, middle_name, last_name):
     """返回整洁的姓名"""
    full_name = first_name + ' ' + middle_name + ' ' + last_name 
    return full_name.title()
musician = get_formatted_name('john', 'lee', 'hooker') 
print(musician)
def get_formatted_name(first_name, last_name, middle_name=''):
    if middle_name:
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = first_name + ' ' + last_name
    return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)
musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)
  • 禁止函数修改列表
    可向函数传 递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,而丝毫不影响原件
    function_name(list_name[:]) 即可

  • 传递任意数量的实参
    你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任 意数量的实参。

# 形参名*toppings中的星号让Python创建一个名为toppings的空元组,
# 并将收到的所有值都封 装到这个元组中
def make_pizza(*toppings): 
    """打印顾客点的所有配料""" 
    print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

  • 结合使用位置实参和任意数量实参
def make_pizza(size, *toppings):
    """概述要制作的比萨""" 
    print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping) 
 make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
  • 使用任意数量的关键字实参
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)

函数存储在模块中

  • 导入整个模块
    函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让 主程序容易理解得多。你还可以更进一步,将函数存储在被称为模块的独立文件中,再将模块导 入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
image.png

这就是一种导入方法:只需编写一条import语句并在其中指定模块名,就可在程序中使用该 模块中的所有函数。如果你使用这种import语句导入了名为module_name.py的整个模块,就可使 用下面的语法来使用其中任何一个函数:module_name.function_name()

  • 导入特定的函数


    image.png
  • 使用as给函数指定别名
    语法:from module_name import function_name as fn

from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')
  • 使用as给模块指定别名
    给模块指定别名的通用语法如下: import module_name as mn
import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
  • 导入模块中的所有函数
    语法:from module_name import *
from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
image.png

你可能感兴趣的:(新2019计划:python学习-函数【5】)