函数

扫码查看
一、定义函数


1、定义函数



示例:

def greet_user():           #定义含函数

    """显示简单问候语"""           #文档字符串,用三引号括起,python使用它来生成有关程序中函数的文档

    print('您好')         #函数体,执行语句


greet_user()                  #调用函数




执行结果:

您好


---------------------------------------------------------------------


2、向函数传递信息


示例:

def greet_userp(uname):
     """显示简单问候语"""
     print('您好: ' + uname + '!')

greet_userp('沈巍伟')


执行结果:

您好: 沈巍伟!

---------------------------------------------------------------------------------------


3、实参和形参

下面的示例中,uname即为 形参


              '袁凌'即为  实参


示例:

def greet_userp(uname):
     """显示简单问候语"""
     print('您好: ' + uname + '!')

greet_userp('袁凌')


执行结果:

您好: 袁凌!

=====================================================
=====================================================
=====================================================
=====================================================



二、传递实参


函数定义中可能包括多个形参,因此函数调用中也可能包含多个实参。

向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;

也可使用关键字实参,其中的每个实参都由变量名和值组成;

还可以使用列表和字典;


1、位置实参

调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,

最简单的关联方式是基于实参的顺序。这种关联方式称为位置实参。


示例:


def describe_pet(animal_type,animal_name):
                                             """显示动物类型和名字"""
    print("\n动物类型是: "+animal_type)

    print('动物名字是: '+animal_name)

describe_pet('宠物猫','橘猫')

describe_pet('宠物狗','哈士奇')




执行结果:

动物类型是: 宠物猫
动物名字是: 橘猫

动物类型是: 宠物狗
动物名字是: 哈士奇


-------------------------------------------------------------------

2、关键字实参


关键字实参是传递给函数的名称——值对。直接在实参中将名称和值关联起来了;

关键字实参无需让你考虑调用的实参的顺序,还清楚的指出了函数调用中各个值的用途;

示例:


def describe_pet(animal_type,animal_name):
                                               """显示动物类型和名字"""
    print("\n动物类型是: "+animal_type)

    print('动物名字是: '+animal_name)

describe_pet(animal_type='宠物猫',animal_name='橘猫')

describe_pet(animal_name='哈士奇',animal_type='宠物狗')




执行结果:


动物类型是: 宠物猫
动物名字是: 橘猫

动物类型是: 宠物狗
动物名字是: 哈士奇


------------------------------------------------------------

3、默认值

编写函数时,可给每个形参指定默认值,在调用函数中如果给形参提供了实参时,python将使用

指定的实参值;否则,将使用形参的默认值;


在使用默认值时,在形参列表中必须先列出没有默认值的形参;再列出有默认值的形参;


示例:


def describe_pet(animal_type,animal_name='神龙'):
                                                    """显示动物类型和名字"""
    print("\n动物类型是: "+animal_type)

    print('动物名字是: '+animal_name)


describe_pet(animal_type='宠物猫',animal_name='橘猫')

describe_pet(animal_name='哈士奇',animal_type='宠物狗')

describe_pet(animal_type='宠物天使')

describe_pet('宠物魔鬼')




执行结果:


动物类型是: 宠物猫
动物名字是: 橘猫

动物类型是: 宠物狗
动物名字是: 哈士奇

动物类型是: 宠物天使
动物名字是: 神龙

动物类型是: 宠物魔鬼
动物名字是: 神龙



---------------------------------------------------------------------

4、等效的函数调用

即几种函数调用方式都可以,可以混合使用


示例:


def describe_pet(animal_type,animal_name='神龙'):
                                                       """显示动物类型和名字"""
    print("\n动物类型是: "+animal_type)
    print('动物名字是: '+animal_name)

describe_pet(animal_type='宠物猫',animal_name='橘猫')

describe_pet(animal_name='哈士奇',animal_type='宠物狗')

describe_pet(animal_type='宠物天使')

describe_pet('宠物魔鬼')

describe_pet('宠物魔鬼','')





执行结果:


动物类型是: 宠物猫
动物名字是: 橘猫

