7.函数的使用--《Python编程:从入门到实践》

7.1 python 中函数的定义

  python 中函数使用 def 定义: def greet_user(): 

 

7.2 传参的传递 

  普通实参的传毒,可以与 C++ 相同,即按顺序传递。

 

7.2.1 关键字实参 -- 无需考虑传参顺序

  关键字实参是传递给函数的名称—值对。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

def describe_pet(animal_type, pet_name):
    print(animal_type,pet_name)
    # ... ...

# 关键字实参传参,以下两行代码等效
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')

 

7.2.2 默认值

  同 C++。注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参,这也与 C++ 相同。

def describe_pet(pet_name, animal_type='dog'):
    print(pet_name,animal_type)

describe_pet('www')

 

7.2.3 让参数变成可选择的

  可给能选择是否输入的实参指定一个默认值——空字符串,并在不输入这个参数值时不使用这个实参。

  例如函数是要输入姓氏,中间名,名称三个参数,但是有的人不存在中间名,这时就需要参数可选。

# 可选择是否输入的参数给予空白的默认值
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)

 

7.3 在函数中修改列表

  将列表作为参数传递给函数后,函数就可以对其进行修改,而这种修改对于列表来说是永久性的。

def print_models(unprinted_designs, completed_models):
    """
    模拟打印每个设计,直到没有未打印的设计为止
    打印每个设计后,都将其移到列表completed_models中
    """
    while unprinted_designs:
        current_design = unprinted_designs.pop()

        # 模拟根据设计制作3D打印模型的过程
        print("Printing model: " + current_design)
        completed_models.append(current_design)

def show_completed_models(completed_models):
    """显示打印好的所有模型"""
    print("\nThe following models have been printed:")
    for completed_model in completed_models:
        print(completed_model)

# 未打印的列表
unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
# 打印完成的列表
completed_models = []
# 打印完成列表++,未打印列表--
print_models(unprinted_designs, completed_models)
# 输出打印完成的列表
show_completed_models(completed_models)

 

7.3.1 禁止函数修改列表

  要禁止函数修改列表,可以将列表的副本(列表[:])传给函数,这样即使修改也是修改的列表的副本,对列表本身没有影响。

function_name(list_name[:])    # 要将列表的副本传递给函数

 

7.4 传递任意数量的实参

  形参形式形如 *形参名,即可接收任意数量的实参。即创建了一个元组,而任意数量的实参封装到了这个元组中。

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

# pizzas 接收多个参数
def make_pizza(custom,*pizzas):
    """概述要制作的比萨"""
    print(custom,"buy these pizza:")
    for pizza in pizzas:
        print("- " + pizza)
    print("\n")

make_pizza('张三','pepperoni')
make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

 

7.5 将函数存储在模块中

将一整个模块导入,以模块名.函数名的形式调用函数。

pizza.py:

def make_pizza(custom,*pizzas):
    """概述要制作的比萨"""
    print(custom,"buy these pizza:")
    for pizza in pizzas:
        print("- " + pizza)
    print("\n")

main.py:

import pizza

pizza.make_pizza('张三','pepperoni')
pizza.make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

 

7.5.1 导入特定模块的特定函数

pizza.py:

def make_pizza(custom,*pizzas):
    """概述要制作的比萨"""
    print(custom,"buy these pizza:")
    for pizza in pizzas:
        print("- " + pizza)
    print("\n")

main.py:

from pizza import make_pizza    # 来自 pizza 模块的导入

make_pizza('张三','pepperoni')
make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

 

 7.5.2 使用 as 给函数指定别名/给模块指定别名

  如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可使用 as 指定别名。

from pizza import make_pizza as mp 
mp(16, 'pepperoni') 
mp(12, 'mushrooms', 'green peppers', 'extra cheese') 

  我们还可以给模块指定别名。

import pizza as p 
p.make_pizza(16, 'pepperoni') 
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese') 

 

7.5.3 导入模块的全部函数

  from 模块名 import *

注意:最好不要采取这种方式,避免函数名相同带来不好的结果。  

 

posted @ 2022-07-22 11:13  人类观察者  阅读(35)  评论(0编辑  收藏  举报