python从零学习【三】语言基础 函数和模块

1.函数

函数的作用就是避免重复,python使用def来定义函数

def fac(num):
    """求阶乘"""
    result = 1
    for n in range(1, num + 1):
        result *= n
    return result


m = int(input('m = '))
n = int(input('n = '))
# 当需要计算阶乘的时候不用再写循环求阶乘而是直接调用已经定义好的函数
print(fac(m) // fac(n) // fac(m - n))


函数的参数可以有默认值。函数使用中如果不传这个参数,则使用默认值

from random import randint


def roll_dice(n=2):
    """摇色子"""
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def add(a=0, b=0, c=0):
    """三个数相加"""
    return a + b + c


# 如果没有指定参数那么使用默认值摇两颗色子
print(roll_dice())
# 摇三颗色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))


参数前面加 *,表示参数是可变的

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))


2.模块

在python中没有函数重载的概念,所以如果多人合作开发使用了相同的函数名,则会被后面的覆盖。在python中,一个文件就代表了一个模块。

# module1.py
def foo():
    print('hello, world!')


# module2.py
def foo():
    print('goodbye, world!')
    
    
# 使用这种方法 
from module1 import foo
# 输出hello, world!
foo()

from module2 import foo
# 输出goodbye, world!
foo()

# 或者这种
import module1 as m1
import module2 as m2

m1.foo()
m2.foo()


# 覆盖的情况
from module1 import foo
from module2 import foo

# 输出goodbye, world!
foo()


如果导入的模块除了函数之外还有可执行代码,那么在导入时就会执行,为了避免此情况,在模块中加入判断

# module3.py
def foo():
    pass


def bar():
    pass


# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ == '__main__':
    print('call foo()')
    foo()
    print('call bar()')
    bar()
    
    
在进行 import module3 的时候,因为模块的名字是module3不是 __main__ 而不会执行


3.变量作用域

在函数中声明的变量都是局部变量,只能在函数中使用,如果想让变成成为全局变量,用global关键字声明。尽量不要用global!!!

def foo():
    global a
    a = 200
    print(a)  # 200


if __name__ == '__main__':
    a = 100
    foo()
    print(a)  # 200


打赏

看恩吧
网站不承担任何有关评论的责任
  • 最新评论
  • 总共条评论
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