zoukankan      html  css  js  c++  java
  • Python3入门(四)——Python函数

    一、概述

      python和其他高级语言一样,支持函数

      注意和scala不一样,结果必须使用return,否则默认return None!这和scala最后一个值作为返回是不一样的!

    二、函数调用

      和其他语言一样,写出函数名,传入合适的参数即可,例如调用内置函数abs:

    >>> abs(-1)
    1

      函数支持别名:

    >>> a = abs # 变量a指向abs函数
    >>> a(-1) # 所以也可以通过a调用abs函数
    1

      如果传入了错误的参数,Python会报TypeError错误

      数据类型在Python中的转换可以通过相关的函数:

    >>> int('1')
    1
    >>> str(1)
    '1'

    三、函数定义

      定义也是使用和scala一致的def关键字:

    def fun1(x):
        if x > 0:
            print('正数')
            return x
        else:
            print('负数')
            return -x

      如果什么都不做,那就用pass(如果返回空,使用return None

    def nop():
        pass

      由python这个函数定义也能知道,Python只能给我们做参数个数的检查,参数类型无法检查。要检查参数,只能通过手动编码使用instance实现:

    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type')
        if x >= 0:
            return x
        else:
            return -x

      并且,在Python这类有tuple的语言中,是可以返回多个值的!

    def fun1(x,y):
        if x > 0:
            return x,y
        else:
            return x,y
    a,b = fun1(1,2)

      当然,内在的是返回了一个tuple,只是返回值可以省略这个()来显示表明这是一个tuple

      默认参数:
        定义带有默认参数的函数时,注意默认参数必须放在后面且必须是不可变对象

    def fun1(x,y=1):
        if x > 0:
            return x+y
        else:
            return x-y

      可变参数

        在参数前面加一个星号*即可,内部使用的是一个tuple包装的

    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum

        如果要使用list或者tuple作为可变参数,类似calc(list[0],list[1]),可以使用*进行参数转换:

    calc(*list)

      关键字参数

        在参数前面加两个星号**即可,内部会把这个关键字参数转换为dict(也就是map)

    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

      //内部接收的dict是外部的副本,不会对传入的作改变

      命名关键字参数(Python3独有)

        在参数中使用*作为一个分隔符即可,这样可以对传入的关键字参数作命名检查,只能传入指定名字的关键字参数

    def person(name, age, *, city, job):
        print(name, age, city, job)

      这样,就可以对入参作命名检查了,只能传入city=xx,job=xx:

     person('Jack', 24, city='Beijing', job='Engineer')

      多种参数组合时,顺序必须严格控制:
        必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    四、递归函数

      和其他语言的递归函数是类似的:

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)

     

  • 相关阅读:
    Atitit RSA非对称加密原理与解决方案
    Atitit RSA非对称加密原理与解决方案
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    Mac设置su root密码
    Window系统命令行调用控制面板程序
    Ubuntu 安装最新版nodejs
    python中time.strftime不支持中文,报错UnicodeEncodeError: 'locale' codec can't encode character 'u5e74' in position 2: encoding error
    字节跳动——IT技术工程师面试题
    HTTP状态码
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8916047.html
Copyright © 2011-2022 走看看