• 技术文章 >后端开发 >Python教程

    Python中的自定义函数学习笔记

    2016-06-06 11:33:02原创966
    定义一个什么都不做的函数

    代码如下:


    >>> def a():
    ... pass
    ...

    >>> def printHello():
    ... print("hello")
    ...
    >>> printHello()
    hello
    >>> callable(printHello)
    True


    顾名思义,callable函数用于判断函数是否可以调用;

    有书上说,callable在Python3.0中已经不再使用,而使用hasattr(func, '__call__')代替;

    代码如下:


    >>> hasattr(printHello, '__call__')
    True

    >>> printHello.__doc__
    >>> def printHello():
    ... 'just print hello'
    ... print('hello')
    ...
    >>> printHello.__doc__
    'just print hello'


    每个函数都有一个__doc__属性,双下划线表示它是个特殊属性;

    内建的help函数非常有用,可以提供有关方法/函数的帮助信息;

    代码如下:


    >>> help(printHello)

    函数的注释信息包含其中;

    虽然printHello函数没有使用return,可以用一个变量接收返回值:

    代码如下:


    >>> result = printHello()
    hello
    >>> result
    >>> print(result)
    None


    None是Python的内建值,类似Javascript的undefined么?

    定义一个可以接收参数的printStr,用以打印字符串

    代码如下:


    >>> def printStr(str):
    ... print(str)


    >>> printStr("hello")
    hello


    像C++一样,Python支持默认参数

    代码如下:


    >>> def printStr(str="nothing"):
    ... print(str)
    ..

    >>> printStr()
    nothing


    再来看看传参方式

    代码如下:


    >>> a = [1,2]
    >>> def try_change_list(a):
    ... a[:] = [1,1,1]
    ...
    >>> try_change_list(a)
    >>> a
    [1, 1, 1]


    Python的传参可以理解为按值传递(同java,Javascript)?

    BTW:如果不想让try_change_list改变原来的对象,可以传入a[:]

    代码如下:


    >>> a = [1,2]
    >>> try_change_list(a[:])
    >>> a
    [1, 2]


    当然,这里做的是浅拷贝,可以使用copy模块的deepcopy来进行深拷贝;

    除了支持参数默认值,还支持命名传参:

    代码如下:


    >>> def sum(a=0, b=0):
    ... return a + b;
    ...
    >>> sum(2,2)
    4
    >>> sum(b = 3, a = 4)
    7


    这种特性在参数较多时比较好用;

    来看一下,Python对可变参数列表的支持:

    代码如下:


    >>> def sum(*args):
    ... s = 0;
    ... for i in args:
    ... s += i;
    ... return s
    ...
    >>> sum(1,2,3,4)
    10


    这是一个简单的求和例子,不同于C/C++的静态类型,Python并不会限制传入sum函数的参数的类型:

    代码如下:


    >>> def printArs(*args):
    ... for a in args:
    ... print(a)
    ...
    >>> printArs(2, 3, [2,2], (2,), 'df')
    2
    3
    [2, 2]
    (2,)
    df
    >>> printArs(*(2, 3, [2,2], (2,), 'df'))
    2
    3
    [2, 2]
    (2,)
    df
    >>> printArs(*[2, 3, [2,2], (2,), 'df'])
    2
    3
    [2, 2]
    (2,)
    df


    这里的args对应于Javascript的arguments;

    除了使用使用元组(tuple)接收可变参数,还可以使用dictionary接收命名参数:

    代码如下:


    >>> def printArs(**args):
    ... for k in args:
    ... print(repr(k) + " = " + repr(args[k]))
    ...
    >>>
    >>> printArs(name='wyj', age=24)
    'name' = 'wyj'
    'age' = 24
    >>> printArs(**{'name':'wyj', 'age':24})
    'name' = 'wyj'
    'age' = 24


    当然,更复杂地,可以混合使用*arg, **arg, 默认值特性:
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Python 自定义函数
    上一篇:python字符串连接的N种方式总结 下一篇:Python中捕捉详细异常信息的代码示例
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• Python接口自动化测试必备基础之http协议详解• Python 3.11中的最佳新功能和功能修复• 实例详解Python面向对象的四大特征• Python数据分析之concat与merge函数(实例详解)• 一起聊聊Python的编码样式
    1/1

    PHP中文网