动物类型是: 宠物狗
动物名字是: 哈士奇

动物类型是: 宠物天使
动物名字是: 神龙

动物类型是: 宠物魔鬼
动物名字是: 神龙

动物类型是: 宠物魔鬼
动物名字是: 鬼

===============================================================
===============================================================
===============================================================
===============================================================

三、返回值


示例:

def get_formatted_name(first_name,last_name):
                                                   """返回整洁的姓名"""
    full_name = first_name + '  ' + last_name
    return  full_name

musician = get_formatted_name('巍伟','')

print(musician)


执行结果:

巍伟  沈

---------------------------------------------------------------


2、让实参变成可选的

有时候,需要让实参变成可选的,这样使用函数的人就只需要在必要时才提供额外的信息



python将非空字符串解读为true,因此函数提供了中间名,则if middle_name = true


示例:


def get_formatted_name(first_name,middle_name,last_name):
                                                                       """返回整洁的姓名"""
    full_name = first_name + '  '+ middle_name + '  ' + last_name

    return  full_name



musician = get_formatted_name('','','')

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


musician = get_formatted_name('wei','wei','shen')
print(musician)

musician = get_formatted_name('ling','yuan')
print(musician)


执行结果:

wei  shen  wei
ling  yuan


--------------------------------------------------------------------

3、返回字典



示例:


def person(first_name,last_name):
                                                                 """返回一个字典,其中包含有关一个人的信息"""
    person = { 'first_name': first_name,'last_name':last_name}
    return  person


musician = person('wei','shen')
print(musician)

musician = person('ling','yuan')
print(musician)




执行结果:

{'first_name': 'wei', 'last_name': 'shen'}
{'first_name': 'ling', 'last_name': 'yuan'}

--------------------------------------------------------------


示例:


def person(first_name,last_name,age=''):
                                                       """返回一个字典,其中包含有关一个人的信息"""
    person = { 'first_name': first_name,'last_name':last_name}
    if age :
        person['age'] = age
    return  person


musician = person('wei','shen')
print(musician)

musician = person('ling','yuan',27)
print(musician)





执行结果:

{'first_name': 'wei', 'last_name': 'shen'}
{'first_name': 'ling', 'last_name': 'yuan', 'age': 27}


--------------------------------------------------------------


4、结合使用函数和while循环



示例:


def get_formatted_name(first_name,last_name) :
                                                       """返回整洁的姓名"""
    full_name = first_name+' '+last_name
    return  full_name

while True :
    print('\n请输入您的姓名; ')
    print("输入'q'退出")

    f_name = input("first_name :  ")
    if f_name == 'q' :
        break

    l_name = input('last_name :  ')
    if l_name == 'q' :
        break

    formatted_name = get_formatted_name(f_name,l_name)
    print("您好,全名是:  "+formatted_name)



执行结果:



请输入您的姓名;
输入'q'退出
first_name :  wei
last_name :  shen
您好,全名是:  wei shen

请输入您的姓名;
输入'q'退出
first_name :  q


==============================================================

==============================================================

==============================================================

==============================================================


四、传递列表


将列表传递给函数后,函数就能访问其内容。


示例:

def greet_users(names):
                                   """向列表中的每一位用户发出问候"""
    for name in names :
        msg = 'hello   '  + name.title() + '   !'
        print(msg)

usernames = ['shen','yuan','ling']
greet_users(usernames)





执行结果:


hello   Shen   !
hello   Yuan   !
hello   Ling   !

----------------------------------------------


2、在函数中修改列表


示例:


unprinted_designs = ['iphone  case','robot  pendant','dodecahedron']

completed_models = []

while unprinted_designs:
    current_design = unprinted_designs.pop()

    print('模拟3D打印过程:  '+'  '+current_design)
    completed_models.append(current_design)


print('\n显示所有打印好的模型:  ')

for completed_model in completed_models :
    print(completed_model)





执行结果:



模拟3D打印过程:    dodecahedron
模拟3D打印过程:    robot  pendant
模拟3D打印过程:    iphone  case

显示所有打印好的模型:
dodecahedron
robot  pendant
iphone  case


