python函数

函数的参数

函数定义方法

def 函数名(参数列表):
    函数体
  • 函数的参数有必选参数默认参数,默认参数可以不传,但是默认参数后面不能有必选参数
  • 可变参数 fun(fmt,*args) 没有关键字参数时,可变参数要放在最后面
  • 关键字参数print(fmt, *args, **kw) 关键字参数要放在最后面

可变参数示例

def fun(fmt, *values):
    print(fmt)
    # 打印 values type is <class 'tuple'>
    # 说明可变参数传递的是元组
    print("values type is",type(values))
    print(values) # 打印 (1, 2)
    for v in values:
        print("v = ", v)

fun("%d", 1, 2)

关键字参数示例

# 关键字参数
def fun4(a, **kw):
    print("a = ", a) # a = 100
    print("kw type is ", type(kw)) # kw type is  <class 'dict'>
    if "name" in kw:
        print(kw["name"]) # xiaoming

fun4(100, name = "xiaoming")

python函数返回值

返回的方式

  • return或者没有return语句
  • return None None表示没有,与C语言不同,python中对None的访问会出错
  • return re 返回1个值
  • return r1,r2,r3 返回多个值

python函数return之后内部参数的引用计数会加1, 注意,python中没有局部变量的概念,都是引用,变量出了作用域引用计数会减1

return语句将参数引用计数加1,出了函数后参数引用计数减1,所以python中函数里的局部变量在函数外也可以访问

下面的代码说明return默认返回None

def fun1():
    print("fun1")

re = fun1()
print(re) # 打印 None

下面的代码示例返回多个值

def fun4():
    return 5, "test", [1, 2]

i, s, l = fun4()
print("i is ", i)  # 5
print("s is ", s)  # test
print("l is ", l)  # [1,2]

闭包(Closure)

闭包本质就是内嵌函数

先看一个简单的闭包示例

def outfun(a):
    def infun(b):
        return a + b
    return infun

f = outfun(1)
print("f() = ", f(3)) # 打印4

闭包返回了一个函数,

lambda函数

lambda语法

lambda [parameters]:expression

例如lambda x,y:x*y;函数输入是x和y,输出是他们的积 lambda使用示例

fun = lambda x, y : x*y
print("lambda fun = ",fun(3,5)) # lambda fun =  15

def testfun():
    return lambda x,y:x+y

f = testfun()
print(f(1,2)) # 3

函数中变量的作用域

python中变量的作用域有两种

  • Local(函数内部)局部作用域
  • Enclosing(嵌套函数的外层函数内部) 嵌套作用域(闭包)
  • Global(模块全局)全局作用域
  • Built-in(内建)内建作用域 上述作用域的优先级从上往下依次减小L->E->G->B,(即变量查找次序从上往下)

那么,如果我们在Local作用域但是想要访问E作用域的变量,要怎么做?可以使用globalnonlocal关键字。

global:函数内访问全局变量

# 全局作用域
gx = 1001

def fun():
    global gx # 用global来使用全局的gx变量
    gx += 1000
    print(gx)

fun() # 2001

nonlocal:闭包函数访问外部函数变量

def fun():
    c = 1002

    def infun():
        # 内嵌作用域
        nonlocal c
        print(c)
    return infun

f = fun()
f() # 输出1002
© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-06-04

results matching ""

    No results matching ""