美文网首页
记python中函数调用方不按顺序提供部分默认参数的功能以及和p

记python中函数调用方不按顺序提供部分默认参数的功能以及和p

作者: 舒小贱 | 来源:发表于2017-12-15 18:43 被阅读0次

今天看到python的函数部分,发现python的函数有一个很实用的特性:支持函数调用方不按顺序提供部分默认参数
一般的带可选参数的函数和调用如下:

def power(x, n=2):
    if not isinstance(x, (int, float)):
        raise TypeError('input param type error, must be a int or float')
    res = 1
    while n > 0:
        res = res * x
        n -= 1
    return res
print(power(3,2)) 
print(power(5)) #第二个可选参数可以不带

但是如果有多个可选参数,且函数调用方不想按顺序提供可选参数的值,或者不按顺序只提供部分可选参数的值,怎么办?

def stuinfo(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

stuinfo('minp', 'male', city='shanghai')

stuinfo函数有两个可选参数,顺序依次是age、city,当调用方不想提供age,只想传city过来时,python能做到吗?答案是肯定的,我们允许如上demo得到结果:

E:\python_study>python 1.py
('name:', 'minp')
('gender:', 'male')
('age:', 6)
('city:', 'shanghai')

感觉python确实很灵活很方便,万能的php都做不到这一点:

<?php
function getnums($a, $b=1,$c=4){
    return $a + $b + $c;
}
$res = getnums(1, $c=2);
var_dump($res);

运行结果为:

D:\Program Files (x86)\360\skylar6\php>php 1.php
int(7) #注意结果不是我们期待的4,说明php不支持函数调用方不按顺序提供部分默认参数的做法。

说明:当我想提供部分默认参数的值,且不是按顺序提供的话,php是不支持的。
上面例子中,getnums函数的两个默认参数的顺序是$b, $c,但是如果函数调用方不想提供$b, 而只想提供$c的时候,php解析器依然把提供的参数$c=4赋值给了排在前面的默认参数$b,导致了错误结果7而不是4.

结论:python支持这种函数调用方不按顺序提供部分可选参数的做法,php不支持这一点。

参考:
函数的参数

相关文章

  • 当python中函数可选参数遇上可变变量时形成的坑

    从上一篇文章记python中函数调用方不按顺序提供部分默认参数的功能以及和php的不同中可以看到,python对函...

  • 记python中函数调用方不按顺序提供部分默认参数的功能以及和p

    今天看到python的函数部分,发现python的函数有一个很实用的特性:支持函数调用方不按顺序提供部分默认参数。...

  • Python基础-函数定义

    函数定义: 1.默认参数: 只有与默认参数不符的学生才需要提供额外的信息: 也可以不按顺序提供部分默认参数。当不按...

  • 函数

    1. 函数的参数 必选参数、默认参数、可变参数和关键字参数 位置参数 默认参数 多个默认参数,调用时.1.按顺序提...

  • python-调用函数(2)

    python中,有默认参数时,需要将默认参数放在必选参数之后 有多个默认参数时,可以通过顺序提供默认参数,也可以不...

  • [Code] Python简单小知识

    1. Python函数参数 1. 位置参数 调用时根据定义参数的顺序传参,如下例: 2. 默认参数 定义函数时写入...

  • Python函数、对象几个知识点

    函数 一、参数 Python的函数参数可以定义默认值,当调用者没有提供参数时,函数在执行过程中用默认值设置该参数。...

  • python的参数传递

    一、前言 在python中,函数参数的定义和传递有以下几种方式: 在python中,参数可以按照顺序传递,在调用函...

  • 函数之参数详解

    函数之参数详解 2020-09-25 Reads 4 位置入参 函数调用时,实参默认按位置顺序传递,需要个数和形参...

  • C++之函数参数的扩展

    函数参数的默认值 C++中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 参数的...

网友评论

      本文标题:记python中函数调用方不按顺序提供部分默认参数的功能以及和p

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