LZN's Blog CodePlayer

【python】学习笔记·函数篇

2016-02-06
LZN

built-in函数

int() str() float() bool()

函数名可以赋值给变量,相当于alias

自定义函数

def function(x):
    if x<10:
        print('too low')
    else:
        print('good')
        return x+1

return用于返回函数,若无操作对象,则返回None,也可以返回多个值,tuple类型,也可以给多个变量

若在当前目录test.py中定义了function()函数,可以通过模块方式引用

>>>from test import function

无语句的缩进中可以用 pass过

if x>10:

pass

参数可以给予默认值

power(x,n=2)

n在调用时若不传递,则为2;不按顺序提供可选参数时,需要在调用时提供参数名。若默认参数指向可变对象,如list,则每次调用函数,均会使得可变对象发生改变。(传址)

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

L每次默认参数均为None,这样可以避免该问题。

可变参数标识,前缀*,可传入0-任意多参数

def sum_all(*numbers):
    sum=0
    for num in numbers:
        sum=sum+num
    return sum

可以传入任意多个数字

sum_all(2,3,5,4)

若为list

l=[3,4,5,6,8]

sum_all(*l)

挂前缀传入

 

关键字参数,按字典进行组装

def test_student(name,gender,**kw)
    print('name:',name,'gender:',gender,'other:',kw)

调用时若传入其他参数

>>>test_student(‘Mike’,’Male’,city=’Beijing’)

name: Mike gender: Male other: {‘city’: ‘Beijing’}

直接传入dict则获得dict的拷贝(传值)

>>>test_student(‘Mike’,’Male’,**extra)

若通过*分隔,则定义了命名关键字参数

def test_student(name,gender,*,city)

命名关键字参数与位置参数不同,必须传入参数名

参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

复习

*arg 可变参数,接受tuple

**kw 关键字参数,接受dict

递归超过一定栈帧长度会溢出,1000的阶乘是无法计算的。


Comments

Content