-------------------------------------------------------------

示例:

def print_models(unprinted_designs,completed_models) :
    """模拟打印每一个设计,直到没有未打印的设计为止"""
    while unprinted_designs :
        current_design = unprinted_designs.pop()
        print('模拟3D打印过程:  '+'  '+current_design)
        completed_models.append(current_design)

def show_completed_models(completed_models) :
    """显示打印好的所有模型"""
    print('\n显示所有打印好的模型:  ')

    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)






执行结果:



模拟3D打印过程:    dodecahedron
模拟3D打印过程:    robot  pendant
模拟3D打印过程:    iphone  case

显示所有打印好的模型:
dodecahedron
robot  pendant
iphone  case


------------------------------------------------------------------------


4、禁止函数修改列表


使用切片以及列表副本


=================================================================
=================================================================
=================================================================
=================================================================


五、传递任意数量的实参


预先不知道函数需要接受多少个实参;

形参名*toppings中的*号,让python创建一个名为toppings的空元组,将收到的所有值封装到这个元组中。


示例:

def make_pizza(*toppings):
                                 """打印顾客点的所有配料"""
    print(toppings)

make_pizza('甜酱')

make_pizza('','','','')




执行结果:

('甜酱',)
('', '', '', '')

------------------------------------------------------------




示例:

def make_pizza(*toppings):
                                 """打印顾客点的所有配料"""
    print(toppings)
    for topping in toppings:
        print('   '+ topping)

make_pizza('甜酱')

make_pizza('','','','')




执行结果:

('甜酱',)
   甜酱
('', '', '', '')
   盐
   油
   酒
   醋

------------------------------------------------------------

2、结合使用位置实参和任意数量实参


要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后;


python先匹配位置实参和关键字实参,再将剩余的实参都收集到最后一个形参中;


示例:


def make_pizza(size,*toppings):
                                                                        """打印顾客点的所有配料"""
    print('制作披萨的大小是:  '+str(size)+'  所需配料如下: ')
    for topping in toppings:
        print('   '+ topping)

make_pizza(12,'甜酱')

make_pizza(16,'盐份','油份','酒份','醋份')



执行结果:


制作披萨的大小是:  12  所需配料如下:
   甜酱
制作披萨的大小是:  16  所需配料如下:
   盐份
   油份
   酒份
   醋份



------------------------------------------------------------

3、使用任意数量的关键字实参

将函数编写成能否接受任意数量的键——值对,调用语句提供多少就接受多少;


示例:

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 ( '巍伟','',location='princeton',field='physics' )

print(user_profile)


执行结果:


{'first_name': '巍伟', 'last_name': '', 'location': 'princeton', 'field': 'physics'}



=============================================================================================
=============================================================================================
=============================================================================================
=============================================================================================


六、将函数存储在模块中


比如将函数存储在独立的模块中,再讲模块导入到主程序中。

import语句允许在当前运行的程序中使用模块中的代码;


1、导入整个模块

要让函数时可以导入的,得先创建模块。模块是扩展名为.py的文件;包含要导入到程序中的代码;


pizza.py


def make_pizza(size,*toppings):
                                                              """打印顾客点的所有配料"""
    print('制作披萨的大小是:  '+str(size)+'  所需配料如下: ')
    for topping in toppings:
        print('   '+ topping)


-----------------

import make_pizza


make_pizza(12,'甜酱')

make_pizza(16,'盐份','油份','酒份','醋份')





2、导入特定的函数

多个函数之间用逗号分隔;

import pizza import make_pizza





3、使用as给函数指定别名


import pizza import make_pizza as mp

mp(12,'甜酱')

mp(16,'盐份','油份','酒份','醋份')



4、使用as给模块指定别名


import pizza as p

p.make_pizza(12,'甜酱')

p.make_pizza(16,'盐份','油份','酒份','醋份')






5、导入函数中的所有函数



from pizza import *


make_pizza(12,'甜酱')

make_pizza(16,'盐份','油份','酒份','醋份')



注意:给形参指定默认值时,等号两边不要有空格。
12-13 01:29
查看更多