函数
函数:简单来讲就是为了实现某种功能而封装的方法,以便于重复调用。函数使用def关键字声明,在函数的第一行尽量写注释。
函数也可以有返回内容,加上Return即可。例如:
def functionName(*args):
"NoteContent"
print("functionContent")
return "returnContent"
函数参数与函数调用
必需参数:
Python中变量是没有类型的,所以声明函数时使用了几个形参调用函数就需要传几个参数,参数不限类型。例如:
def functionA(parA, parB):
"使用必需参数时的函数调用"
print("参数A:{0},参数B{1}".format(parA, parB))
print("parA is %s \nparB is %s" % (parA, parB))
functionA("dffd", ['dfd', 'dfdg'])
关键字参数:
简单来讲就是调用的时候形参带值一起去调用函数,实参与形参的参数名称一样。
这样调用的时候就不需要考虑实参的循序。例如:
def functionB(parA, parB):
"使用关键字参数时的函数调用"
print("parA is %s \nparB is %s" % (parA, parB))
functionB(parB="asd", parA=['sd', 'sdf'])
默认参数:
默认参数指的是声明函数时,函数的形参默认赋一个初始值。函数调用时若有传实参则形参使用实参的值,否则使用默认值。例如:
def functionC(parA='fdfg', parB=['ggg', 'ffd']):
"使用默认参数时的函数调用"
print("parA is %s \nparB is %s" % (parA, parB))
functionC("gdgd")
不定长参数:
在python中在形参前面加上‘*’号表示不定长参数,意思是调用的时候可以传任意个实参。
参数在函数中会以元组即tuple的形式出现。例如:
def functionD(*pars):
"使用不定长参数时的函数调用"
print("tuple is", pars)
functionD([50, 'dsf'], 50, 'dd')
不定长参数后面还有参数,函数在调用时,
不定长参数后面的参数要使用关键字参数的形式调用。例如:
def functionE(*pars, parA):
"使用不定长参数时的函数调用"
print("tuple is ", pars, "\nparA is %s" % (parA))
functionE(['fd', 'gg'], 0, parA=999)
双星号参数:
例如**pars。这种参数在函数中以字典的形式出现,参数个数也是任意的。
这就需要传入的实参是变量以及值的形式,函数中会把实参转成键值对最终以字典的形式出现。例如:
def functionF(**pars):
print("dictionaries is ", pars)
functionF(parA=10, parB=30)
匿名函数:
匿名函数不需要使用def声明,而是使用lambda表达式,一行代码就是一个函数。但是单独使用lambda系统不会分配内存地址,所以使用的时候一般都要用一个变量接受lambda。例如:
anonymousFunction = lambda parA, parB: print("parA is %s \nparB is %s" % (parA, parB))
anonymousFunction('fdf', 'fdfg')
作用域:局部变量和全局变量
全局变量:在函数外声明。
局部变量:在函数体内声明,只能在函数内部使用。
# 全局变量
parA = 'abc'
def functionG():
# 局部变量
parB = 123
在函数中给全局变量赋值并不是修改了全局变量,而是重新创建了一个变量。
要想在函数中改变全局变量的值需要借助global关键字。例如:
parA = 'abc'
def functonH():
"使用globbal在函数内定义全局变量"
global parA
parA = 'qwe'
return parA
print(functonH(), parA)
嵌套函数
嵌套函数指的是在函数体内声明的函数,该函数只能在所在的函数体中使用。同样的,函数体内的变量在嵌套函数中使用要借助nonlocal关键字,
如果要改变全局变量则使用global关键字定义全局变量,否则全部都是产生新的变量,
在内存中开辟新的地存储单元。例如:
def functionI():
parC = 'ccc'
print(parC)
def functionJ():
nonlocal parC
parC = 'abc'
functionJ()
print(parC)
functionI()
高阶函数
1、把一个函数名当做一个实参,传给另外一个函数
2、返回值中包含函数名(不修改函数的调用方式)
在.NET中一般使用委托的方式,把一个函数作为参数去执行另一个参数。
在python中则直接执行函数,给函数传的参数又是一个函数。例如:
def Amount():
return 10 + 10
def calculate(func):
"func为函数形参"
#没有改变实参函数的调用方式,还是函数名+括号调用,没有加什么参数
print(10 + int(func()))
#把函数名作为形参去执行高阶函数
calculate(Amount)