python的函数

所谓的“一等对象”:

--在运行时创建

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

--能作为参数传给函数

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

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

def test(n):

"""

这是一个测试函数

"""

    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类的实例而已。

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():

"""

测试函数

"""

    def __init__(self, items):
        self._items = list(items)
        random.shuffle(self._items)
    def pick(self):
        return self._items.pop()
    def __call__(self):
        return '2'
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

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

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

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__的默认方法可以看到,在参数后面写上:号

def test(a:str, b:'2' = '1'):
    print('a:',a)
    print('b:',b)
test.__annotations__
Out[30]: {'a': str, 'b': '2'}

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2017-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

typeof关键字的作用

一、typeof详解: 前言:     typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。(其实这和C++的auto关键字和可以...

34250
来自专栏林冠宏的技术文章

C/C++ char a[ ] 和 char *a 的差别,改变 char *a爆内存错误的原因

对于一些需要传入参数为 char * temp 指针类的函数; 我们定义一个 char a[10] 或char *a 传进去都是可以的。 但是, 如果该函数是会...

192100
来自专栏xingoo, 一个梦想做发明家的程序员

虚函数

虚函数 代码如下定义: // test1107.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <i...

22850
来自专栏计算机视觉

Python 函数使用记录,join函数和os.path.join用法

1.join()函数 语法:‘sep’.join(seq) 参数说明: sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典等 上面的语法即:...

464120
来自专栏十月梦想

函数的return(返回值)

return之后,函数就停止,return之后的语句将不执行,但是php也不会报错。

12030
来自专栏Golang语言社区

golang的{}初始化

之前说到Golang中某些类型可以赋值nil, 某些类型不能赋值nil. 不能赋值nil都是initialized value不为nil的类型, 例如: boo...

36990
来自专栏王磊的博客

javascript中Array的操作

concat(组合数组) join(数组转字符串) pop(删除最后一个元素) shift(删除第一个元素) push(在数组尾部添加新元素) unshift(...

28480
来自专栏技术小站

找第一个只出现一次的字符

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

47310
来自专栏happyJared

Python中的is和==以及字符串驻留机制

  先了解下官方文档中关于 is 和 == 的概念。is 表示的是对象标示符(object identity),而 == 表示的是相等(equality);is...

11510
来自专栏mathor

枚举+优化(7)——前缀和1

17670

扫码关注云+社区

领取腾讯云代金券