美文网首页
自定义函数的4种方法

自定义函数的4种方法

作者: 醉看红尘这场梦 | 来源:发表于2020-03-13 11:02 被阅读0次

提起函数,你一定不会陌生。其实在前面的内容里,我们已经用过了很多Python提供的函数,例如打印内容的print。这一节,我们来看如何自定义一个函数。

定义一个最简单的函数

在Python里,一个最简单函数看上去是这样的:

def a_stub_function():
    pass

实际上,这是一个什么都不做的函数,但是,我们还是可以从中找到很多有用的东西,例如:

  • 函数是通过关键字def来定义的;
  • 在Python里,不推荐使用驼峰式的命名方式,大家更习惯使用全小写字母的方式。如果你在函数名中使用了大写字母,一些IDE会给你格式警告的;
  • 由于函数引入了新的作用域,同样要在def语句末尾使用:
  • 在函数的定义里,我们只写了一个pass,这也是Python中的关键字,表示“过”的含义。例如,在设计一个功能之初,如果你只是想勾勒出程序大体的框架,而暂时忽略细节,就可以在函数里临时使用pass

理解函数的两种参数

最基本的函数参数

了解了定义函数的基本套路之后,我们来看一个更真实一些的函数add,它接受两个参数,返回它们的和:

def a_stub_function():
    pass

def add(m, n):
    return m + n

先来说一个格式约定的问题,在Python里,两个函数的定义之间,推荐保留两个空行,无论是多一个或者少一个,都不符合Python的编码习惯,IDE同样会给你提示的。

接下来,来看add的定义,它有两个参数ab,为了求和,我们直接在实现里return a + b就好了。这里要说明的是,Python中的所有函数,都是有返回值的。如果你在函数的定义中不指定return语句,这个函数会返回None

定义好之后,就可以用add(1, 2)这样的形式调用了,当然结果就是3。

使用keyword参数

除了上面这种调用方式之外,我们还可以在调用中直接使用参数在函数定义中的名字来表示对应的参数。这有点儿类似Swift中参数的external name。只不过Python中更自由,使用了名字之后,调用参数的顺序都可以是随意的。例如,之前的add还可以这样调用:

add(n=2, m=1)  # 3

当然,结果和之前是一样的。要注意的是,=的前后,不推荐使用空格,例如,我们要写成n=2,而不要写成n = 2

给函数的参数指定默认值

当然,我们也可以用类似的方式,给函数的参数指定默认值,就像这样:

def add(m=2, n=1):
    return m + n

于是,当我们这样使用add()的时候,得到的结果同样是3。只不过,和其它编程语言一样,函数的默认参数定义,只能是从右向左依次定义的。我们不能指定m的默认值,而不指定n的默认值。

使用可变长参数列表

接下来,我们还可以进一步改进add,让它计算可变个数参数的和。为此,我们有两种做法,先来看简单的。如果我们希望像这样调用add

add(1, 2, 3, 4, 5)

就可以把之前add的定义改成这样:

def add(*args):
    tmp = 0

    for i in args:
        tmp += I

    return tmp

其中,*arg这种形式,就表示任意多个参数,这样的含义。*表示任意多,而args只是个参数名的替代符,我们可以随意使用一个名字。

这样,在add的实现里,args就会被定义成一个tuple,我们只要遍历这个tuple,然后累加求和就好了。

或者,如果你还希望可以这样调用add

add(n1=1, n2=2, n3=3)

我们就要把add定义改成这样:

def add(**args):
    tmp = 0

    for i in args:
        tmp += args[I]

    return tmp

其中,**表示任意多个keyword参数,同样args是一个自定义的名称替代符。这时,在add的实现里,args就会变成一个dictionary,它的key是调用函数的时候,使用的参数名,value则是传递的参数值。例如,对add(n1=1, n2=2, n3=3)这个例子来说,args的值就是这样的:{'n1': 1, 'n2': 2, 'n3': 3}

我们之前提到过,使用for遍历dictionary的时候,遍历的是key,因此,只要用args[i]这样的形式,就可以遍历到所有的参数值,然后进行累加了。

实际上,除了单独使用***之外,我们还可以把它们混合起来用,例如这样:

def add(*args, **k_args):
    tmp = 0

    for i in args:
        tmp += I

    for i in k_args:
        tmp += k_args[I]

    return tmp

对于这种用法,只有一个限制,就是*args必须写在**k_args前面。至于实现则很简单,我们只要分别用两个for循环计算参数和就好了。

这样,在调用的时候,我们就可以先传递普通参数,而后传递keyword参数了:

print(add(4, 5, n1=1, n2=2, n3=3))  # 15

相关文章

  • python 使用函数名的字符串调用函数(4种方法)

    python 使用函数名的字符串调用函数(4种方法)

  • 自定义函数的4种方法

    提起函数,你一定不会陌生。其实在前面的内容里,我们已经用过了很多Python提供的函数,例如打印内容的print。...

  • 面向对象(二)创建对象的几种方法

    创建对象的几种方法 字面量方式 使用内置的构造函数 使用简单工厂函数 自定义构造函数 01字面量的方式创建对象 结...

  • JavaScript对象级方法

    自定义对象:有初始化对象和定义构造函数的对象两种方法 详细演示见 :javascript入门系列演示·函数的定义以...

  • 1. R语言运行效率分析 (4)

    方法4: 采用 for + switch 语句 1: 自定义函数 2: 调用函数进行运算 (未完!待续……)

  • Keras多输出模型构建

    1、多输出模型 使用keras函数式API构建网络: 2、自定义loss函数 3、批量训练 4、调试 在自定义的l...

  • mysql-自定义函数

    创建自定义无参数函数 调用自定义函数 创建有参数的自定义函数 调用有参数的自定义函数 创建具有复合结构的自定义函数...

  • 9.MySQL自定义函数

    自定义函数 自定义函数的两个必要条件 参数 返回值 创建自定义函数 函数体 例子 带有参数的自定义函数 删除函数 ...

  • Python_4_函数

    4.函数 使用def创建一个函数 调用函数 调用函数另外一种方法 参数数量可变 参数数量可变的keyword参数 ...

  • trace函数、自定义函数

    trace函数:修改部分可见函数的源代码。自定义函数:函数名<-function(){ } ①自定义函数 ②匿名函...

网友评论

      本文标题:自定义函数的4种方法

      本文链接:https://www.haomeiwen.com/subject/qccyjhtx.html