函数简介
来源:互联网 发布:linux 关闭snmp 编辑:程序博客网 时间:2024/05/25 05:34
定义:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。自己创建函数,这被叫做用户自定义函数。
定义一个函数
我们可以定义一个由自己想要功能的函数,以下是简单的规则:
1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于 返回 None。
def function(): '''注释''' 代码段
return 值
调用:
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
function()function(function)
参数:
一、形参与实参
def function(variable1,variable2): #variable--形参 代码段function(data1,data2) #data--实参二、 位置参数:按照从左到右的顺序依次定义的参数
按位置定义的形参,必须被传值,多一个不行,少一个也不行
按位置定义的实参,与形参一一对应
三、 关键字参数:实参在定义时,按照key=value形式定义
关键字参数可以不用像位置实参一样与形参一一对应,指名道姓地传值
注意的问题一:位置实参必须在关键字实参的前面
注意的问题二:实参的形式既可以用位置实参又可以是关键字实参,但是
一个形参不能重复传值
def function(variable1,variable2): 代码段function(data1,varable2=data2)
四、 默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段可以
不用传值
默认参数需要注意的问题一:必须放在位置形参后面
默认参数需要注意的问题二:默认参数通常要定义成不可变类型
默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次
def function(variable1,variable2=data): 代码段function(data1)
五、 可变长参数:可变长指的是实参的个数不固定
按位置定义的可变长度的实参:*
按关键字定义的可变长度的实参:**
def func(x,y,*args): #x=1,y=2,args=(3,4,5,6) print(x,y) print(args) func(1,2,3,4,5,6)
def func(x,y,*args): #args=(3,4,5,6) print(x,y) print(args)func(1,2,*(3,4,5,6)) #foo(1,2,3,4,5,6)
def func(x,y,z): print(x,y,z)func(1,*(2,3)) #func(1,2,3)
func(*(2,3)) #func(2,3)
def func(x,y=2,z=1): print(x,y,z)func(*('a','b','c')) #func('a','b','c')
def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3} print(x,y) print(kwargs)func(1,y=2,z=3,a=1,b=3)
def func(x,y,**kwargs): #x=1,y=2,**kwargs=**{'a':1,'b':3,'z':3} print(x,y) print(kwargs)func(1,y=2,**{'a':1,'b':3,'z':3}) #func(1,y=2,z=3,b=3,a=1)
六、 命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是 以关键字的形式来传值
def register(name,age,*,group,**kwargs): print(name) print(age) print(kwargs)register('egon',18)register('egon1',18,hobby='paly1',group='group1')
七、参数顺序:形参:位置形参,默认参数,*args,命名关键字参数,**kwargs
名称空间与作用域
通俗的来说,Python中所谓的命名空间可以理解为一个容器。在这个容器中可以装许多标识符。不同容器中的同名的标识符是不会相互冲突的。理解python的命名空间需要掌握三条规则:
第一,赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命名空间。
第二,函数定义(包括def和lambda)产生新的命名空间。
第三,python搜索一个标识符的顺序是"LEGB"。
简而言之,LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
locals 是函数内的名字空间,包括局部变量和形参
enclosing 外部嵌套函数的名字空间(闭包中常见)
globals 全局变量,函数定义所在模块的名字空间
builtins 内置模块的名字空间
所以,在 Python 中检索一个变量的时候,优先回到 locals 里面来检索,检索不到的情况下会检索 enclosing ,enclosing 没有则到 globals 全局变量里面检索,最后是到 builtins 里面来检索。
当然,因为 builtins 的特殊性,我们可以直接在 builtins 里面添加变量,这样就可以在任意模块中访问变量,不过这种方法太过于变态,不推荐这么做。
locals,globals
函数的形参跟内部变量都存储在 locals 中。
===============================================================
函数是第一类对象(First-Class Object)
函数作为对象可以赋值给一个变量、可以作为元素添加到容器对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。
- 函数简介
- 函数简介
- 函数简介
- 函数简介 函数名称: strrchr
- winsock 函数简介
- windows API函数简介
- 函数简介(C)
- Winsock 函数简介
- [转帖]winsock函数简介
- WIN32 API函数简介
- Winsock 函数简介
- getopt()函数简介
- sscanf 函数简介
- delphi 7 函数简介
- Xlib 相关函数简介
- strdup函数简介
- getcwd函数简介
- winsock 函数简介
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis+Maven)
- android项目管理(从入公司到项目上线)
- ViewPager禁止滑动
- 【密码字典生成之】密码神器~Crunch
- Leetcode 451. Sort Characters By Frequency
- 函数简介
- PHP Ctype函数
- vlc-android-sdk开源库中的MediaPlayer类与原生MediaPlayer的对比
- ELFhash
- SpannableString使用详解
- chap6进程
- jqueryMobile事件
- 如何高效的使用c++
- Hive优化(整理)