调用Python函数时如何使用自定义my_math模块内预设的变量值
问题原因
你收到报错是因为模块my_math里定义的base、height属于模块级命名空间的变量,你在Python交互解释器的当前全局命名空间里没有定义这两个变量,直接写base、height解释器找不到对应的取值。
解决方法
你可以根据使用场景选择下面任意一种方案:
- 方案1:调用时明确指定变量所属的模块命名空间
直接在变量前加上模块名前缀即可,交互环境执行代码如下:>>> my_math.triangle(my_math.base, my_math.height) 6.0 - 方案2:导入模块时同步导入需要的变量
导入时把模块内的变量也引入当前全局命名空间,后续就可以直接调用:>>> from my_math import triangle, base, height >>> triangle(base, height) 6.0 - 方案3:给函数参数设置默认值,无参数调用时自动使用模块内的默认值
修改my_math.py里的函数定义,将模块变量设置为参数默认值:
后续直接无参调用即可自动使用模块内的默认值,也支持自定义传参覆盖默认值:# my_math.py base = 3 height = 4 def triangle(base=base, height=height): return base*height/2>>> import my_math # 无参调用使用默认值 >>> my_math.triangle() 6.0 # 传参时使用传入的取值 >>> my_math.triangle(2,8) 8.0
注意事项
如果你放开函数内部注释的base = 3、height = 4代码,这两个变量会成为函数内部的局部变量,优先级高于你传入的参数和模块级变量,无论你传什么参数,函数都会用局部变量的取值计算结果。
内容的提问来源于stack exchange,提问作者William Zebrowski
相关产品推荐
相关产品推荐

