python基础之函数
1,函数代码块以def关键词开头,后接函数标识符名称和圆括号()
2,任何传入参数和自变量必须放在圆括号中间,圆括号之间用于定义参数
3,函数的第一行语句可以选择性的使用文档字符串-用于存放函数说明
4,函数内容以冒号起始,并且缩进
5,return结束函数,选择性地返回一个值给调用方,不带表达式的return相当返回 None
def printme( str ):
"打印传入的字符串到标准显示设备上"
print str
return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数和代码块结构,这个函数的节本结构完成以后,可以通过另一个函数调用执行,也可以直接从python提示符执行。
参数
可变参数
在python函数中,还可以定义可变参数,参数可以是任意个
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
关键字参数
可变参数允许你传入0个或者任意个参数,这些可变参数在函数调用时自动组装为一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
函数person
除了必选参数name
和age
外,还接受关键字参数kw
。在调用该函数时,可以只传入必选
参数组合
在python中定义函数,可以用必选参数,默认参数,可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数,默认参数,可变参数和关键字参数
总结:
1,python的函数具有非常灵活的参形态,既可以实现简单的调用,又可以传入非常复杂的参数
2,默认参数一定要用于不可变对象,如果是可变对象,运行会有逻辑错误
3,要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kw是关键词参数,kw接收的是dicr,
4,函数如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1,2,3),又可以先组装list或者tuple,再通过*args传入func(*(1,2,3))
关键字参数既可以直接传入:func(a=1,b=2),又可以先组装dict,再通过**kw传入:func(**{'a':1,'b':2})
作用域:作用范围
全局作用域:内置名称空间与全局名称空间的名字属于全局范围,
在整个文件的任意位置都能被引用,全局有效。
局部作用域:函数调用时
闭包函数:函数内部定义的函数,成为内部函数,该内部函数包含对外部
作用域,而不是对全局作用域名字的,那么该函数成为闭包函数。
函数的返回值
1,指定返回值与隐含返回值
函数体中return语句有指定的返回值时,返回的就是其值
函数体中没有retrun语句时,函数运行结束会隐含返回一个none作为返回值类型是 NoneType,与 return 、return None 等效,都是返回 None。
2 return 语句位置与多条 return 语句
函数中使用return语句返回‘返回值’,可以将其赋给其他变量作其他用处
所有函数的返回值,如果没有return语句,会隐式地调用return None作为返回值
一个函数可以存在多条return语句,但只有一条可以被执行,如果没有一条return语句被执行,同样会隐式调用 return None 作为返回值
如果有必要,可以显示调用return None明确返回一个None(空值对象)作为返回值,可以简写为 return,不过 python 中懒惰即美德,所以一般能不写就不写
如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了
3,返回值类型
无论定义的是返回什么类型,return只能返回单值,但值可以存在多个元素
return[1,3,5]是至返回一个列表,是一个列表对象1,3,5分别是这个列表的元素
return1,3,5看是返回多个值,隐式的被python封装成了一个元组返回