您的位置:首页 > 编程语言 > Python开发

python学习笔记4--函数

2017-03-19 20:16 495 查看
昨天写的笔记好像忘记保存了。今天重新简单得记录一下。

函数的定义

def functionname(argument1,argument2...):

#TODO

return argument1

例:

16行的quadratic就是在utils.py文件中预定义好的function,import之后,直接传入参数既可以使用。

import 语句:from 文件路径 import functionname1,functionname2

如果整个文件里面的function都要使用的话也可以直接用 import *

函数的参数

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

默认参数

直接上例子

def pow(x,n=2)

s = 1

while n > 0:

s *= x

n -= 1

return s

对函数进行调用时,若第二个参数不传,则默认返回传入值的平方。如pow(3) -->9。

传入第二个参数时,则获得x的n次方。例如pow(3,3) -->27

PS.有多个参数时,第一个参数不能为默认参数,因为调用时无法分辨第一个参数是否被忽略

思考如下代码

def add_end(L=[]):
L.append('END')
return L
add_end()
print(add_end())


console中打印出来的不是预想的['END'],而是['END','END']

原因:python函数在被载入时,默认参数也被开辟内存保存起来。所以如果默认参数是可变数据类型的话,其内容是可变的(不变的只是内存地址)

上述问题可以用以下代码代替即可解决问题:

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

如果定义了多个默认参数,还可以使用下面的调用方法(*1)

def add_end(a,b,L=None,c='heihei',d='oio'):
if L is None:
L = []
L.append('END')
return L
app_end(1,2,D='制定参数名调用哦')


可变参数

参数个数不定。

例:

def sample(*numbers):
s = 0
for n in numbers:
s+= n
return s
其实函数内部对参数numbers是作为一个tuple来处理的。

调用

sample(1,2,3,4,5)

tupleObj = (1,2,3,4,5)

listObj= [1,2,3,4,5]

sample(*tupleObj)

sample(*listObj)

关键字参数

与上面标红字的(*1)类似,可以传入dict类型的参数。

def kwarg(a,b,c,**kw):

for x in kw:

print(x,":",kw[x])

#调用

dictX = {"name":"天才","age":5,"height":180}

kwarg(1,2,3,**dictX)

kwarg(1,2,3,name='haha',age=78)

将输出

name:天才

age:5

height:180

name:haha

age:78

以这种形式定义的函数,传入的key并没有被限制,调用者可以传入任何key。

那么当想要对key做出限制的时候,可以使用命名关键字参数

例子参照下图

由于传入了没有被定义的nice,报错。
















                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: