【Python】函数和模块的使用
1.引入函数
有如下函数,问有多少组正整数解。
相当于把8个苹果分给4个人,每人至少一个,问有多少种分法。
进一步等价于在分隔8个苹果的7个空隙之间插入3三个隔板将苹果分成四组有多少种方案,也就是从7个空隙中选出3个放入隔板,。
排列组合对应公式为
m = int(input('m = ')) n = int(input('n = ')) fm = 1 for num in range(1, m + 1): #m的阶乘 fm *= num fn = 1 for num in range(1, n + 1): #n的阶乘 fn *= num fm_n = 1 for num in range(1, m - n + 1): #m-n的阶乘 fm_n *= num print(fm // fn // fm_n)
2.定义函数
上面的代码中做了3次求阶乘,只有参数不一样,代码重复,那么我们可以把计算阶乘的功能封装到函数中,再调用来计算阶乘。
def定义函数,括号为传递给函数的参数,return返回值。
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))
3.函数的参数
python中函数的参数可以有默认值,也支持使用可变参数,因此python并不需要像其他语言一样支持函数的重载。
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 print(add()) print(add(1)) print(add(1,2)) print(add(1,2,3)) print(add(1,3,5,7,9))
4.用模块管理函数
如果在同一个.py文件中定义了两个同名函数,由于python没有函数重载的概念,那么后面的定义会覆盖之前的定义。
def foo(): print('hello,world') def foo(): print('goodbye,world') foo() #goodbye,world
python中每个文件就代表了一个模块(module),不同的模块中可以有同名的函数,通过import关键字导入指定的模块来区分foo函数
module1.py
def foo(): print('hello,world')
module2.py
def foo(): print('goodbye,world')
test.py
from module1 import foo foo() #hello,world! from module2 import foo foo() #goodbye,world!
也可以给模块起别名来区分
test.py
import module1 as m1 import module2 as m2 m1.foo() m2.foo()
但如果写成了这样,则会调用模块2的方法,因为后导入的覆盖了之前导入的foo。
from module1 import foo from module2 import foo foo() #goodbye,world!
导入模块import module3
时不希望执行其中的代码那么可以用if判断模块名,__name__
表示模块名。
if __name__ =='__main__': print('当前正在执行')
练习:【python】求最大公约数、最小公倍数、回文数、素数
5.变量的作用域
def foo(): b = 'hello' def bar(): c = True print(a) print(b) print(c) bar() if __name__ == '__main__': a = 100 foo()
打印结果
python中在函数内部还可以定义函数,变量a为全局变量,变量b作用域范围为foo()函数,可在bar()函数中访问,变量c作用域范围为bar()函数。
以下代码中,想要通过函数修改全局变量a的值,无法修改,foo()函数中重新定义了一个局部变量a
def foo(): a = 200 print(a) if __name__ == '__main__': a = 100 foo() print(a) # 100
在变量前加上global就可以了,指定该变量来自全局变量。nonlocal关键字表示变量来自嵌套作用域。
def foo(): global a = 200 print(a)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南