zoukankan      html  css  js  c++  java
  • Python3 From Zero——{最初的意识:007~函数}

    一、编写可接受任意数量参数的函数:*、**

    >>> def test(x, *args, y, **kwargs):
    ...  pass
    ... 
    >>> test(1, 2, 3, 4 ,5 ,5, y=9, aa=99, bb=88,cc=900)
    >>> test(1, 2, 3, 4 ,5 ,5, 9, aa=99, bb=88,cc=900)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: test() missing 1 required keyword-only argument: 'y'

    #以*打头的参数只能作为最后一个位置参数出现,以**打头的参数只能作为最后一个参数出现;*args之后仍然可以有其它的参数出现,但只能是关键字参数(keyword_only)

    二、编写只接受关键字参数的函数

    >>> def test(*, x, y):
    ...  pass
    ... 
    >>> test(8, 9)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: test() takes 0 positional arguments but 2 were given
    >>> test(x=9, y=8)

    #星号*之后的参数都是keyword_only参数

    三、函数注解

    >>> def add(x:int ,y:int) ->int:
    ...  return x + y
    ... 
    add.__annotations__
    {'x': <class 'int'>, 'return': <class 'int'>, 'y': <class 'int'>}

    #函数注解只会保存在函数的__annotations__属性中;因为Python中没有类型声明,函数注解可以用于提示

    四、从函数中返回多个值:各返回值之间以逗号“,”分隔,本质上是返回一个tuple,可通过tuple解包实现返回多个值的目的

    >>> def myfun():
    ...  return 1, 2, 3
    ... 
    >>> x, y, z = myfun()
    >>> x
    1
    >>> y
    2
    >>> z
    3
    >>> a = myfun()
    >>> a
    (1, 2, 3)

    五、定义带有默认参数的函数

      默认参数只会在函数定义时被绑定一次

    >>> x = 44
    >>> def sample(a=x):
    ...  print(a)
    ... 
    >>> sample()
    44
    >>> x = 88
    >>> sample()
    44

      默认参数的默认值通常应该是不可变对象;若设置可变对象,应参照如下方式:

    >>> def test(a, b=None):
    ...  if b is None:
    ...   b = []
    ...  pass
    ... 

    六、嵌套函数

    >>> def xxx(m):
    ...  def yyy(n):
    ...   return m + n
    ...  return yyy
    ... 
    >>> xxx(20)    #可对比嵌套列表的逻辑进行理解
    <function xxx.<locals>.yyy at 0x7f68c3aef0d0>
    >>> xxx(20)(20)   #给内嵌的函数参数赋值
    40
    >>> def test(m):
    ...  return lambda n: m + n    #实现原理上,lambda可以理解为嵌套函数
    ... 
    >>> test(20)(20)
    40

    七、让带有N个参数的可调用对象以较少的参数形式调用

      即:给一部分参数预先斌予固定值,相当于转化成一个带有默认值的函数

    >>> def sum(a, b, c, d):
    ...  return a + b + c + d
    ... 
    >>> sum(1, 2, 3, 4)
    10
    >>> import functools
    >>> test_0 = functools.partial(sum, b=2, c=3, d=4)
    >>> test_0(1)
    10
    >>> test_0(100)
    109

      也可使用lambda函数实现

    >>> test_1 = lambda a, b=2, c=3, d=4: sum(a, b, c, d)
    >>> test_1(1)
    10
    >>> test_1(100)
    109
  • 相关阅读:
    Github Https方式push错误”Empty reply from server”
    github克隆项目中的子模块submodule时遇到的问题
    安卓SDK Manager自动管理各种包
    学会爱上iOS自动布局(Auto Layout)
    WWDC2014之iOS使用动态库
    WWDC2014之App Extensions学习笔记
    Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
    C++类型处理:typedef decltype
    C++引用和指针
    OpenGL入门1.1:窗口
  • 原文地址:https://www.cnblogs.com/hadex/p/5767176.html
Copyright © 2011-2022 走看看