【Python】函数和模块化管理

一、函数定义

        Python 函数与其它语言的函数一样,支持默认参数,但是有一个最大不同的地方就是不支持重载,因为 Python 是动态类型的语言,函数参数类型要在运行是才会被确定,在运行之前不会像C/C++ 一样被定义。

        在 Python 中,函数名是唯一的,即使有不同的参数类型或者参数个数,也不能定义同名的函数。当定义同名函数时,后面定义的函数会覆盖前面的定义,导致建议:函数无法被重载。

def foo():
    print('hello, world!')


def foo():
    print('goodbye, world!')


# 下面的代码会输出什么呢?
foo()
# 在参数名前面的*表示args是一个可变参数
def add(*args):
    total = 0
    for val in args:
        total += val
    return total


# 在调用add函数时可以传入0个或多个参数
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))

二、使用模块管理函数

        由于在同一个 .py 文件中定义相同的函数时,后面定义的函数会对前面定义的函数进行覆盖,那么如果在同一个项目中要定义几个同名的函数应该如何实现呢?

        我们只需要在不同的模块中定义函数后使用 import 关键字导入相应的函数模块即可。对于如何实现,看相面的例子就懂了。

module1.py

def foo():
    print('hello, world!')

module2.py

def foo():
    print('goodbye, world!')

test.py

from module1 import foo

# 输出hello, world!
foo()

from module2 import foo

# 输出goodbye, world!
foo()

        如果要区分使用那个 foo() 函数,可以按如下方式实现:

test.py

import module1 as m1
import module2 as m2

m1.foo()
m2.foo()

但是,如果写成以下的样子,那么程序调用的是最后导入的那个 foo() ,因为导入的foo() 会对前面导入的进行覆盖。

test.py

from module1 import foo
from module2 import foo

# 输出goodbye, world!
foo()

        另外,需要特别说明的是,如果我们导入的模块除了定义函数之外还有可执行的程序那么Python 解释器就会执行这些程序,但是我们并不希望执行这些程序,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是  _main_。

module3.py

def foo():
    pass


def bar():
    pass


# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ == '__main__':
    print('call foo()')
    foo()
    print('call bar()')
    bar()

test.py

import module3

# 导入module3时 不会执行模块中if条件成立时的代码 因为模块的名字是module3而不是__main__

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值