实沉贫 发表于 2024-7-4 17:09:27

python教程:自定义函数

1.多态

我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型、列表、字符串等等的操作中。
在编程语言中,我们把这种行为称为多态。这也是 Python 和其他语言,比如 Java、C 等很大的一个不同点。当然,Python 这种方便的特性,在实际使用中也会带来诸多问题。因此,必要时请你在开头加上数据的类型检查。
def my_sum(a, b):
    if type(a) == type(b):
      if isinstance(a, (int, str, list)):
            return a + b
      else:
            raise Exception("input is not int/str/list")
    else:
      raise Exception("input type is not same")

print(my_sum(3, 5))
# 输出
# 8

print(my_sum(, ))
# 输出
#

print(my_sum('hello ', 'world'))
# 输出
# hello world

print(my_sum(, 'hello'))
# 输出
# input type is not same2.函数嵌套

Python 函数的另一大特性,是 Python 支持函数的嵌套。所谓的函数嵌套,就是指函数里面又有函数,比如:
def f1():
    print('hello')
    def f2():
      print('world')
    f2()
f1()

# 输出
hello
world嵌套带来的好处

[*]函数的嵌套能够保证内部函数的隐私。
内部函数只能被外部函数所调用和访问,不会暴露在全局作用域,因此,如果你的函数内部有一些隐私数据(比如数据库的用户、密码等),不想暴露在外,那你就可以使用函数的的嵌套,将其封装在内部函数中,只通过外部函数来访问。比如:
def connect_DB():
    def get_DB_configuration():
      ...
      return host, username, password
    conn = connector.connect(get_DB_configuration())
    return conn这里的函数 get_DB_configuration 是内部函数,它无法在 connect_DB() 函数以外被单独调用。也就是说,下面这样的外部直接调用是错误的:
get_DB_configuration()

# 输出
NameError: name 'get_DB_configuration' is not defined

[*]合理的使用函数嵌套,能够提高程序的运行效率。
看下面这个例子:
def factorial(input):    # validation check    if not isinstance(input, int):      raise Exception('input must be an integer.')    if input < 0:      raise Exception('input must be greater or equal to 0' )    def inner_factorial(input):      if input
页: [1]
查看完整版本: python教程:自定义函数