python学习过程中重要的知识点函数。
1. 函数的定义:
使用关键字***def***
def sayhello():
print "hello word"
以上函数功能只是做了简单的屏幕输出
2.函数调用
函数定义完之后,需要显示调用才能执行函数体里的代码
sayhello()
在显示的调用了sayhello()函数的时候,在屏幕上就直接打印出了”hello world” 字符串。
3.带有参数的函数
以上只是定义的函数只是最简单的函数定义和调用,我们也可以在函数定义的时候,设置函数的参数,此时的参数称为 形参
def sayhello(name):
print "hello word "+name
‘+’ 号用于字符串的链接,传入的参数只能是字符串,反之会报错
4.带有返回值的函数
有时候函数处理完一系列逻辑之后,要给调用者返回处理结果,默认返回None
def getsum(x,y):
return x+y
函数定义两个参数,并计算两个数的值,并返回给调用者。
以上是函数的简单定义,调用,带有参数的函数定义,函数的返回值,接下来说下函数调用过程中的需要主要的问题
5.冗余参数处理
现在我们重新定义一个带有一个参数的函数
def printinfo(name):
print name
定义之后,我们调用函数,正常普通的调用。
printinfo("tom")
屏幕输出为:tom,但是我这里调用函数的时候,传的是一个值,但是我要传多个值呢或者我要是不传值呢?
首先我们来看下我不传值会有什么问题
printinfo()
程序报错
Traceback (most recent call last):
File "/Users/zhangyibo/PycharmProjects/demo/demo/demo2.py", line 86, in <module>
printinfo()
TypeError: printinfo() takes exactly 1 argument (0 given)
根据错误信息可以看出是一个类型错误,说这函数需要传递一个参数,但是实际没有传递参数。这个时候怎么办呢?那我就是不想传递参数,我还想执行函数呢?有没有办法?这个必须是有滴,不过我们需要重新定义此函数如下:
def printinfo(name="tom"):
print name
就是这个函数升级函数,就是在参数的后面加了个默认值,就可以解决了。
可是如果我们要是传递多个参数呢?
printinfo("tom","lucy")
没错又报错了,赶紧看下错误吧
printinfo("tom","lucy")
TypeError: printinfo() takes at most 1 argument (2 given)
没错说传递了多余的参数。那这又怎么办呢,放心还又解决方案重新定义函数:
def printinfo(name="tom",*args):
print name
print args
重新调用,发现不报错了,那*args是什么呢?其实就是告诉程序可以接受多个参数,并把多余的参数以元祖的方式存储起来。
printinfo("tom","lucy","kitty")
现在传递三个参数也没问题了哈哈。
好像函数也就这么多东西,基本简单的函数使用也就这些,但是我们来研究下函数的更高级的特性
首先我们来定义一个两个参数的函数
def getinfo(name,age):
print "name:",name,"age:",age
定义了一个普通的函数,我们正常调用的时候就是传递两个参数的值进去就ok但是现在我又个列表
lists=["tom",13]
我这个列表里边也有两个字段,我现在能getinfo(lists)
这样的方式调用吗?如果你看了上边的内容就非常肯定的说不能,会有TypeError的,没错,那怎么才能我以lists为参数传递进去不报错呢,这里我们没必要修改函数,只需要修改函数掉调用方式就行
getinfo(*lists)
ok完美解决了,*号就是告诉函数我是个列表
那现在我们有个字典形式的数据dic={"name":"tom","age":19}
我们单独把字典传进入如何如何呢getinfo(dic)
没错它又报错了,这个怎么办一个是告诉函数我穿进去的是一个列表,那字典怎么表示呢,getinfo(**dic)
没错就是*去表示接受的是一个字典。
是不是很神奇呢,但是我又有一个奇怪的想法,我定义一个如下的函数:
def saycat(name):
print name
函数是正经函数,但是调用正经不正经我就不知道了哈哈
我们可以这样调用
- saycat(“tom”)
- saycat(“tom”,1)
- saycat(“tom”,age=1)
1正常,但是2和3呢是什么鬼,肯定报错把,你猜的没错,这可怎么办呢,函数定义规定传入一个参数,我们这里传入的是多个参数,而且参数类型还不一样,那么我们根据多余的参数,去修改完善你的函数的健壮性把。
def saycat(name,*aggs,**kwargs):
print name
print aggs
print kwargs
以上是简单的函数冗余参数的处理方案,以上内容就是所有简单函数定义,调用,和调用过程中参数冗余问题的解决,虽然简单,但是好记性不如烂笔头,以此笔记作为参考。如有不当多多包含