Python教程——1.8函数的使用

本篇介绍使用Python来封装函数代码块,使得程序的模块化设计可以有效的进行

使用函数的基本形式

  • 函数可多次调用,减少重复工作才是封装函数真正目的
  • 将任务分批次完成,每个步骤通过函数的封装,不仅仅能在这里完成某项工作中完成,其他的工作也能调用其中的某一步,合理的分配步骤能真正的实现代码优化
  • 可以向函数传入不同的数据类型。
封装函数
def addto_(a,b):
    return a+b

以上代码封装了一个函数方法,传入参数a与b,返回a+b

黑盒模型****

本地调用调用函数
def addto_(a,b):
    return a+b
print(str(addto_(1,2)))			#3
#使用函数时直接使用函数名输出即可

上述将调用的函数通过转化为字符串的形式输出

在不同的py文件下调用函数

express.py:

def addto_(a,b):
    return a+b

test.py:

import express
print(str(express.addto_(1,2)))		#3

以上代码通过import从express.py文件中直接调用addto_的方法,可以直接进行使用,实际上我们在一般的情况下,将每个方法分成多个模块,就需要不同的py文件封装,从而使得代码更加规范化

实参和形参

  • 实参:调用函数时传递给函数的信息
  • 形参:函数完成工作所需的信息
位置实参
  • 每个实参都要对应着函数中的实参,而在上面的代码,实现的就是默认位置的调用
  • 上述代码中:a=1,b=2
  • 位置的顺序在很多情况下很重要,因此在多参数的情况下,位置实参并不是一个很好的选择。
关键字实参
def addto_(a,b):
    return a+b
print(str(addto_(b=1,a=2)))				#3

上述代码展示了关键字实参的用法,对原有的顺序不置可否,关键的还是要看形参与实参的关系。

以上代码与上面代码块不同的是,b=1,a=2,是通过我直接将实参赋给形参带入运行的

值得引起我们重视的是,通过上述的方法需要你清楚的记得函数中的形参的形参的拼写

默认值
def addone_(a,b=1):
    return a+b
print(str(addone_(1)))  			#2

以上b通过默认值设置,我们不必再输入b的值,因为其已经默认为1,同样我们可以通过位置参数、关键字参数对其进行修改

因此在使用默认值时,在形参中必须先通过关键字参数列出没有默认值的形参,再列出有默认值的形参。这让Python依然能正确地解读位置参数

传入的列表不修改内容
  • 通过def XXX(数组[ : ]),即通过备份来完成实现对列表的备份
传入任意数量的实参
def addto_(*nums):
    sums = 0
    for num in nums:
        sums = sums + num
    print(str(sums))
addto_(1,2,3,4,5)				#15

通过“*”来表示可以输入任意数量的实参

需要注意的是,其中的值都为元组

接收任意数量的键—值对
def people(name,**message):
    print("name:"+name)
    for key,value in message.items():
        print(key+":"+ str(value))
people("Lindan",age=37,nationality="China")
'''
name:Lindan
age:37
nationality:China
'''

通过传入的键—值对实现对字典的输出,同样,以上也能看出位置实参与任意数量实参的灵活运用

在编写程序时,你可以灵活使用位置实参、关键字实参和任意数量的实参

模块化灵活运用函数

  • 上面我们简单介绍过在其他py文件中直接调用函数,现我们再进一步拓展

express.py:

def addto_(a,b):
    return a+b

以上是我需要导入的函数

导入py文件中特定函数
from express import addto_
print(str(addto_(1,2)))				#3

我们从express文件中导入addto_的函数,这可直接在当前文件中使用该函数

使用as定义别名
from express import addto_ as addnum_
print(str(addnum_(1,2)))			#3

通过as可以重新给函数命名,变成你喜欢的名字,但是值得注意的是,定义别名后,原函数名不可使用

import express as add_to
print(str(add_to.addto_(1,2)))		#3

通过as也可以对模块进行重命名

导入所有的函数
from express import *
print(str(express.addto_(1,2)))

一个模块中不止一个函数,因此想要导入所有的函数,就可以通过 “ * ” 实现