函数以def关键词开头,后接函数名和圆括号()。
函数执行的代码以冒号起始,并且缩进。
return[表达式]结束函数,选择性得返回一个值给调用方。不带表达式的return相当于返回None。
def functionname(parameters):
"函数_文档字符串"
function_suite
return [expression]
直接来个例子:
def printlove(str):
print(str)
printlove("I love MM")
#I love MM
temp = printlove("hello")
print(temp)
#hello
#None
后面两行不太理解
Python的函数参数形态灵活多样,即可以实现简单的调用,又可以传入非常复杂的参数。
从简到繁的参数形态如下:
位置参数(positional argument)
def functionname(arg1):
"函数_文档字符串"
function_suite
return [expression]
其中arg1是位置参数,在调用函数时位置要固定。
默认参数(default argument)
def functionname(arg1, arg2=v):
"函数_文档字符串"
function_suite
return [expression]
arg2=v: 默认参数=默认值,调用函数时如果默认参数的值没有传入,则被认为是默认值。默认参数一定要放在位置参数后面,不然会报错。
可变参数(variable argument)
参数个数可变,自动组装成元组
加*的变量名会存放所有未命名的变量参数
def functionname(arg1, arg2=v, *args):
"函数_文档字符串"
function_suite
return [expression]
关键字参数(keyword argument)
*kw可以从0个到无数个,自动组成字典。
def functionname(arg1, arg2=v, args, *kw):
"函数_文档字符串"
function_suite
return [expression]
可变参数&关键字参数
都允许传入0到任意个参数,可变参数在函数调用时自动组成元组,关键字参数在函数内部自动组成字典。
命名关键字参数(name keyword argument)
def functionname(arg1, arg2=v, args, *, nkw, *kw):
"函数_文档字符串"
function_suite
return [expression]
参数组合
混合使用多种参数。
但有固定顺序:
位置参数、默认参数、可变参数、关键字参数
位置参数、默认参数、命名关键字参数、关键字参数
直接举例说明
def add(a, b):
return a + b
print(add(1, 6))
#7
print(add([1, 2, 3], [4, 5, 6])
#[1, 2, 3, 4, 5, 6]
Python中,程序的变量并不是在哪个位置都可以访问的,访问的权限在于这个变量是在哪里赋值的。
局部变量:定义在函数内部的变量具有局部作用域;
全局变量:定义在函数内部的变量具有全局作用域。
当内部作用域想修改外部作用域的变量时,需要用到grobal和nonlocal关键字。
内嵌函数
闭包:一种重要的语法结构,是特殊的内嵌函数
如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就会被认为是闭包。
Python里函数分两种:
①用def关键词定义的正规函数;
②用lambda关键词定义的匿名函数。
lambda创建匿名函数,其没有函数名,语法结构如下:
lambda argument-list:expression
解释一下:lambda是关键词,argument-list是函数参数,expression是一个表达式,输入函数参数,输出一些值(没有return)。
函数式编程是指:代码中的每一块都是不可变的,都是纯函数的形式组成(纯函数就是相互独立,互不影响,对于相同的输入,总会有相同的输出)
匿名函数常常应用于函数式编程的高阶函数,主要有两种形式:
①参数是函数(filter,map)
②返回值是函数(closure)