第8章 Python基础知识学习—函数

8.1 定义函数

①函数定义:向python指出了函数名,还可能在圆括号内指出函数为完成任务需要什么样的信息,定义以冒号结尾
②紧跟在函数定义后面的是函数体
③文档字符串:用三引号括起,生成有关程序中函数的文档
④函数调用来执行函数的代码

def user():
    """显示简单的问候语"""
    print("Hello")
user()

8.1.1 向函数传递信息
①在函数定义的括号内添加要传递的信息

def user(username):
    """显示简单的问候"""
    print(f"Hello,{username.title()}")
user(alice)

8.1.2 实参和形参
①在函数定义def user(username)中username是一个形参
②在函数调用user(alice)中alice是一个实参

8.2 传递实参

①实参分为位置实参和关键字实参
8.2.1 位置实参
①位置实参特点:关联方式是基于实参的顺序

#函数定义,定义type1和name两个形参
def pet(type1,name):
    """显示宠物的信息"""
    print("\nI have a {type1}")
    print("\n My {type1}'s name is {name.title()}")
 #传递类型和名字两个实参,一一对应type1和nme
pet('hamster','harry')

②在函数中,可根据需要使用任意数量的位置实参,python将按顺序将函数调用中的实参关联到函数定义中相应的形参
③notice:位置实参的顺序很重要,一一对应
8.2.2 关键字实参
①关键字实参是传递给函数的名称值对
②关键字实参无须考虑函数调用中的实参顺序
③使用关键字实参时,要明确指定函数定义中的形参名

#函数定义,定义type1和name两个形参
def pet(type1,name):
    """显示宠物的信息"""
    print("\nI have a {type1}")
    print("\n My {type1}'s name is {name.title()}")
 #传递值对关键字实参
pet(type1='harry',name='hamster')

8.2.3 默认值
①可给每个形参指定默认值,给形参指定默认值时,可在函数调用中省略相应的实参

#函数定义,定义type和name两个形参
def pet(name,type1='dog'):
    """显示宠物的信息"""
    print("\nI have a {type1}")
    print("\n My {type1}'s name is {name.title()}")
pet(pet_name='ahh')
#输出结果type :dog name:ahh
#或者pet(pet_name='ahh',type1='master')
#由于显示地给类型提供了实参,将忽略默认值dog,类型就为master

8.2.4 等效的函数调用
① 可混用使用位置实参、关键字实参、默认值,通常有多种等效的函数调用方式

def pet(name,type1='dog'):
基于这种定义,就有多种调用方式
#1.按默认值,位置实参pet('hah')
#2.按默认值,关键字实参pet(name='hha')
#3.不按默认,位置实参pet('hah','dff')
#4.不按默认,关键字实参pet(name='hhh',type1='fdd')
#5.不按默认,关键字实参,其实4、5是一样的pet(type1='gjj',name='ewd')

8.3 返回值

①函数返回的值称为返回值,可使用return语句将值返回到调用函数的代码行
8.3.1 返回简单的值

#定义函数,传入姓名两个形参
def name(first_name,last_name):
    """返回整洁的姓名"""
    full_name = f"{first_name}{last_name}"
    #返回姓名的值到调用的函数
    return full_name.title()
musician = name('jihi','fhh')
#打印从return返回的值
print(musician)

8.3.2 让实参变成可选的
①可给形参给一个空的默认值,将其移到形参列表的最末尾,并在用户没有提供时不使用这个形参

#函数定义,给middle_name一个空的默认值
def name(first_name,last_name,middle_name=''):
    """返回整洁的姓名"""
    #有middle_name实参时
    if middle_name:
       full_name = f"{first_name}{middle_name}{last_name}"  
     #无middle_name实参时
    else:
        full_name = f"{first_name}{last_name}"
    return full_name.title()
musician = name('jihi','fhh')
#打印从return返回的值
print(musician)

8.3.3 返回字典
①函数可返回任何类型的值,包括列表和字典较复杂的数据结构

def build_person(first_name,last_name,age=None):
    """返回一个字典"""
    person = {'first':first_name,'last':last_name}
    #若传入age实参
    if age:
       #把age放入字典中
        person['age'] = age
    return person
musician = build_person('ffd','ffd',age=23)
print(musician)

②在上面例子的函数定义中,新增一个可选形参age,并将其默认值设置为None,表示变量没有值
8.4 传递列表
①将列表传递给函数后,函数就能直接访问其内容

def users(names):
    """向列表中的每位用户发出简单的问候"""
    for name in names:
         msg = f"Hello,{name.title()}"
         print(msg)
#存放名字的列表
usernames = ['lily','bob','mary']
#调用函数,向形参传递列表
users(usernames)

8.4.1 在函数中修改列表
①在函数中对列表做的修改都是永久性的
②为了保留原文件,可对原文件进行复制,对副本做修改,从而不影响原文件,可用切片表示法[:]来创建副本

def models(ubprinted_designs,completed_models):
    """模拟打印每个设计,直接没有未打印的设计为止
    打印每个设计后,都将其移动到列表completed_models中"""
    while ubprinted_designs:
        current_design = ubprinted_designs.pop()
        print(f"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 )
ubprinted_designs = ['phone case','robot pendant','completed_models']
completed_models = []
#调用函数,向形参传递实参的副本
models(ubprinted_designs[:],completed_models )
show_completed_models(completed_models )

8.5 传递任意数量的实参

8.5.1 结合使用位置实参和任意数量实参
①有时,并不知道函数需要接受多少个实参,这时,就需要传递任意数量的实参
②运用通用形参名*args,可以收集任意数量的位置实参,*args形参名中的星号让python创建一个名为args的空元组
③要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后

def make_pizza(size,*toppings):
    """概述要制作的披萨"""
    for topping in toppings:
        print(topping)
#可调用任意数量的实参
make_pizza(16,'milk')
make_pizza(16,'apple','pich')

8.5.2 使用任意数量的关键字实参
①有时候需要接受任意数量的实参,但不知道有多少个形参,此时,就需要不考虑有多少个形参,结合关键字实参
②运用通用形参**kwargs,双星号让python创建一个名为kwargs的空字典,并将收到的所有的键值对都放在字典中
③在编写函数时,可以混合使用位置实参、关键字实参和任意数量的实参

def build_profile(first,last,**user_info):
     """创建一个字典,其中包含我们知道的有关用户的一切"""
     #把姓和名放入字典
     user_info['first_name'] = first
     user_info['last_name'] = last
     #将字典返回到函数调用行
     return user_info
user_profile = build_profile('a','b','location':'china','field':'computer')
print(user_profile )

8.6 将函数存储在模块中

① 将函数存储在称为模块的独立文件中,再将模块导入到主程序中
8.6.1 导入整个模块
①模块时扩展名为.py的文件

import pizza

8.6.2 导入特定的函数

from mudle import function_name

8.6.3 使用as给函数指定别名

from pizza import make_pizza as mp

8.6.4 使用as给模块指定别名

import pizza as p

8.6.5 导入模块中的所有函数

from pizza import*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值