Python3函数要点详解(参数、匿名函数、作用域、全局变量与局部变
文章内容主要参考了菜鸟教程 地址:https://www.runoob.com/python3/python3-function.html ? ? 你可以定义一个由自己想要功能的函数,以下是简单的规则:
可更改(mutable)与不可更改(immutable)对象1.变量的重复赋值只会记住后面赋值的内容,生成了一个新同名变量,原来的变量被删除。万物皆可为对象,因为变量仅是一个对象的引用。 而列表等可变类型变量的重复赋值就是改变了该变量的值. 2.不可变类型数字,字符串,元组作为参数传递,是值传递,不会改变本身;而可变类型列表,集合,字典作为参数传递,是引用传递,会改变本身。 ? 参数 参数有四种:必须参数、关键字参数、默认参数、不定长参数 必须参数:调用时的数量必须和声明时的一样。调用 printme() 函数,你必须传入一个参数,不然会出现语法错误。 关键字参数:允许调用时的顺序,数量必须和声明时的不一样。 默认参数:如def printinfo( name,age = 35 ): 不定长参数:加了星号?*?的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号?**?的参数会以字典的形式导入。 实例1(单个*) #!/usr/bin/python3 # 可写函数说明 def printinfo( arg1,*vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数 printinfo( 70,60,50 ) 执行结果: 输出: 70 (60,50) ? 实例2(两个*) #!/usr/bin/python3 # 可写函数说明 def printinfo( arg1,**vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数 printinfo( 70,a=60,b=50 ) 执行结果: 输出: 70 {‘a’:60,‘b‘:50} ? ? 匿名函数 python 使用 lambda 来创建匿名函数。 语法: 变量=lambda [arg1 [,arg2,.....argn]]:expression
实例 #!/usr/bin/python3 # 可写函数说明 sum = lambda arg1,arg2: arg1 + arg2 # 调用sum函数 print ("相加后的值为 : ",sum( 10,20 )) print ("相加后的值为 : ",sum( 20,20 )) 执行结果: 相加后的值为 : 30
相加后的值为 : 40
? ? 变量作用域 规则:局部作用域可以访问全局作用域,全局作用域不可以访问局部作用域。 而局部作用域想修改全局作用域时,要使用关键字global; 如果要修改嵌套作用域(enclosing 作用域,外层作用域)时,则需要 nonlocal 关键字了 Python的作用域一共有4种:
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。 g_count = 0 # 全局作用域 def outer(): o_count = 1 # 闭包函数外的函数中 def inner(): i_count = 2 # 局部作用域 内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量: >>> import builtins >>> dir(builtins) Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码: >>> if True: ... msg = ‘I am from Runoob‘ ... >>> msg ‘I am from Runoob‘ >>> 实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。 如果将 msg 定义在函数中,则它就是局部变量,外部不能访问: >>> def test(): ... msg_inner = ‘I am from Runoob‘ ... >>> msg_inner Traceback (most recent call last): File "<stdin>",line 1,in <module> NameError: name ‘msg_inner‘ is not defined >>> ? ? 全局变量与局部变量 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。 举个栗子: #!/usr/bin/python3 total = 0 # 这是一个全局变量 # 可写函数说明 def sum( arg1,arg2 ): #返回2个参数的和." total = arg1 + arg2 # total在这里是局部变量. print ("函数内是局部变量 : ",total) return total #调用sum函数 sum( 10,20 ) print ("函数外是全局变量 : ",total) 执行结果: 函数内是局部变量 : 30
函数外是全局变量 : 0
? global 和 nonlocal关键字1.当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。 举个栗子: #!/usr/bin/python3 num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num) fun1() print(num) 执行结果: 1 123 123 如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下栗子: #!/usr/bin/python3 def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num) outer() 执行结果: 100 100 ? 2.修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为: #!/usr/bin/python3 a = 10 def test(a): a = a + 1 print(a) test(a) 执行结果: 11 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python – Sage的“var”如何工作?
- 用 Python 爬取 500 条豆瓣影评,看看《蚁人2》是否有看点?
- Mac OS 设置 Python(和 NumPy)开发环境解析
- Python如何处理单独文件中的类或者它们都应该在一个文件中
- python – pandas dataframe中字符串的出现次数
- python-3.x – SyntaxError:语法无效:除了urllib2.HTTPEr
- java.net.URISyntaxException: Illegal character in query
- 序列的通用操作
- Python将自己写的模块进行打包
- 如何学习Python?自学还是培训?通过这篇文章指点迷津!超级