前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python的函数

python的函数

作者头像
哒呵呵
发布2018-08-06 15:15:24
3410
发布2018-08-06 15:15:24
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

所谓的“一等对象”:

--在运行时创建

--能赋值给变量或数据结构中的对象

--能作为参数传给函数

--能作为函数的返回结果

函数也是对象,这句话的意义在于

def test(n):

"""

这是一个测试函数

"""

代码语言:javascript
复制
    if n == 1:
        return 1
    return n * test(n-1)
test(2)
Out[4]: 2
test.__doc__
Out[5]: '\n    这是一个测试函数\n    '
type(test)
Out[6]: function
dir(test)
Out[7]: 
['__annotations__',
 '__call__',
 '__class__',

...

'__str__',

'__subclasshook__']

一个函数自带了__doc__属性,在看看dir。

type(test)可知这只是function类的实例而已。

代码语言:javascript
复制
a = test
a(2)
Out[9]: 2
a(test(2))
Out[10]: 2

这里体现了函数既可以作为参数,也可以作为函数的返回结果。

高阶函数

也就是map,filter,reduce,all,any,sum之类的

在python里的lambda表达式只能使用纯表达式,除非像pyspark那样重载了。

可调用对象:也就是调用运算符()

用户定义的函数,内置函数,内置方法,方法,类,类的实例,生成器函数(即yield)

用户定义的可调用类型

import random

class Test():

"""

测试函数

"""

代码语言:javascript
复制
    def __init__(self, items):
        self._items = list(items)
        random.shuffle(self._items)
    def pick(self):
        return self._items.pop()
    def __call__(self):
        return '2'
代码语言:javascript
复制
a = Test(range(3))
a()
Out[18]: '2'
a.pick
Out[19]: <bound method Test.pick of <__main__.Test object at 0x00000124D5D96240>>
a.pick()
Out[20]: 2

这个意味着这个类也像函数一样可以调用了,在调用的时候可以缓冲一些大量计算的结果

然后我们来看看参数和关键字参数

代码语言:javascript
复制
def test(a, b = '1', *c, **d):
    print('a:',a)
    print('b:',b)
    print('c:',c)
    print('d:',d)
test(1,2, 34,4,3,c= 2,d =4)
a: 1
b: 2
c: (34, 4, 3)
d: {'c': 2, 'd': 4}

函数注解:

__annotations__的默认方法可以看到,在参数后面写上:号

代码语言:javascript
复制
def test(a:str, b:'2' = '1'):
    print('a:',a)
    print('b:',b)
test.__annotations__
Out[30]: {'a': str, 'b': '2'}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档