Python3 函数概要

函数

  函数:简单来讲就是为了实现某种功能而封装的方法,以便于重复调用。
  函数使用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)


发布了36 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35351282/article/details/80850501