【python学习笔记】python函数定义和传参方法说明

本文详细介绍了Python中函数的定义方式,包括函数定义、默认参数值、可变参数、关键字参数和命名关键字参数的高级用法。强调了默认参数必须指向不变对象,以及参数组合的规则。同时,通过示例展示了如何使用这些特性来灵活调用函数。
摘要由CSDN通过智能技术生成

一、函数定义方式

函数定义用关键字def,其参数传递不用设置类型,也不用定义返回,然后在函数名称后加上:号,这点和java很不一样,相对来说更加简单了;另外包含关系上用四个空格来标识,而非java的;号;
如下为一个范例,定义了一个函数用来生成任意上界的菲波那契数列:

# -*- coding: UTF-8 -*-
def fib(n):
    a,b = 0,1
    while a<n:
        print a,
        a,b = b, a+b

if __name__ == '__main__':
    a = fib(2000)

结果:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

二、高级用法

除了最简单的传参方法后还有特别的传参方法,有三种可用方式,下面一一做说明;
大体来说,参数传递分为必选参数和可选参数(注意必选参数必须在前面),可选参数在调用函数的时候可传可不传,这点比java要好用(用java得多写好几个函数);

1、默认参数值

默认参数值即在函数定义的时候为一个或者多个参数定义一个默认值,如果调用参数的时候不传入该参数则自动使用默认参数值,下面是一个范例:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
    while True:
        ok = raw_input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True
        if ok in ('n', 'no', 'nop', 'nope'):
            return False
        retries = retries - 1
        if retries < 0:
            raise IOError('refusenik user')
        print complaint

在这个例子中参数retriescomplaint这两个参数即为可选参数,其=号后边的即为默认参数值;
那么调用的时候我们就可以这样:

  • 只传入默认参数prompt
ask_ok('Do you really want to quit?')
  • 给出一个可选的参数:
ask_ok('OK to overwrite the file?', 2)
  • 或者给出所有的参数:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

注意:这里注意参数顺序不要错误,另外默认参数值只会被赋值一次,但也有例外情况,譬如默认值是个列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的参数:

>>> def f(a,L=[0]):
	    L.append(a)
	    return L

>>> print f(1)
[0, 1]
>>> print f(2)
[0, 1, 2]
>>> print f(3)
[0, 1, 2, 3]

为什么会这样呢,解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
定义默认参数要牢记一点:默认参数必须指向不变对象!

可以像如下这样修改就不会有这个问题了:

>>> def ff(a, L=None):
	    if L is None:
		    L=[]
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值