python基础----函数参数

函数参数

(1)直接传入

>>def test(a,b):
      return a+b
>>test(3, 4)

(2)默认参数

>> def add(a, b=2, c=5):
       return a+b
>> add(3)
>> add(3,4)
>> add(3,4,5)

此时将默认参数写在非默认参数之后即可

(3)可变参数

(1)和(2)中的参数数量都不可以变,如果需要传如可变参数怎么办?

假设:给定一组数字a,b,c……,请计算a^2 + b^2 + c^2 + …… 可以这样:

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

但是调用的时候,需要先组装出一个list或tuple,所以调用时大概是这样的:

>> calc([1,2,3])
>>> calc((1,2,3))

其实有更便捷的方法:

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

仅仅将参数加个‘*‘,表示参数接受一个tuple,所以可以这样调用:

>> calc(1,3,4)
>>> calc()

即使传入为空也可以; 如果需要传入list怎么办呢?参数接受的可是一个tuple啊。。。。

>> A =[ 1,2,3]
>> calc(a[0],a[1],a[2]) # 可行但是太笨
# 可以在传入的参数上加个'*'即可
>> calc(*A) # OK

在参数上加上’‘可以使参数接受dict**

>> def person(name, age, **kw):
       print 'name:', name, 'age:', age, 'other:', kw
>> person('gavinzhou',21) # 输出:'name:'gavinzhou 'age:' 21 'other:'{} 
>> kw = {'city': 'Beijing', 'job': 'Engineer'}
>> person('Jack', 24, city=kw['city'], job=kw['job']) 
# 输出:name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
>> 

小结

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误! 要注意定义可变参数和关键字参数的语法: args是可变参数,args接收的是一个tuple kw是关键字参数,kw接收的是一个dict 以及调用函数时如何传入可变参数和关键字参数的语法: 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过args传入:func((1, 2, 3)); 关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kw传入:func(**{‘a’: 1, ‘b’: 2}) 使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏赵俊的Java专栏

Python 函数

1784
来自专栏Python小屋

Python计算整数阶乘的几种方法比较

问题本身很简单,主要是通过这个小问题来演示Python的一些用法,例如测试代码运行时间、函数嵌套定义等等。 from time import time from...

3787
来自专栏Fish

两天了解scala

最前面的话 因为spark的源语言是scala,所以,为了看懂spark的操作并且为了以后看spark源码做准备,先看scala还是很有必要的。另外这里主要是看...

1989
来自专栏机器学习算法工程师

史上最透彻的KMP算法讲解

作 者:柳行刚 编 辑:李文臣 1 字符串匹配是经典的KMP算法。下面以字符串"BBC ABCDAB ABCDABCDABDE"为例,查找是否包含串"ABCDA...

34511
来自专栏闻道于事

Java之异常处理

Java异常处理 异常:异常就是Java程序在运行过程中出现的错误。 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成...

2886
来自专栏水击三千

浅谈JavaScript的函数表达式(递归)

  递归函数,在前面的博客中已经简单的介绍了。递归函数是一个通过函数名称在函数内部调用自身的函数。如下: 1 function fac(num){ 2 ...

22510
来自专栏Laoqi's Linux运维专列

python3–循环语句

1624
来自专栏小樱的经验随笔

【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try {   //需要被检测的异常代码 } ca...

3439
来自专栏xingoo, 一个梦想做发明家的程序员

KMP算法初探

[edit by xingoo] kmp算法其实就是一种改进的字符串匹配算法。复杂度可以达到O(n+m),n是参考字符串长度,m是匹配字符串长度。 传统的算法,...

1796
来自专栏CodingToDie

Python学习(六):函数的参数

第6 章 函数的参数 Table of Contents 位置参数 默认参数 可变参数 关键字参数 命名关键字参数 参数组合 每天步履匆匆,迎接新的战场,面对未...

5156

扫码关注云+社区