Python学习笔记之函数

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

函数是正经函数,但是调用正经不正经我就不知道了哈哈

我们可以这样调用

  1. saycat(“tom”)
  2. saycat(“tom”,1)
  3. saycat(“tom”,age=1)
    1正常,但是2和3呢是什么鬼,肯定报错把,你猜的没错,这可怎么办呢,函数定义规定传入一个参数,我们这里传入的是多个参数,而且参数类型还不一样,那么我们根据多余的参数,去修改完善你的函数的健壮性把。
def saycat(name,*aggs,**kwargs):
    print name
    print  aggs 
    print kwargs

以上是简单的函数冗余参数的处理方案,以上内容就是所有简单函数定义,调用,和调用过程中参数冗余问题的解决,虽然简单,但是好记性不如烂笔头,以此笔记作为参考。如有不当多多包含

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值