Python函及模块的使用
目录
- 1、函数的作用
- 2、定义函数
- 3、函数的参数
- 3.1 参数的默认值
- 3.2 可变参数
- 4、用模块管理函数
- 4.1 示例代码module.py
- 5、变量的作用域
1、函数的作用
编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种! ”。
可以将重复的功能封装到一个称之为“函数”的功能模块中,用来实现单一,或相关联功能的代码段。
2、定义函数 定义函数的规则如下所示:
- 函数代码块以
def
关键词开头,后接函数名和圆括号 () 。 - 函数名命名规则跟变量的命名规则是一致
return
关键字用于退出函数,选择性地向调用方返回一个表达式。
def 函数名(参数列表):函数体return语句
# 定义一个函数 往里面穿两个参数def sum(arg1, arg2):# 返回2个参数的和."total = arg1 + arg2return total# 调用sum函数sumNum = sum(10, 20)print(sumNum) // 30
3、函数的参数 除了定义函数和调用函数等基本操作之外,在函数中还可以使用参数。函数的参数简单的来说就是可以函数的函数体中使用的变量。与变量不同的是,这样的变量的是在函数体之前传递进去的。
3.1 参数的默认值
调用函数时,如果没有传递参数,则会使用默认参数。
def printInfo(name, age=12):"打印任何传入的字符串"print("名字: ", name)print("年龄: ", age)return# 调用a函数printInfo(age=10, name="小红")print("------------------------")printInfo(name="小明")
3.2 可变参数
所谓可变参数指的是在调用函数时,可以向函数传入0个或任意多个参数。
# 用星号表达式来表示stamp可以接收0个或任意多个参数def printInfo(*stamp):# 可变参数可以放在for循环中取出每个参数的值for i in stamp:print(i)returnprintInfo("一碗周")printInfo(1, 2, 3, 4, 5, 6, 7)printInfo("hello", "hi")
4、用模块管理函数 在同一个
.py
文件中如果有两个函数名是重名的,由于Python
没有函数重载的概念,那么后面的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。这个时候模块的作用就体现出来了。Python
中的每个文件就代表了一个模块(module
),在不同的模块中可以有同名的函数,在使用某个函数的时候可以通过import
关键字引入指定的模块就可以区分每个函数了。例:定义两个模块,分别为
module1
和module2
,然后测试引入流程【Python函及模块的使用】module1
def printinfo():print("这是第一个模块的printinfo函数")
module2
def printinfo():print("这是第二个模块的printinfo函数")
使用import关键字直接引入:
import module1import module2# 通过模块名加.函数名的方式引入module1.printinfo()module2.printinfo()
使用import...as关键字重命名引入:
import module1 as m1import module2 as m2# 可以通过重命名后的名字加.函数名的方式引入m1.printinfo()m2.printinfo()
使用from...import...as关键字重命名引入某个函数:
from module1 import printinfo as p1from module2 import printinfo as p2# 可以通过重命名后的名字加.函数名的方式引入p1()p2()
- 值得注意的是:这里如果不使用as进行重命名的话,因为有两个
printinfo
就会导致错误,所以需要为其重命名
__name__ == '__main__'
的用法__name__
是Python
中一个隐含的变量它代表了模块的名字,如果直接打印__name__,
则出现__main__。
4.1 示例代码module.py
def printinfo():print("这是函数内的内容")print(__name__)print("这是模块函数外的内容")
输出结果:
# __main__# 这是模块函数外的内容
如果将
module.py
作为模块引入则打印的结果为模块的名称(不带路径、扩展名)示例代码
import module
输出结果:
module此时输出的结果就不一样了,简单来说:在
这是模块函数外的内容
module.py
自己眼中name
就是main
,然而在别的文件眼中name
就是module
。把
module.py
改造一下def printinfo():print("这是函数内的内容")printinfo()if __name__=="__main__":print(__name__)print("这是模块函数外的内容")
输出结果:
这是函数内的内容当其他文件引入时
__main__
这是模块函数外的内容
import module输出结果:
这是函数内的内容
因为其他文件引入时不会执行模块中if条件成立时的代码 因为模块的名字是module而不是__main__
__name__ == '__main__'
在实际场景中非常有用,一般在写模块的过程中肯定要进行测试,在导入的时候肯定不能将测试结果也打印出来,如果删除了,想要改进模块的时候又要重新写一遍,这个时候__name__ == '__main__'
就派上了用场5、变量的作用域 请看如下代码:
def test():b = "这是函数的变量"def test_nested():c = "这是嵌套的函数变量"print(a)print(b)print(c)test_nested()if __name__ == "__main__":a = "这是全局作用域"test()
根据这段代码,来理解变量的作用域
此时在函数
test_nested
体内调用a,b,c三个函数都不会报出任何错误,如果在函数体外调用b变量就会报出
print(b)NameError: name 'b' is not defined
变量b未定义的错误,因为b属于局部变量,属于局部作用域,在函数体外是访问不到的
如果在
test
函数体内调用c则会报出print(c)NameError: name 'c' is not defined
变量c未定义的错误,因为c是在
test_nested
函数体内,对于test
函数来说属于局部作用域,但是对于test
函数内部的test_nested
函数来说,变量b属于嵌套作用域,在test_nested
函数中我们是可以访问到它的。如果通过
global
来将b提升为全局变量,则在函数体外调用b变量就会正常打印nonlocal
关键字只能作用于局部变量,且始终找离当前最近的上层局部作用域中的变量def outer():aa = 111def inner():nonlocal aaaa = 222print(aa)inner()print(aa)outer()
如果没有这个
nonlocal
关键字则函数体inner
打印222
,函数体outer打印111
,加上之后则直接打印两个222Python
查找一个变量时会按照“局部作用域”-->“嵌套作用域”-->“全局作用域”-->“内置作用域”的顺序进行搜索,所谓的“内置作用域”就是Python内置的那些标识符,之前用过的input
、print
、int
等都属于内置作用域。到此这篇关于Python函及模块的使用的文章就介绍到这了,更多相关Python函及模块使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- JS中的各种宽高度定义及其应用
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- python自定义封装带颜色的logging模块
- C语言中的时间函数clock()和time()你都了解吗