函数快速入门
函数基础
函数的作用
函数主要以功能为导向,减少代码重复,使代码可读性增强.
函数的定义及调用
# 函数的定义 def test(a,b) return a + b # 函数的调用 test(1,2)
定义:
- def 关键字开头,函数名后面要跟一个(),最后要有 : .
- 函数名只能包含字符串,下划线,和数字且不能以数字开头.
- 每个函数都应该对功能和参数进行相应的说明,应该写在代码的下一行.增强代码的可读性.
函数的返回值
在函数中可以使用 return 关键字,定义函数的返回值. 函数遇到 return 关键字则不继续执行,如果没有定义返回值则返回 None .
如果返回多个值,则返回一个元祖.
函数的参数
函数可以接受参数,具体由函数进行定义.
实参: 实参即是给函数传递的参数.
形参: 形参即是函数定义的参数.
实参:
1) 位置参数 def test1(a,b): print(a + b) test(1,2) 2) 关键字参数 def test1(a,b): print(a + b) test(a=1,b=2) 3) 混合参数 a) 位置参数必须在关键字参数前面. b) 对于一个形参只能赋值一次. def test(a,b,c): print(a + b + c) test(1,b=2,3)
形参:
1) 默认参数 def stu_info(name,sex = "male"): print(name,sex) stu_info('test1') stu_info('test2','female') 2) 参数陷阱: 默认参数是一个可变的数据类型. def defult_param(a,l = []): l.append(a) print(l) defult_param('test1') defult_param('test2') 3) 动态参数 按照位置传递的多余的参数都由 args 统一接收,保存成一个元祖形式. def mysum(*args): the_sum = 0 for i in args: the_sum+=i return the_sum the_sum = mysum(1,2,3,4) print(the_sum) def stu_info(**kwargs): print(kwargs) print(kwargs['name'],kwargs['sex']) stu_info(name = 'test',sex = 'aa')
函数进阶
函数的命名空间和作用域
代码在运行的开始,创建的存储变量与值的关系的空间叫做全局命名空间,在函数的运行中开辟的空间叫做局部命名空间。
命名空间的本质就是存放名字与值的绑定关系,
命名空间的分类:
- 全局命名空间
- 局部命名空间 即是 函数中的作用域 或者类中。
- 内置命名空间 存放的是python 解释器为我们提供的变量。
三种命名空间之间的加载顺序及取值顺序:
加载顺序: 内置命名空间 ---> 全局命名空间 --> 局部命名空间 (调用时才加载)
局部调用: 局部命名空间 ---> 全局命名空间 --> 内置命名空间
全局调用:全局命名空间 --》 内置命名空间。
作用域
作用域就是作用范围,按照生效范围可以分为局部作用域和全局作用域,
全局作用域: 包含内置命名空间全局名称空间,在整个文件的任意位置都能被引用。全局有效。
局部作用域: 局部名称空间,只能在局部范围内生效,
查看方法:
print(globals()) print(locals())
global 关键字
内置空间可修改全局空间变量值。
a = 10 def func(): global a a = 20 print(a) func() print(a)
nonlocal关键字
- 外部必须有这个变量
- 在内部函数声明 nonlocal 变量之前不能出现同名变量。
- nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。
闭包
闭包函数: 内部函数包含对外部作用域而非全局作用域的名字引用,该内部函数称为闭包函数.
函数内部定义的函数称为内部函数
def func(): name = 'eva' def inner(): print(name) return inner f = func() f()
作者:闫世成
出处:http://cnblogs.com/yanshicheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。