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 源码分析

Bootstrap 源码分析

Netty 源码分析: Bootstrap 1. 结构 先看一个这个类的类层次结构, ? 好,这个结构还是比较明晰的,然后看他的主要字段,因为这些字段比较重...

2595
来自专栏乐沙弥的世界

MongoDB 数组查询

三、小结 a、数组查询有精确和模糊之分,精确匹配需要指定数据元素的全部值 b、数组查询可以通过下标的方式进行查询 c、数组内嵌套文档可以通过.成员的...

642
来自专栏海天一树

小朋友学C++(20):内联函数

第(2)种方法比第(1)种方法,有三个优点: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多 ② 如果需要做任何修改,修...

622
来自专栏Java成长之路

多态易错题

①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是”B and B”呢?!!先来回顾一下多态性。

672
来自专栏思考的代码世界

Python基础学习02天

1494
来自专栏Java 源码分析

Bootstrap 源码分析

Netty 源码分析: Bootstrap 1. 结构 先看一个这个类的类层次结构, ? 好,这个结构还是比较明晰的,然后看他的主要字段,因为这些字段比较重...

2952
来自专栏Python

对JAVASCRIPT匿名函数的理解

网上很多解释,我无法理解,我想知道原理。。。这篇文章应该可以透彻一点 Query片段: (function(){ //这里忽略jQuery所有实现 })...

1708
来自专栏企鹅号快讯

Python类与面向对象

面向对象程序 程序 = 指令 + 数据 代码可以选择以指令为核心或以数据为核心进行编程 两种范例 1.以指令为核心:围绕"正在发生什么"编写 面向过程编程:程序...

1848
来自专栏java思维导图

正则表达式思维导图,不再难懂

01 一张思维导图 ? 02 导图内容解析 工具 RegexBuddy 语法结构 字符 [ab5@] 匹配"a"或"b"或"5"或"@" [^abc] 匹配a、...

35011
来自专栏Deep learning进阶路

C++随记(六)---函数处理数组的一些问题

C++随机(六)---函数处理数组的一些问题 本篇讨论数组做函数形参的情况。 通常,我们按照以往设置形参的习惯,可能会对数组形参做如下的书写: int exa...

1710

扫码关注云+社区